关于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差别越大不是速度越快吗?这样的话应该用四个通道(口)来控制两个电机,而他只用了两个通道(口)。顺便传个附件。
应该是用另外的IO控制方向,zz()和fz()应该有写。硬件上也许用了逻辑门。 我映像中是电机驱动芯片有个IO是控制方向的,比如置0正传,置1是反转;
编码器通过AB相哪个在前判断方向; 实际上不知道硬件电路,只看软件代码只能估计。如果是单路控制那么应该是硬件上有反向PWM输出实现全桥,否则像开关量控制电机效率较低。控制方向应该有专门的IO口或电路或有编码器就够了,控制方向就知道正反、编码器也可以得到方向。 楼主你要看看 zz() 和 fz() 这两个函数,
里面应该是控制另外两个通道的。 一般平衡车驱动都是用IR2104,这个一路PWM输入就会输出2路互补带死区的PWM波,这样就可以驱动H桥了,从而驱动直流电机 不错不错收藏了
页:
[1]