《脉宽调制PWM在小车中的应用》由会员分享,可在线阅读,更多相关《脉宽调制PWM在小车中的应用(5页珍藏版)》请在金锄头文库上搜索。
1、脉宽调制PWM在小车中的应用1如何改变转速2什么是PWM3 PWM调速的实质4 PWM的产生方法5如何利用51单片机输出PWM波6直流电机PWM调速程序实例及分析7 PWM用于舵机角度控制说明通过前面的内容我们知道,通过H桥电路,可能有效的解决单片机I/O 口驱 动能力不足的问题,并且可以实现电机的正转、反转及刹车等,但对于如何对电 机的速度进行调整298N却无能为力,要很好的速度调节的问题,就要用到PWM 技术,此外对于舵机角度调节,也需要用到PWM技术,下面分别进行介绍.1如何改变转速这里我们先讨论如何使电机的速度得到变化。在智能小车中,直流有刷电机 是主要的动力源,而直流电机改变速度的方
2、式应该是改变供给电机的电压,使供 给电机的功率变化,从而改变速度,也就是速度和功率成比例关系,功率又与加 在电机两端有关,所以我们可以通过改变电机两端电压的大小来进行速度的改 变。改变电压有两种方法,一是利用电子调速器,一是利用软件的方式。因为 加装电子调速器会增加硬件上的成本,所以一般利用后者。而在程序中要直接改 变电压比较麻烦,所以就产生了利用断续供电的方式改变供给电机的平均功率, 以达到改变速度的目的,这种断续供电的方式就是PWM。2什么是PWMPWM中文意思是脉冲宽度调制,意思是通过程序让单片机的I/O 口输出一定 频率的方波,并且可以改变占空比。简单说就是通过程序让单片机的I/O 口
3、对电机进行断续供电,并通过改变通、 断电时间比改变电机所得到的平均电压值。举个通俗的例子就是,假设我们每天 24小时需向电机供电让其运转,现在具体到每小时,我们可以半时通电,另外 半小不通电,此时就相当于产生了个周期为1小时,占空比(也说成脉宽)为5。 的PWM波,当然我们也可以前40分钟通过电,后20分钟断,此时的周期不变, 但占空比就变成了66.7%(40/60*100%),两种不同的占空比会使得电机处于不 同的速度,这就是调速。3 PWM调速的实质实际上电机速度的快慢最终的决定因素是加在电机两端的电压来决定(说 通断电时就叫平均电压),是电压的改变最终于造成了速度的改变。如果在控制 要求
4、比较高的场还必须考虑到电池和路面摩擦力变化的影响,因为同样的PWM 由于电池电压下降产生的平均电压就不同,相同的PWM路面摩擦力不同,这些都 会造成速度发生变化,此时要精确控制的就必须加PID实行闭环控制,我们这里 暂不讨论这个问题,但大家一定要理解调整的实质就是调电压,否者在高速控用 到PID时就会理解不清。4 PWM的产生方法PWM的生产在现代单片机系统一般利用软件的方式不实现,根据单片机内部 是否带有PWM功能模块又分成下面两种方法。1)对单像51之类的单片机,因为其内部没有PWM模块,所以要得到PWM 我们只能用软件方式来实现,即通过执行软件延时循环程序交替改变端口某个二 进制位输出逻
5、辑状态来产生脉宽调制信号,设置不同的延时时间得到不同的占空 比,但是这种方法产生的Pwm具体的占空比不易计算,只能根据经验和反复的高 度才能最终达到应用需求,一些简单和要求不高的速度调节,通常可以采用此种 方法。如果要求较高或者说需要准确占空比值的时,通常的情况下我们会用到内 部定时器来实现,具体的方法后面的章节会讲解到。2)对于像飞思卡尔之类的芯片,因为内部已经带有PWM模块,我们则可以 直接使用,此时一般只需设置相应的寄存器就可以了。这种方法产生PWM优点有 很多,精度高、程序相对简单,但最大的优点则是它不占用CPU处理的时间, 要知道CPU平时可是个大忙人,它有很多事情要做的,像一些应用
6、要求比较高的 场合,51单片机通常就不适合,必须选用自带PWM模块的单片机。5如何利用51单片机输出PWM波PWM这个功能在飞思卡尔、STM32等高档的单片机内部有专用的模块,用此 类芯片实现PWM功能时只需要通过设置相应的寄存器就可实现周期和占空比的 控制。但是如果要用51单片机的话,也是可以的,但是比较的麻烦。此时需要 用到内部定时器来实现,可用两个定时器实现,也可以用一个定时器实现。用两个定时器的方法是用定时器T0来控制频率,定时器T1来控制占空比。 大致的的编程思路是这样的:T0定时器中断让一个I0 口输出高电平,在这个定 时器T0的中断当中起动定时器T1,而这个T1是让IO 口输出低
7、电平,这样改变 定时器T0的初值就可以改变频率,改变定时器口的初值就可以改变占空比。下面重点介绍用一个定时器的实现PWM的方法。因为市面上的智能小车所 采用的电机大多数为TT减速电机,通过复杂的实验此电机最佳的工作频率为1000HZ (太高容易发生哨叫,太低电机容易发生抖动),所以下面以周期为1ms (1000HZ)进行举例,要产生其它频率的PWM波,程序中只需作简单修改即可。用一个定时器时(如定时器T0),首先你要确定PWM的周期T和占空比D, 确定了这些以后,你可以用定时器产生一个时间基准t,比如定时器溢出n次的 时间是PWM的高电平的时间,则D*T=n*t,类似的可以求出PWM低电平时间
8、需要 多少个时间基准n。因为这里我们是产生周期为1ms(1000HZ)的PWM,所以可设置中断的时间基 准为001ms,,然后中断100次即为1ms。在中断子程序内,可设置一个变量如 time,在中断子程序内,有三条重要的语句:1、当time=100时,time清零(此 语句保证频率为1000HZ),2、当timen时(n应该在0 100之间变化开),让单 片相应的I/O 口输出高电平,当timen时,让单片相应的I/O 口输出低电平, 此时占空比就为n。6直流电机PWM调速程序实例及分析程序12-1单片机的I/O 口输出固定频率的PWM波下面按上面的思路给出一个具体程序:/*程序名:单片机输
9、出固定频率的PWM波*/ /* 晶振:11-00592 MHz CPU型号:STC89C52 */ /*功能:P2八0 口输出周期为1ms(1000HZ),占空比为%80的PWM波*/#include #define uint unsigned int #define uchar unsigned char sbit PWM1=P2八0;/接IN1控制正转 sbit PWM2=P2八1;/接IN2控制反转 uchar time;void main()TMOD=0x01;/定时器0工作方式1TH0=0xff;/(65536-10)/256;/ 赋初值定时TL0=0xf7;/(65536-10)%256;/0.01msEA=1;/开总中断ET0=1;开定时器0中断TR0=1;/启动定时器0while(1)void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=500;y0;y-);void tim0() interrupt 1TR0=0;/赋初值时,关闭定时器TH0=0xff;/(65536-10)/256;/ 赋初值定时TL0=0xf7;/(65536-10)%256;/0.01msTR0=1;/打开定时器