欢迎来到天天文库
浏览记录
ID:43557044
大小:41.50 KB
页数:5页
时间:2019-10-10
《带PWM调速的小车循迹程序》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、//ICC-AVRapplicationbuilder:2010-9-2110:22:14//Target:M16//Crystal:8.0000Mhz#include#include#defineucharunsignedchar#defineuintunsignedintuintdiscrepancy=0;//functiondeclarationvoidport_init(void);voidmotor(ucharindex,ucharspeed);//inputPWMwave(PWM波输入
2、)voidsensor_state(void);//gettherunningcondition(运行情况)voidrevise_to_line(void);/0=runforward,1=left,2=right,3=severleft,4=severrightvoiddelayms(uintMS);//callthisroutinetoinitializeallperipherals【调用这个程序初始化所有的外围设备】voidinit_devices0(void){//stoperrantinterruptsuntilsetupCL
3、I();//disableallinterrupts【禁用所有中断】timer0_init();MCUCR=0x00;GICR=0x00;TIMSK=0x02;//timerinterruptsources【定时器中断源】SEI();//re-enableinterrupts【重设中断】//allperipheralsarenowinitialized【现在所有外设的初始化】}//initializeT/C1【初始化T/C1】voidtimer1_init(void){TCCR1B=0x00;//停止定时器TIMSK
4、=0x00;//中
5、断允许TCNT1H=0x00;TCNT1L=0x00;//初始值OCR1AH=0x00;OCR1AL=0xF0;//匹配A值OCR1BH=0x00;OCR1BL=0xF0;//匹配B值ICR1H=0xFF;ICR1L=0xFF;//输入捕捉匹配值TCCR1A=0xA1;TCCR1B=0x01;//启动定时器}//callthisroutinetoinitializeallperipherals【调用这个程序初始化所有的外围设备】voidinit_devices1(void){CLI();//禁止所有中断timer1_init();MCU
6、CR=0x00;MCUCSR=0x80;//禁止JTAGGICR=0x00;SEI();//开全局中断}//PWM调速,通过改变占空比,周期性地开闭使能端,调节电机的有效电压。//usePD4,PD5tooutputPWM,speed(0~255)【使用PD4,PD5输出PWM、速度】voidmotor(ucharindex,ucharspeed){if(index==1){OCR1AH=0x00;OCR1AL=speed;}if(index==2){OCR1BH=0x00;OCR1BL=speed;}}//delaytimebyms【
7、延迟时间通过质谱(ms)】voiddelayms(uintMS){uinti,j;for(i=0;i8、0x30;}/*****************传感器函数********************///获取小车的行驶状态。0(直线),1(左偏),2(右偏),3(严重左偏),4(严重右偏)//从左到右传感器(光电对管)对应的输入端口:PA0,PA1,PA2,PA3,PA4//正常行驶时引导线夹在PA1,PA3之间//根据端口PA0,PA1,PA3,PA4的值判断行驶状态。(中间传感器PA2并未使用)voidsensor_state(void){ucharstate,state1,state2;//暂存PINA0~PINA4相应位的值s9、tate1=0b00000010&PINA;state2=0b00000001&PINA;if(state1==0b00000010){if(state2==0b00000001){discrepancy=
8、0x30;}/*****************传感器函数********************///获取小车的行驶状态。0(直线),1(左偏),2(右偏),3(严重左偏),4(严重右偏)//从左到右传感器(光电对管)对应的输入端口:PA0,PA1,PA2,PA3,PA4//正常行驶时引导线夹在PA1,PA3之间//根据端口PA0,PA1,PA3,PA4的值判断行驶状态。(中间传感器PA2并未使用)voidsensor_state(void){ucharstate,state1,state2;//暂存PINA0~PINA4相应位的值s
9、tate1=0b00000010&PINA;state2=0b00000001&PINA;if(state1==0b00000010){if(state2==0b00000001){discrepancy=
此文档下载收益归作者所有