有关pwm调速的问题,希望高手能帮下忙 谢谢

2019-07-15 19:31发布

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驱动电机
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
14条回答
依然落叶飘零
2019-07-16 14:19
宛若初闻yy 发表于 2014-6-7 17:05
哇  终于等到高手了。我是大四毕业生,毕设做的红外遥控小车,这点不太明白,希望您能指点下,哈 ...

程序有点长,首先你要明白什么是PWM,脉宽调制。他就是输出一定占空比的脉冲来调节电机的转速。占空比越大电机转得越快。占空比是指高电平的时间占整个周期的时间比。那么在一个周期内就会有一段高电平一段低电平。你不懂的那段程序就是调制高低电平的时间。
  1. if(a_time1<PWM)
  2.                 {
  3.                         IN1=1;          //马达(前进1=1 2=0)
  4.                 }
  5.                 else
  6.                 {
  7.                         IN1=0;
  8.                 }
复制代码
在a_time1<PWM这段时间内输出高电平。在a_time1>=PWM这段时间输出低电平。因为这时间是非常短的。电机由于惯性是不会立刻停止的,还是回转的。但是没有电力的驱动了。所以总体来说由于是输出的是PWM。所以电机会比一直输出高电平会慢。这就实现了通过PWM调制电机转动速度了。下一个周期又会重复这样。占空比越大,高电平占的时间越长。电机转得越快。
还有至于为什么PWM_MAX是99而不是100.这是因为下面这条语句。
  1. if(a_time1>=PWM_max) //pwm时间计数
  2.         {
  3.                 a_time1=0;               
  4.         }
复制代码
这里是>=而不是>。0~99就有一百个单位了。程序太长我没有具体看。如果还有什么不懂再上来问。

一周热门 更多>