PWM脉宽调制,是靠改变脉冲宽度来控制输出电压,通过改变周期来控制其输出频率
什么是脉冲: 51 单片机IO口输出一个脉冲,是指I0口发生-次高 低电平的变化
什么是占空比:是指一个脉冲时间内,高电平的时间与整个脉冲持续时间的比值。占空比 = t / T
什么是频率:物质在1s内完成周期性变化的次数叫做频率,常用f表示。公式: f=1/T
实现输出PWM信号方法:硬件实现:选择带PWM功能的单片机如STC12系列,内部有PWM寄存器,通过程序配置这些寄存器,指定IO口就会输出PWM信号优点不占用CPU时间,缺点需掌握多个寄存器的配置。
软件实现:使用51单片机定时器与中断实现。优点编程简单易于入门学习,缺点占用CPU时间。
使用定时器中断实现PWM电机调速
参阅STC 89C52芯片使用手册定时器与中断章节内容频率是根据周期决定的,而周期则是定时器溢出时间和占空比决定的。
周期=定时器溢出时间X占空比频率公式: f=1/T
我们通过编程设置定时器溢出时间和周期来实现对PWM的频率设定,再通过软件设置驱动电机的高电平的占空比来实现调速。
课程实验-1使用PWM实现直流电机调速多级调速
1.以约100HZ的平率,占空比最大值256,使用定时器0产生PWM信号,分别调节小车左右两轮的前进速度。
占空比最大值为256 意思是一个周期分成256份
课程实验-2.使用PWM实现L ED灯亮度调节
1.以约2880HZ的平率,占空比最大值40, 使用定时器0产生PWM信号,调节开发板上P1口.上所有LED灯的亮度。按S2控制LED灯变暗,按S3控制LED灯变亮。
实验二
#include<reg52.h>
unsigned char hz=2880; //频率是一百
unsigned char T0RH,T0RL,pwm_led_va=0;
unsigned char pwm_t;
void count(unsigned char zkb)
{
unsigned long tmp;
tmp=1/hz;//算出每个周期的时间 这里其实就是1除以100赫兹,赫兹就是hz
tmp=tmp/zkb;//定时器溢出时间 公式就是周期=定时器溢出时间*占空比
tmp=tmp*1000000;//转化成微妙
tmp=tmp*1000/1085;//其实相当于微妙除以机器周期,
T0RH=(unsigned char)(tmp>>8);
T0RL=(unsigned char) (tmp);
}
void main()
{
TMOD=0X02; //设置定时器0,八位自动重装模式
TH0=T0RH; //赋初值
TH0=T0RL;
TR0=1;
ET0=1;
EA=1;
while(1)
{
count(40);
}
}
void timer0() interrupt 1//定时器0中断方式1
{
pwm_t++;
if(pwm_t==40)
{
pwm_t=0;
P1=0xff;
}
if(pwm_led_va==pwm_t)
{
P1=0;
}
}
|