void
tim1_isr(void) interrupt 3 using 3//pwm波生成
{
TH1=(65536-10)/256;
TL1=(65536-10)%256;
a_time1++;
if(a_time1>=PWM_max) //pwm时间计数
{
a_time1=0;
}
if(word)
{
if(a_time1<PWM)
{
IN1=1; //马达(前进1=1 2=0)
}
else
{
IN1=0;
}
}
else
{
if(a_time1<PWM)
{
IN1=0; //马达(呛笸1=0 2=1)
}
else
{
IN1=1;
}
}
}
其中a_time1<PWM这句有什么作用啊?(a_time1是pwm时间计数,PWM表示高电平时间)
用的L298驱动电机
一起学习
程序有点长,首先你要明白什么是PWM,脉宽调制。他就是输出一定占空比的脉冲来调节电机的转速。占空比越大电机转得越快。占空比是指高电平的时间占整个周期的时间比。那么在一个周期内就会有一段高电平一段低电平。你不懂的那段程序就是调制高低电平的时间。
- if(a_time1<PWM)
- {
- IN1=1; //马达(前进1=1 2=0)
- }
- else
- {
- IN1=0;
- }
复制代码在a_time1<PWM这段时间内输出高电平。在a_time1>=PWM这段时间输出低电平。因为这时间是非常短的。电机由于惯性是不会立刻停止的,还是回转的。但是没有电力的驱动了。所以总体来说由于是输出的是PWM。所以电机会比一直输出高电平会慢。这就实现了通过PWM调制电机转动速度了。下一个周期又会重复这样。占空比越大,高电平占的时间越长。电机转得越快。
还有至于为什么PWM_MAX是99而不是100.这是因为下面这条语句。
- if(a_time1>=PWM_max) //pwm时间计数
- {
- a_time1=0;
- }
复制代码这里是>=而不是>。0~99就有一百个单位了。程序太长我没有具体看。如果还有什么不懂再上来问。
你哪个学校的啊,怎么现在毕设还没弄好,我的早完成任务了。现在等着被学校赶。
我南华农业大学的,我也是一个刚学飞的菜鸟,工程师还不是,打杂的。就这点水平而已。
一周热门 更多>