如何利用51单片机输出PWM波
1、理论知识2、程序及分析1、理论知识
PWM这个功能在飞思卡尔、STM32等高档的单片机内部有专用的模块,用此类芯片实现PWM功能时只需要通过设置相应的寄存器就可实现周期和占空比的控制。但是如果要用51单片机的话,也是可以的,但是比较的麻烦。此时需要用到内部定时器来实现,可用两个定时器实现,也可以用一个定时器实现。
用两个定时器的方法是用定时器T0来控制频率,定时器T1来控制占空比。大致的的编程思路是这样的:T0定时器中断让一个I0口输出高电平,在这个定时器T0的中断当中起动定时器T1,而这个T1是让IO口输出低电平,这样改变定时器T0的初值就可以改变频率,改变定时器T1的初值就可以改变占空比。
下面重点介绍用一个定时器的实现PWM的方法。因为市面上的智能小车所采用的电机大多数为TT减速电机,通过复杂的实验此电机最佳的工作频率为1000HZ(太高容易发生哨叫,太低电机容易发生抖动)所以下面以周期为1ms(1000HZ)进行举例,要产生其它频率的PWM波,程序中只需作简单修改即可。
用一个定时器时(如定时器T0)首先你要确定PWM的周期T和占空比D,确定了这些以后,你可以用定时器产生一个时间基准t,比如定时器溢出
次的时间是PWM的高电平的时间,则DT
t,类似的可以求出PWM低电平时间需要多少个时间基准
。
因为这里我们是产生周期为1ms1000HZ的PWM所以可设置中断的时间基准为001ms,然后中断100次即为1ms。在中断子程序内,可设置一个变量如time在中断子程序内,有三条重要的语句1、当time100时,time清零此语句保证频率为1000HZ,2、当time
时
应该在0-100之间变化开,让单片相应的IO口输出高电平,当time
时,让单片相应的IO口输出低电平,此时占空比就为
。
2、程序1,使单片机的IO口输出固定频率的PWM波下面按上面的思路给出一个具体程序:
f程序名:单片机输出固定频率的PWM波晶振:1100592MHzCPU型号:STC89C52功能:P20口输出周期为1ms1000HZ占空比为80的PWM波i
cludereg52hdefi
eui
tu
sig
edi
tdefi
eucharu
sig
edchar
sbitPWM1P20接IN1控制正转sbitPWM2P21接IN2控制反转uchartime
voidmai
TMOD0x01定时器0工作方式1TH00xff6553610256赋初值定时TL00xf76553610256001msEA1开总中断ET01开定时器0中断TR01启动定时器0while1
voiddelayui
tz
fui
txyforr