单片机c语言模块化编程之双电机驱动篇

单片机c语言模块化编程之双电机驱动篇

ID:9881221

大小:370.00 KB

页数:10页

时间:2018-05-13

单片机c语言模块化编程之双电机驱动篇_第1页
单片机c语言模块化编程之双电机驱动篇_第2页
单片机c语言模块化编程之双电机驱动篇_第3页
单片机c语言模块化编程之双电机驱动篇_第4页
单片机c语言模块化编程之双电机驱动篇_第5页
资源描述:

《单片机c语言模块化编程之双电机驱动篇》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、单片机C语言模块化编程之双电机驱动篇基于PROTEUS电路仿真;电机通过L298电机驱动模块驱动;通过双定时器完美生成PWM占空比控制电机速度,也可以单独使用一个定时器驱动双电机,方法一样;通过按键扫描的方式控制电机的运动状态前进,后退,开始,停止,左拐,右拐等操作;通过查看此文档,可以让初学者对程序模块化有一个初步认识,对电机驱动原理有一个初步了解。注:在真实遥控小车中能够正常运转,速度可以任意调节通过go(ucharsped1,ucharsped2)Proteus仿真图如下:C语言代码实现:/*motor.h*

2、/#ifndef_MOTOR_H_#define_MOTOR_H_#include#defineuintunsignedint#defineucharunsignedchar//电机控制位sbitIN1=P0^0;//电机1的控制位IN1,IN2的值控制电机的正转,反转,停止,IN1=1,IN2=0电机正转,IN1=0,IN2=1电机反转,IN1=0,IN2=0电机停止转动;sbitIN2=P0^1;sbitINA=P0^4;//电机1的使能位INA=1,电机开始工作,INA=0,电机停止工作sb

3、itIN3=P0^2;//电机2的控制位IN3,IN4的值控制电机的正转,反转,停止,IN3=1,IN4=0电机正转,IN3=0,IN4=1电机反转,IN3=0,IN4=0电机停止转动;sbitIN4=P0^3;sbitINB=P0^5;//电机2的使能位INB=1,电机开始工作,INB=0,电机停止工作//此处需要注意的地方,关于模块化编程时如果用到全局变量时,全局变量要在MOTOR.C中定义,MOTOR.H中需要extern声明(不可以再次赋值可以直接尝试下),否则将会报错。externuintspeed1,s

4、peed2;//speed1电机速度值,t1电机一个周期的时间,PWM=speed/t;externvoiddelay(uintxms);//一个简短的延时函数externvoidgo(ucharspe1,ucharspe2);//电机加速函数,通过spe1,spe2控制电机速度externvoidqianjin();//电机前进函数externvoidback();//电机后退函数externvoidturn_left();//电机左转externvoidturn_right();//电机右转externvoid

5、start();//电机启动函数externvoidstop();//电机停止函数externvoidISP_init();//定时器初始化函数#endif/*motor.c*/#include"motor.h"uintspeed1=0,speed2=0;voiddelay(uintxms)//简单的延时{uinti;ucharj;for(i=xms;i>0;i--)for(j=110;j>0;j--);}voidgo(ucharspe1,ucharspe2)//速度调节函数0~100之间{speed1=spe1;

6、speed2=spe2;}voidqianjin()//电机前进函数{IN1=1;IN2=0;IN3=1;IN4=0;}voidback()//电机后退函数{IN1=0;IN2=1;IN3=0;IN4=1;}voidturn_left()//电机左转{go(20,80);//此处速度可以任意调,0~100之间,左边的速度要小于右边速度值}voidturn_right(){//电机右转go(80,20);}voidstart()//开始{TR0=1;TR1=1;INA=1;INB=1;}voidstop()//停止{

7、TR0=0;TR1=0;INA=0;INB=0;}voidISP_init(){TMOD=0X11;TH0=-500/256;TL0=-500%256;TH1=-500/256;TL1=-500%256;ET0=1;ET1=1;EA=1;}voidTimer_0()interrupt1//通过2个定时器来实现左右2个电机占空比的输出{staticuchartemp1=0,t1=0;TH0=-500/256;TL0=-500%256;if(t1==0){temp1=speed1;//每个pwm输出完成后再接受新的速度

8、值。}if(t1<=temp1)//通过定时器来实现左边电机PWM占空比的输出。{INA=1;}else{INA=0;}t1=(t1+1)%100;}voidTimer_1()interrupt3{staticuchartemp2=0,t2=0;TH1=-500/256;TL1=-500%256;if(t2==0)//一个周期后才改变temp的值{temp2

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。