虽然我的小车因为电池电压太低慢的要死,不过PWM还是要学的…
PWM简单来说就是通过调整占空比(一个时间段 t 内电机运行的时间占总时间的比例)来调整小车速度。当然为了小车运行稳定 t 必须很小,也就是PWM的频率不能太低。
下面是程序
#include <REGX52.H>
#include "direction.h"
#define u8 unsigned char
#define u16 unsigned int
u16 time_cnt;
u16 freq=100;
u16 duty_cycle=20;
void Timer0Init(void)
{
TMOD &= 0xF0;
TMOD = 0x01;
TL0 = 0xAE;
TH0 = 0xFB;
TF0 = 0;
TR0 = 1;
ET0=1;
EA=1;
}
void main()
{
Timer0Init();
while(1)
{
}
}
void timer0 () interrupt 1
{
TL0 = 0xAE;
TH0 = 0xFB;
time_cnt++;
if(time_cnt>=(10000/freq))
time_cnt=0;
else if(time_cnt<=duty_cycle)
forward(0);
else
stop(0);
}
头文件direction里是控制小车行进方向的函数(详见上一篇)
当然,这个代码只是一个示例,仅用来辅助理解PWM。真正将PWM调速与其他功能结合时还会遇到许多细节上的问题,那就具体问题具体分析了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)