智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 5873|回复: 23
打印 上一主题 下一主题

两路测速,一路用的pt7,一路用的cd4520,两者的数据差别很大大,是什么原因?

  [复制链接]

34

主题

1589

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6271

论坛元老奖章优秀会员奖章活跃会员奖章在线王奖章

威望
3267
贡献
1194
兑换币
2035
注册时间
2012-11-28
在线时间
905 小时
跳转到指定楼层
1#
发表于 2013-4-19 08:28:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
两路测速,一路用的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) ;      
}

36

主题

1837

帖子

3

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6375
威望
3368
贡献
1847
兑换币
2326
注册时间
2013-2-3
在线时间
580 小时
2#
发表于 2013-4-19 08:59:19 | 只看该作者
你是不是采样时间间隔不一样?
回复 支持 反对

使用道具 举报

34

主题

1589

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6271

论坛元老奖章优秀会员奖章活跃会员奖章在线王奖章

威望
3267
贡献
1194
兑换币
2035
注册时间
2012-11-28
在线时间
905 小时
3#
 楼主| 发表于 2013-4-19 09:48:44 | 只看该作者
灰原姐姐 发表于 2013-4-19 08:59
你是不是采样时间间隔不一样?

一样啊都在一个中断每5ms中断一次啊,
回复 支持 反对

使用道具 举报

34

主题

1589

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6271

论坛元老奖章优秀会员奖章活跃会员奖章在线王奖章

威望
3267
贡献
1194
兑换币
2035
注册时间
2012-11-28
在线时间
905 小时
4#
 楼主| 发表于 2013-4-19 09:54:17 | 只看该作者
灰原姐姐 发表于 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) ;      
}

回复 支持 反对

使用道具 举报

17

主题

426

帖子

0

精华

杰出人士

持之以恒

Rank: 12Rank: 12Rank: 12

积分
12711

优秀会员奖章活跃会员奖章论坛元老奖章在线王奖章

威望
8733
贡献
2372
兑换币
991
注册时间
2012-3-6
在线时间
803 小时
5#
发表于 2013-4-19 10:45:20 | 只看该作者
两个都用4520轻松解决
回复 支持 反对

使用道具 举报

6

主题

782

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4804
威望
2424
贡献
1324
兑换币
1685
注册时间
2011-11-2
在线时间
528 小时
6#
发表于 2013-4-19 12:21:47 | 只看该作者
两个的计数器不一样呗
回复 支持 反对

使用道具 举报

3

主题

28

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2394
威望
1024
贡献
620
兑换币
668
注册时间
2013-3-30
在线时间
375 小时
毕业学校
浙江大学城市学院
7#
发表于 2013-4-19 23:54:56 | 只看该作者
lz问题解决了吗?我用软件计数也是相同问题,想不到一个好办法解决,好像是电机转动对计数有非常大的影响,电机一转起来IO口上毛刺特别多,计数值就飞涨了!
回复 支持 反对

使用道具 举报

12

主题

2039

帖子

2

精华

顶级版主

只好把岁月化成歌 留在山河

Rank: 11Rank: 11Rank: 11Rank: 11

积分
43961

优秀会员奖章活跃会员奖章在线王奖章论坛元老奖章资源大师奖章优秀版主奖章

威望
26183
贡献
9392
兑换币
6553
注册时间
2011-9-30
在线时间
4193 小时
毕业学校
南京动专
8#
发表于 2013-4-20 09:44:42 | 只看该作者
qurrer 发表于 2013-4-19 12:21
两个的计数器不一样呗

IO口挺富裕的情况下可以这样 但是这样会丢数据很严重
回复 支持 反对

使用道具 举报

6

主题

782

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4804
威望
2424
贡献
1324
兑换币
1685
注册时间
2011-11-2
在线时间
528 小时
9#
发表于 2013-4-20 10:33:36 | 只看该作者
luckner 发表于 2013-4-20 09:44
IO口挺富裕的情况下可以这样 但是这样会丢数据很严重

内外计数误差稳定的话,可以消除误差
回复 支持 反对

使用道具 举报

34

主题

1589

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6271

论坛元老奖章优秀会员奖章活跃会员奖章在线王奖章

威望
3267
贡献
1194
兑换币
2035
注册时间
2012-11-28
在线时间
905 小时
10#
 楼主| 发表于 2013-4-20 11:19:50 | 只看该作者
qurrer 发表于 2013-4-20 10:33
内外计数误差稳定的话,可以消除误差

没规律的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-10-2 16:19 , Processed in 0.091683 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表