微控制器应用课件设计Word格式文档下载.docx
- 文档编号:20587544
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:19
- 大小:1.21MB
微控制器应用课件设计Word格式文档下载.docx
《微控制器应用课件设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《微控制器应用课件设计Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
需求分析6
一、课程设计目的7
二、设计过程7
2.1MotorSpeedControl工作原理7
2.2结构分析8
2.3实训步骤11
三、运行结果12
四、源程序代码14
4.1Demonstrator.c程序14
4.2PC_COMM.C程序17
五、心得体会22
六、参考文献23
需求分析
微控制器的发展趋势:
一方面,若是以不同微控制器的销售数目来看,可以发现几个趋势,首先是8位微控制器长期居微控制器市场的主要份额,并在2007年以后开始略有动摇。
8位微控制器的出货数目以往皆占整体微控制器出货数目的七至八成以上,自2007年以后,8位微控制器的龙头地位渐渐下滑,其出货数目占整体微控制器市场的比重在2010年后将下滑至七成以下。
第二是我们可以观察到在非8位微控制器的高阶微控制器领域应用中,32位微控制器持续取代16位元微控制器的趋势相当明显,32位微控制器在2006年首度超越16位微控制器,市占率稳居第二,同时其出货数目将持续上升,到了2010年,32位微控制器将有机会达到32.62%的市占率,成为另一个重要的微控制器应用领域。
32位微控制器的逐渐兴起主要是由于各项家电与消费电子产品需要更多更强大的功能,而更复杂的影音应用、智能判断与控制领域也需要效能更强大的处理器,因此32位微控制器将逐渐取代目前的16位微控制器是可以确定的趋势。
一、课程设计目的
二、设计过程
2.1MotorSpeedControl工作原理
微程序控制器的工作原理:
是依据读来的机器指令的操作码找到与之对应的一段微程序的入口地址,并按由指令具体功能所确定的次序,逐条从控制存储器中读出微指令,以“驱动”计算机各功能部件正确运行。
微程序控制的基本思想,就是仿照通常的解题程序的方法,把操作控制信号编成所谓的“微指令”,存放到一个只读存储器里.当机器运行时,一条又一条地读出这些微指令,从而产生全机所需要的各种操作控制信号,使相应部件执行所规定的操作。
2.2结构分析
电动机基座由泡沫板和胶带做成来支持电动机,电动机基座正左下角被使用来支持槽型光耦,这个抠图将用于下一个项目
车轮模式位于书本“CProgrogrammingforMicrocontrollers”附录6.把它打印出来,把它贴了一块坚固的薄硬纸板。
我把一些电工胶带,在电机轴的径向削减相同的中心,在车轮上。
它工作。
这个抠图将用于下一个项目
槽型光耦及其电路图
一个9V的电动机,一个9V的电池,一个9V的电池连接器,一个4N28光隔离器,一个TIP115功率晶体管,一个150Ohm电阻,还有一个2.2k的电阻。
马达可以用泡沫芯板切割下来组成和黏贴来作为底部,左边直立部分用于下一个工程来做光导体。
风扇部分类似于车轮的模式在课本的附录6,剪下来贴在一张比较坚实的薄硬纸板上,用电胶带贴在轴上,使得轮子中心部分沿着径向是可滑动的,工作的。
用一个光隔离器来隔离电机功率电路从而帮助减少在蝴蝶效应中产生爆炸的可能性。
光绝缘体是一个类似于光隔离器的装置,它有一个空中通道在IR灯发光二极管和IR检测晶体管之间。
她这个不透明的对象通过二极管和检测器导致晶体管熄灭因此电流“中断”。
我们可以把晶体管联结到蝴蝶效应的引脚和检测器的中断上。
如果你拼凑电机基地,使车轮通过在光导体槽旋转时,每次开放通行证。
晶体管的开启和关闭时回槽已经过去。
2.3实训步骤
(1)启动运行programmers软件做相应设计,如图:
(2)打开控制程序pc_comm.c和makefile文件,按相应步骤进行编译.
(3)编译无误后,打开AVRstudio4软件,如图:
(4)在上图中打开pc_comm.cof文件,装入给定程序模板,运行演示;
(5)运行成功
三、运行结果
如图所示,风扇转动,按复位键后风扇停止转动.
四、源程序代码
4.1Demonstrator.c程序
//Demonstrator.cMotorSpeedControlversion
#include"
PC_Comm.h"
Demonstrator.h"
unsignedcharmilliseconds=0;
unsignedintsecond=0;
//countto1000andtriggeronesecondevent
unsignedintspeed=0;
//IRdetectorcountpersecond
unsignedintlastspeed=0;
voidinitializer()
{
//Calibratetheoscillator:
OSCCAL_calibration();
//InitializetheUSART
USARTinit();
//SetforpinchangeonPINB0
DDRB=(1<
<
PINB0);
//setpin0tooutput
PORTB=(1<
//setpin0toenablepullup
PCMSK0=(1<
//
EIFR=(1<
7);
//flagforPCINT15-8
EIMSK=(1<
//maskforPCINT15-8
DDRB=0X00;
//setPORTBforinput
PORTB=0xFF;
//enablepulluponforinput
//setPORTDforoutput
DDRD=(1<
PIND0);
PORTD=(1<
milliSecInit(127);
//50%dutycycle1kHzsignal
//sayhello
sendString("
\rPC_Comm.creadytocommunicate.\r"
);
//identifyyourselfspecifically
YouaretalkingtotheMotorSpeedControldemo.\r"
setxxxtosetspeed\r"
}
voidparseInput(chars[])
//parsefirstcharacter
switch(s[0])
{
case'
s'
:
if((s[1]=='
e'
)&
&
(s[2]=='
t'
))
parse_set(s);
break;
d'
m'
(s[3]=='
o'
(s[4]=='
?
'
))
sendString("
default:
\rYousent:
'
"
sendChar(s[0]);
-Idon'
tunderstand.\r"
}
s[0]='
\0'
;
intparse_set(chars[])
charset[11];
unsignedchari=3,j=0;
while((s[i]!
='
(j<
=11))
if((s[i]>
0'
(s[i]<
9'
{
set[j++]=s[i++];
}
else
Error-Parse_setreceivedanoninteger:
"
sendChar(s[i]);
sendChar('
\r'
return0;
set[j]='
if(j>
4)//mustbe<
256
sendString("
Error-Parse_setnumbertoolarge"
return0;
else
set_speed(atoi(set));
return1;
voidset_speed(intcount)
charspeed[11];
SettingtheCompareTimerCountto:
itoa(count,speed,10);
sendString(speed);
sendChar('
milliSecInit(count);
/*
TheUSARTinitsetthesystemoscillatorto2mHz.WesettheTimer0prescaler
toclk/8whichgivesa250kHzinputtothetimer/counter.Acompareof250throws
aninterrupteverymillisecond.
*/
voidmilliSecInit(unsignedcharcount)
//Enabletimer0compareinterrupt
TIMSK0=(1<
OCIE0A);
//Setsthecomparevalue
setOCR0A(count);
//SetPWMPhaseCorrectmode,CLK/8prescaler
TCCR0A=(0<
FOC0A)|(0<
WGM01)|(1<
WGM00)|(1<
CS01);
voidsetOCR0A(unsignedcharcount)
{
OCR0A=count;
//InterruptoccurstwiceperMillisec,timedforPWM
SIGNAL(SIG_OUTPUT_COMPARE0)
//TogglePORtDpin0
if(PORTD&
=1)cbi(PORTD,0);
elsesbi(PORTD,0);
4.2PC_COMM.C程序
//PC_Comm.c
intmain(void)
charstring[64];
unsignedcharcount=0;
//runtheinitializationroutines
initializer();
//BeginforeverchattingwiththePC
for(;
)
{
//Checktoseeifacharacteriswaiting
if(isCharAvailable()==1)
//Ifanewcharacterisreceived,getit
string[count++]=receiveChar();
//receiveapacketupto64byteslong
if(string[count-1]=='
\n'
)//Hyperterminalstringendswith\r\n
{
string[count-2]='
//converttoastring
parseInput(string);
string[0]='
count=0;
}
elseif(count>
64)
{
sendString("
Error-received>
64characters"
}
return0;
charisCharAvailable()
//DoestheRX0bitoftheUSARTStatusandControlRegister
//indicateacharhasbeenreceived?
if((UCSR0A&
(0x80)))return1;
elsereturn0;
charreceiveChar()
//ReturnthecharintheUDR0register
returnUDR0;
voidsendChar(chardata)
inti=0;
//TosenddatawiththeUSARTputthedataintheUSARTdataregister
UDR0=data;
//Checktoseeiftheglobalinterruptsareenabled
if(SREG&
0x80)
//Waituntilthebyteissentorwecountout
while(!
(UCSR0A&
0x40)&
(i<
10000))
i++;
else//Waituntilthebyteissent
while(!
0x40));
//CleartheTXCflag
UCSR0A=UCSR0A|0x40;
voidsendString(chars[])
while(i<
64)//don'
tgetstuckifitisabadstring
if(s[i]=='
)break;
//quitonstringterminator
sendChar(s[i++]);
voidUSARTinit()
//Increasetheoscillatorto2Mhzforthe19200baudrate:
CLKPR=(1<
CLKPCE);
//setClockPrescalerChangeEnable
//setprescaler=4,InterRC8Mhz/4=2Mhz
CLKPS1);
//SettheUSARTbaudrateregistersfor19200
UBRR0H=0;
//(unsignedchar)(baudrate>
>
8);
UBRR0L=12;
//(unsignedchar)baudrate;
//Enable2xspeedchange
UCSR0A=(1<
U2X0);
//Enablereceiverandtransmitter
UCSR0B=(1<
RXEN0)|(1<
TXEN0)|(0<
RXCIE0)|(0<
UDRIE0);
//SettheUSARTtoasynchronousat8bitsnoparityand1stopbit
UCSR0C=(0<
UMSEL0)|(0<
UPM00)|(0<
USBS0)|(3<
UCSZ00)|(0<
UCPOL0);
//Enableinterrupts
sei();
//Setuptheinterruptmaskandflags
PCMSK1=(1<
PINB6)|(1<
PINB4);
//setpin-changeinterruptmask
EIFR=(1<
PCIF1);
//clearexternalintteruptflag1
EIMSK=(1<
PCIE1);
//enableexternalinterrupt1
//CalibratetheinternalOSCCALbyte,usingtheexternal
//32,768kHzcrystalasreference
voidOSCCAL_calibration(void)
unsignedcharcalibrate=0;
//FALSE;
inttemp;
unsignedchartempL;
//setprescaler=8,InterRC8Mhz/8=1Mhz
CLKPS1)|(1<
CLKPS0);
TIMSK2=0;
//disableOCIE2AandTOIE2
ASSR=(1<
AS2);
//selectasynchronousoperationoftimer2(32,768kHz)
OCR2A=200;
//settimer2comparevalue
TIMSK0=0;
//deleteanyinterruptsources
TCCR1B=(1<
CS10);
//starttimer1withnoprescaling
TCCR2A=(1<
CS20);
//starttimer2withnoprescaling
while((ASSR&
0x01)|(ASSR&
0x04));
//waitforTCN2UBandTCR2UBtobecleared
//waitforexternalcrystaltostabilise
for(inti=0;
i<
10;
i++)
_delay_loop_2(30000);
while(!
calibrate)
cli();
//mt__disable_interrupt();
//disableglobalinterrupt
TIFR1=0xFF;
//deleteTIFR1flags
TIFR2=0xFF;
//deleteTIFR2flags
TCNT1H=0;
//cleartimer1counter
TCNT1L=0;
TCNT2=0;
//cleartimer2counter
while(!
(TIFR2&
(1<
OCF2A)));
//waitfortimer2compareflag
TCCR1B=0;
//stoptimer1
//__enable_interrupt();
//enableglobalinterrupt
if((TIFR1&
TOV1)))
temp=0xFFFF;
//iftimer1overflows,setthetempto0xFFFF
{//readoutthetimer1countervalue
tempL=TCNT1L;
temp=TCNT1H;
temp=(temp<
8);
temp+=tempL;
if(temp>
6250)
OSCCAL--;
//theinternRCoscillatorrunstofast,decreasetheOSCCAL
elseif(temp<
6120)
OSCCAL++;
//theinternRCoscillatorrunstoslow,increasetheOSCCAL
calibrate=1;
//TRUE;
//theinterRCiscorrect
//starttimer1
五、心得体会
经历了这次课程设计使我更好的将课本上理论知识与实际应用中的知识更好的结合起来,在在这次课程设计之前我以为这个过程会很简单,但
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 控制器 应用 课件 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)