请问小车外部脉冲频率过高导致无法响应的解决思路
本帖最后由 oner 于 2014-8-5 12:04 编辑用51单片机来做两轮自平衡小车,测脉冲用的是外部中断,但是丢失数据比较严重,原因之一是编码器方波频率太高了,中断无法响应及时,导致丢失数据。编码器波形还是很漂亮的。
我试过用补偿的方法来解决,但是效果也不好,可能是我方法不当。
阿莫大虾多,请问除了更换主控芯片和降低方波频率外,还有其他解决思路吗?求指点迷津,如果效果好,我愿倾尽莫比。身就不许了{:titter:} 。
提高悬赏了,外面的标题竟然还是30莫比,有bug。
现在效果只能这样,视频在下面:
http://www.tudou.com/programs/view/pPovdEOjuJQ/
感觉楼主的手机有点少见,HTC哪款啊?
安卓软件自己编写的?好厉害啊,我只会APPinventor做简单的
51单片机?哪个型号的?外部波形频率多大?中断程序什么的都没贴出来,楼下的不知道怎么回答你 频率有多大???贴出参数更加合适。不然我们玩猜谜呀 tim4146 发表于 2014-8-5 12:09
感觉楼主的手机有点少见,HTC哪款啊?
安卓软件自己编写的?好厉害啊,我只会APPinventor做简单的
51单片机 ...
手机是我六年前用的,是HTCZ,算是当年的街机啊。自己是用苹果的,但是也需要个能跑安卓装软件的手机,所以就拿出来刷了个小米系统还可以用。{:biggrin:}
进入重点话题,外部脉冲,轮子转一圈大概产生11000个脉冲。单片机是STC12C5A。
中断函数很简单,46兄帮忙看看有什么解决办法不?
void GetLeftMotorPulse(void) interrupt 0
{
if(LeftMotorDirection == 1)
{
g_iLeftMotorPulse++;
}
else
{
g_iLeftMotorPulse--;
}
}
void GetRightMotorPulse(void) interrupt 2
{
if(RightMotorDirection == 0)
{
g_iRightMotorPulse++;
}
else
{
g_iRightMotorPulse--;
}
} win100 发表于 2014-8-5 12:18
频率有多大???贴出参数更加合适。不然我们玩猜谜呀
我疏忽了。忘记关键的东西没说清楚了。外部脉冲,轮子转一圈大概产生11000个脉冲。单片机是STC12C5A。 还可以提高单片机的晶振频率
楼主如果只需要计脉冲数,可以用定时器(或PCA)的计数器模式。 oner 发表于 2014-8-5 16:39
手机是我六年前用的,是HTCZ,算是当年的街机啊。自己是用苹果的,但是也需要个能跑安卓装软件的手机, ...
和楼上一样,你可以看看PCA有关的应用能不能 用于你的小车上
我没做过自拍平衡小车,所以有些关键技术了解太少
从电机控制这个点来看,你的程序是脉冲计数(区分正反转)而不是实时转速反馈,所以可能是位置控制,用脉冲数来反馈转过的角度,
期待楼下有经验的朋友来帮忙解决问题,顺便学习了。
页:
[1]