oner 发表于 2014-8-5 11:42:01

请问小车外部脉冲频率过高导致无法响应的解决思路

本帖最后由 oner 于 2014-8-5 12:04 编辑

用51单片机来做两轮自平衡小车,测脉冲用的是外部中断,但是丢失数据比较严重,原因之一是编码器方波频率太高了,中断无法响应及时,导致丢失数据。编码器波形还是很漂亮的。
我试过用补偿的方法来解决,但是效果也不好,可能是我方法不当。
阿莫大虾多,请问除了更换主控芯片和降低方波频率外,还有其他解决思路吗?求指点迷津,如果效果好,我愿倾尽莫比。身就不许了{:titter:} 。
提高悬赏了,外面的标题竟然还是30莫比,有bug。
现在效果只能这样,视频在下面:
http://www.tudou.com/programs/view/pPovdEOjuJQ/

tim4146 发表于 2014-8-5 12:09:45

感觉楼主的手机有点少见,HTC哪款啊?
安卓软件自己编写的?好厉害啊,我只会APPinventor做简单的
51单片机?哪个型号的?外部波形频率多大?中断程序什么的都没贴出来,楼下的不知道怎么回答你

win100 发表于 2014-8-5 12:18:10

频率有多大???贴出参数更加合适。不然我们玩猜谜呀

oner 发表于 2014-8-5 16:39:57

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--;
   }
}        

oner 发表于 2014-8-5 16:41:06

win100 发表于 2014-8-5 12:18
频率有多大???贴出参数更加合适。不然我们玩猜谜呀

我疏忽了。忘记关键的东西没说清楚了。外部脉冲,轮子转一圈大概产生11000个脉冲。单片机是STC12C5A。

lcw_swust 发表于 2014-8-5 11:42:02

还可以提高单片机的晶振频率
楼主如果只需要计脉冲数,可以用定时器(或PCA)的计数器模式。

tim4146 发表于 2014-8-6 14:45:31

oner 发表于 2014-8-5 16:39
手机是我六年前用的,是HTCZ,算是当年的街机啊。自己是用苹果的,但是也需要个能跑安卓装软件的手机, ...

和楼上一样,你可以看看PCA有关的应用能不能 用于你的小车上

我没做过自拍平衡小车,所以有些关键技术了解太少
从电机控制这个点来看,你的程序是脉冲计数(区分正反转)而不是实时转速反馈,所以可能是位置控制,用脉冲数来反馈转过的角度,
期待楼下有经验的朋友来帮忙解决问题,顺便学习了。
页: [1]
查看完整版本: 请问小车外部脉冲频率过高导致无法响应的解决思路