智能车制作

标题: 两路测速,一路用的pt7,一路用的cd4520,两者的数据差别很大大,是什么原因? [打印本页]

作者: wen123    时间: 2013-4-19 08:28
标题: 两路测速,一路用的pt7,一路用的cd4520,两者的数据差别很大大,是什么原因?
两路测速,一路用的pt7,一路用的cd4520,两者的数据差别很大大,是什么原因?求解啊!!貌似自带的计数有问题(计数很大,这个数字明显不可能这么大啊)下面是我的计数程序,,请各位看看啥原因!!谢谢了!
/***************** 脉冲累加器初始化*********************/
void PACN_Init(void)    //脉冲累加器初始化
{
  PACTL_PAEN =0; //16位脉冲累加器A控制寄存器,16位脉冲累加器A(PACA)无效
  PACTL_PAMOD=0; //16位脉冲累加器A控制寄存器,事件计数模式
  PACTL_PEDGE=1; //16位脉冲累加器A控制寄存器,上升沿
   
  PACTL_PAOVI=0; //16位脉冲累加器A控制寄存器,禁止溢出中断
  PACTL_PAI = 0; //16位脉冲累加器A控制寄存器,禁止输入中断
   
  PACNT=0;       //计数初值
      
// PAFLG_PAOVF=1;//脉冲累加器A标志寄存器,对PAOVF位的人工置位,可以清除这个标志
  //PAFLG_PAIF =1;//脉冲累加器A标志寄存器,脉冲累加器输入边沿标志
  
  PACTL_PAEN =1;//16位脉冲累加器A控制寄存器,使能脉冲累加器A
}


void GetMotorPulse(void)
{                                                                             //采集电机脉冲
     int  LeftPulse, RightPulse;

LeftPulse=PORTB;                   //从PORTB口读入计数器值
PTT_PTT1=1;                          //外部计数器清零
RightPulse=PACNT;                  //右电机采用内部计数器计数
PACNT=0;                      //内部计数清零
     PTT_PTT1=0;                       //外部计数器开始计数

    if( PWMDTY67==0)
         LeftPulse=-LeftPulse;      //如果左轮PWM正向控制值为零,则为反转,脉冲值为负
    if( PWMDTY23==0)
         RightPulse=- RightPulse;      //如果右轮PWM正向控制值为零,则为反转,脉冲值为负            */

g_nLeftMotorPulse+= LeftPulse;    //  左脉冲累加
    g_nRightMotorPulse+=RightPulse;  //   右脉冲累加        
  PRI_COMP( 0,LeftPulse,g_fCarSpeed,RightPulse) ;      
}

作者: 灰原姐姐    时间: 2013-4-19 08:59
你是不是采样时间间隔不一样?
作者: wen123    时间: 2013-4-19 09:48
灰原姐姐 发表于 2013-4-19 08:59
你是不是采样时间间隔不一样?

一样啊都在一个中断每5ms中断一次啊,
作者: wen123    时间: 2013-4-19 09:54
灰原姐姐 发表于 2013-4-19 08:59
你是不是采样时间间隔不一样?

在初始化里面同时开始计数,又在下面程序中同时读取又重新同时开始计数没问题啊,,,应该不是这问题吧,PACNT的值好大,不肯能这么大肯定不会超过255但却超过了,相差好大,而且速度很慢很慢时两个计数器又是一样的速度稍微快一点PACNT就开始逛飚了,,还请灰原姐姐指点啊!1
void GetMotorPulse(void)
{                                                                             //采集电机脉冲
     int  LeftPulse, RightPulse;

LeftPulse=PORTB;                   //从PORTB口读入计数器值
PTT_PTT1=1;                          //外部计数器清零
RightPulse=PACNT;                  //右电机采用内部计数器计数
PACNT=0;                      //内部计数清零
     PTT_PTT1=0;                       //外部计数器开始计数

    if( PWMDTY67==0)
         LeftPulse=-LeftPulse;      //如果左轮PWM正向控制值为零,则为反转,脉冲值为负
    if( PWMDTY23==0)
         RightPulse=- RightPulse;      //如果右轮PWM正向控制值为零,则为反转,脉冲值为负            */

g_nLeftMotorPulse+= LeftPulse;    //  左脉冲累加
    g_nRightMotorPulse+=RightPulse;  //   右脉冲累加        
  PRI_COMP( 0,LeftPulse,g_fCarSpeed,RightPulse) ;      
}


