鲜花绽放的色泽 发表于 2016-6-24 14:14:46

关于STM32 PWM控制直流电机问题





      if (PWM_duty_left>0)                                                //电机1正转
      {         zz();
            if(PWM_duty_left>300) {PWM_duty_left=300;}
      TIM_SetCompare1(TIM3,PWM_duty_left+0);                //tm3 ch1
                              

      }
      else                                                                           //电机1反转
      {      
            if(PWM_duty_left<-300) PWM_duty_left=-300;      
                  PWM_duty_left=-PWM_duty_left;
                        fz();         
                TIM_SetCompare1(TIM3,PWM_duty_left+0);
      }
      if (PWM_duty_right>0)                                           //电机2正转
      {
            if(PWM_duty_right >300) PWM_duty_right =300;
               zz();
            TIM_SetCompare2(TIM3,PWM_duty_right-0);
   
      }
      else                                                                                 //电机2反转
      {
            if(PWM_duty_right <-300) PWM_duty_right = -300;
                PWM_duty_right=-PWM_duty_right;
                fz();
            TIM_SetCompare2(TIM3,PWM_duty_right-0);
      }      
}
   这个是平衡小车的两个电机控制程序,其中语句 TIM_SetCompare1(TIM3,PWM_duty_left+0);和TIM_SetCompare2(TIM3,PWM_duty_right-0); 就能实现电机的正反控制,这是为什么?按这个语句的说法就是用TIM3的通道1 2 这个两个口来控制的电机的,但是我就搞不明白了 控制电机不是有IN 1-4吗IN12控制一个电机 IN1和IN2的PWM差别越大不是速度越快吗?这样的话应该用四个通道(口)来控制两个电机,而他只用了两个通道(口)。顺便传个附件。





irvn 发表于 2017-8-18 09:12:56

应该是用另外的IO控制方向,zz()和fz()应该有写。硬件上也许用了逻辑门。

gujiamao 发表于 2017-8-18 09:22:54

我映像中是电机驱动芯片有个IO是控制方向的,比如置0正传,置1是反转;
编码器通过AB相哪个在前判断方向;

zhjb1 发表于 2017-8-18 10:29:39

实际上不知道硬件电路,只看软件代码只能估计。如果是单路控制那么应该是硬件上有反向PWM输出实现全桥,否则像开关量控制电机效率较低。控制方向应该有专门的IO口或电路或有编码器就够了,控制方向就知道正反、编码器也可以得到方向。

无薪税绵 发表于 2017-8-18 12:48:27

楼主你要看看 zz() 和 fz() 这两个函数,
里面应该是控制另外两个通道的。

努力的人 发表于 2017-8-20 09:00:23

一般平衡车驱动都是用IR2104,这个一路PWM输入就会输出2路互补带死区的PWM波,这样就可以驱动H桥了,从而驱动直流电机

五哥1 发表于 2017-8-21 07:56:45

不错不错收藏了
页: [1]
查看完整版本: 关于STM32 PWM控制直流电机问题