1.任务及要求
任务:通过单片机定时器改变脉冲信号宽度来控制直流电机启停时间,从而实现多级PWM脉宽调速。具体要求如下:
(1)没按按键前,数码管显示0档,电机停止转动;
(2)按1次按键,数码管显示1档,I/O口输出脉冲宽度为5ms,周期为20ms的脉冲信号控制电机转停;
(3)按2次按键,数码管显示2档,I/O口输出脉冲宽度为10ms,周期为20ms的脉冲信号控制电机转停;
(4)按3次按键,数码管显示3档,I/O口输出脉冲宽度为16ms,周期为20ms的脉冲信号控制电机转停;
(5)按4次按键,数码管显示4档,I/O口输出脉冲宽度为18ms,周期为20ms的脉冲信号控制电机转停;
(6)按5次按键,数码管显示0档,按键次数清零,电机停止转动。
要求:掌握直流电机PWM脉宽调速的原理及编程方法,实现对电机转速的控制。
2.实验接线
直流电机PWM脉宽调速实验连线见图3.2.1。
图3.2.1 单片机与电机接线
注意:常用的电机驱动芯片有L9110、L298N、LMD18200、TA7257P、SN754410,MC33886、ULN2003等,在实际使用中,可根据驱动需要选择不同的芯片来控制不同功率的电机。在图中,为了突出电机接线,省略了单片机最小系统。
2.程序流程图及参考程序
(1)程序流程图
直流电机PWM脉宽调速程序流程图见图3.2.2。
图3.2.2 直流电机PWM脉宽调速程序流程图
(2)参考程序(www.xing528.com)
4.思考题
修改程序,实现既可以对电机加速的控制,也可以对电机减速的控制。
知识补充
1.脉冲宽度调制
脉冲宽度调制(pulse width modulation,简称PWM),是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,被广泛应用于测量、通信、功率控制与变换等许多领域。直流电机PWM脉宽调速就是在直流电源电压基本不变的情况下通过改变电子开关的通断时间,来改变施加到电机电枢端的直流电压脉冲宽度,以调节输入电机电枢电压平均值的调速方式。脉冲宽度越大,提供给电机的平均电压越高,电机转速越快;反之脉冲宽度越小,提供给电机的平均电压越低,电机转速越慢。只要周期足够短就不会看到直流电机明显的关断和导通,在视觉效果上直流电机是匀速转动的。本实训中,利用了定时器T0的中断函数,实现了PWM调速。
2.switch多分支选择语句
switch的用法是判断case后面的表达式和switch后面的表达式是否相匹配,一旦case匹配,就会顺序执行后面的程序代码,而不管后面的case是否匹配,直到遇见break。switch的一般形式如下:
switch(常量表达式)
{
case常量表达式1:语句1;
case常量表达式2:语句2;
case常量表达式3:语句3;
……
default:语句n;
}
当常量表达式所表达的量与其中一个case语句中的常量相符时,就执行此case语句后面的语句,并依次去执行后面所有case语句中的语句,除非遇到break语句跳出switch语句为止。可以在每一个case语句的后面加上break语句,这样就能保证只执行与之相匹配的那一项,在switch...case语句里面最先遇到那一个break就从该位置结束该语句。如果常量表达式的量与所有case语句的常量都不相符,就执行default语句中的语句并跳出switch语句。注意,default并不是一定要有,如果前面遇到break,default就不执行。如果没有遇到break,就一定会执行。
从功能上说,switch语句和if语句完全可以相互取代。但从编程的角度,它们又各有各的特点。当嵌套的if语句比较少时(三个以内),用if编写程序会比较简洁。但是当选择的分支比较多时,嵌套的if语句层数就会很多,导致程序冗长,可读性下降。因此C语言提供switch语句来处理多分支选择。所以if和switch可以说是分工明确的。在很多大型项目中,多分支选择的情况经常会遇到,所以switch语句用得还是比较多的。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。