作者: 伊利奶茶粉    时间: 2013-4-19 10:45
两个都用4520轻松解决
作者: qurrer    时间: 2013-4-19 12:21
两个的计数器不一样呗
作者: dennytang    时间: 2013-4-19 23:54
lz问题解决了吗?我用软件计数也是相同问题,想不到一个好办法解决,好像是电机转动对计数有非常大的影响,电机一转起来IO口上毛刺特别多,计数值就飞涨了!

作者: luckner    时间: 2013-4-20 09:44
qurrer 发表于 2013-4-19 12:21
两个的计数器不一样呗

IO口挺富裕的情况下可以这样 但是这样会丢数据很严重

作者: qurrer    时间: 2013-4-20 10:33
luckner 发表于 2013-4-20 09:44
IO口挺富裕的情况下可以这样 但是这样会丢数据很严重

内外计数误差稳定的话,可以消除误差

作者: wen123    时间: 2013-4-20 11:19
qurrer 发表于 2013-4-20 10:33
内外计数误差稳定的话,可以消除误差

没规律的
作者: wen123    时间: 2013-4-20 11:24
dennytang 发表于 2013-4-19 23:54
lz问题解决了吗?我用软件计数也是相同问题,想不到一个好办法解决,好像是电机转动对计数有非常大的影响, ...

你能把电机驱动的硬件图给我看看吗?我正在找解决方法,,你出现这种原因肯定出在电机驱动,希望能交流下
作者: luckner    时间: 2013-4-20 18:39
qurrer 发表于 2013-4-20 10:33
内外计数误差稳定的话,可以消除误差

好吧  那我没得说了

作者: qurrer    时间: 2013-4-20 19:22
luckner 发表于 2013-4-20 18:39
好吧  那我没得说了

对计数器进度的要求并不是太高啊

作者: qurrer    时间: 2013-4-20 19:24
wen123 发表于 2013-4-20 11:19
没规律的

对精度要求并不是很高,一般都可以用的,要不然你就换K60

作者: dennytang    时间: 2013-4-20 20:03
wen123 发表于 2013-4-20 11:24
你能把电机驱动的硬件图给我看看吗?我正在找解决方法,,你出现这种原因肯定出在电机驱动,希望能交流下

知道了,电池输出串一个电感,就取出IO口上的毛刺了

作者: luckner    时间: 2013-4-20 20:03
qurrer 发表于 2013-4-20 19:22
对计数器进度的要求并不是太高啊

个人认为 平衡组还是精度越高越好

作者: wen123    时间: 2013-4-21 11:02
dennytang 发表于 2013-4-20 20:03
知道了,电池输出串一个电感,就取出IO口上的毛刺了

我的差不多也解决了
作者: dennytang    时间: 2013-4-21 17:29
wen123 发表于 2013-4-21 11:02
我的差不多也解决了

你们是怎么解决的?
作者: wen123    时间: 2013-4-21 22:36
dennytang 发表于 2013-4-21 17:29
你们是怎么解决的?

并联电容啊!
作者: 避风港1717    时间: 2013-4-26 14:38
用uln2003分时驱动码盘光电管行吗?求论证
作者: cyzhndc    时间: 2013-4-26 14:47
cd4520计数超过255了吧。。。
作者: ☆灬学乖    时间: 2013-5-22 19:44
wen123 发表于 2013-4-21 11:02
我的差不多也解决了

在哪里并电容啊,并多大呢?

作者: 老油条    时间: 2014-7-15 20:02
伊利奶茶粉 发表于 2013-4-19 10:45
两个都用4520轻松解决

大神,,我的用的两个4520计数值波动太大,,什么原因?
作者: 夏日之恋    时间: 2015-4-24 16:20
wen123 发表于 2013-4-21 22:36
并联电容啊!

是在编码器的接口接电容吗





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2