|
大家好,小弟我是一名在校大三学生,目前正在自己制作两轮平衡小车。在论坛上找到zlstone大神的代码之后,有几个地方不是很明白,希望大家能帮我解决一下,谢谢了。
在他的程序中有一段是关于闭环测速的电机编码器的,利用寄存器接收的脉冲数计算电机转速,为什么计算左右轮速时左右轮加减1的时候判断不一致呢?
if (0==(PINB&BIT(0)))
{
speed_real_LH-=1;
}
else
{
speed_real_LH+=1;
}
if (0==(PINB&BIT(1)))
{
speed_real_RH+=1;
}
else
{
speed_real_RH-=1;
}
还有一个问题就是他最后给定左右轮子的PWM值时:speed_output_RH = PWM - Turn_Need;speed_output_LH = - PWM - Turn_Need ,在不考虑转弯量 Turn_Need的情况下,他的左右轮PWM值是相反的(一正一负);再结合上他的PWM输出函数:void PWM_output (int PWM_LH,int PWM_RH)
{
if (PWM_LH<0)
{
PORTD|=BIT(6);
PWM_LH*=-1;
}
else
{
PORTD&=~BIT(6);
}
if (PWM_LH>252)
{
PWM_LH=252;
}
if (PWM_RH<0)
{
PORTD|=BIT(7);
PWM_RH*=-1;
}
else
{
PORTD&=~BIT(7);
}
if (PWM_RH>252)
{
PWM_RH=252;
}
OCR1AH=0;
OCR1AL=PWM_LH; //OC1A输出;
OCR1BH=0;
OCR1BL=PWM_RH; //OC1B输出;
} 这样小车的左右轮子不是一直都是在按着相反的方向转嘛?这里我不太懂,希望大家能给我解释一下,谢谢了。 |
|