智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 6325|回复: 15
打印 上一主题 下一主题

编码器测速

  [复制链接]

3

主题

5

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
285
威望
243
贡献
30
兑换币
0
注册时间
2010-11-14
在线时间
6 小时
跳转到指定楼层
1#
发表于 2011-5-20 17:09:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天把编码器装上了 可是程序下载进去后传感器打到黑线上电机就不转了 全部打到白的上才转 并且不到速度返回值 但是看出来中断是合适的
我只是在之前的程序中加了一下程序 (之前的程序跑的好好的)
void initPIT(void)//定时中断初始化函数 10MS定时中断设置
{
   PITCFLMT_PITE=0; //定时中断通道0关
   PITCE_PCE0=1;//定时器通道0使能
   PITMTLD0=160-1;//8位定时器初值设定。160分频,在16MHzBusClock下,为0.1MHz。即10us.
  
   PITLD0=PITTIME-1;//16位定时器初值设定。PITTIME*0.01MS
   PITINTE_PINTE0=1;//定时器中断通道0中断使能
   PITCFLMT_PITE=1;//定时器通道0使能
}
void Init_Event_Count(void)
{
          PACTL = (1<<6);//脉冲累加器启动,外部发生一次下降沿就计数一次。外部编码器连接到IOC7.
          //在中断里读取PACNT的值就是脉冲个数。读取后清零PACNT。
}
void interrupt 66 timer0(void)      //1ms执行函数程序      
{
  
  PITTF_PTF0 = 1;                     //PIT中断标志位清零
  count++;
   
    if(count>9) //10MS一次中断,用来读取编码器脉冲值
        {
                count=0;
                pulse=PACNT; //读取脉冲值
            //                                                                          Moto_PID();
                   //进行电机的PID控制
            PACNT=0;       //脉冲累加器计数器清零
        }
}
#define PITTIME  1000   //定时100ms(除以 100为ms 定时时间)



哪位大虾能帮我分析这是什么原因 Q:89012072

3

主题

5

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
285
威望
243
贡献
30
兑换币
0
注册时间
2010-11-14
在线时间
6 小时
2#
 楼主| 发表于 2011-5-30 19:22:33 | 只看该作者
回复 支持 反对

使用道具 举报

1

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
239
威望
188
贡献
43
兑换币
0
注册时间
2010-12-20
在线时间
4 小时
3#
发表于 2011-6-11 08:53:20 | 只看该作者
关注中
也在纠结
回复 支持 反对

使用道具 举报

9

主题

45

帖子

0

精华

高级会员

Rank: 4

积分
564
威望
379
贡献
119
兑换币
0
注册时间
2011-1-10
在线时间
33 小时
4#
发表于 2011-6-11 20:15:02 | 只看该作者
编码器不给力啊,用示波器看看
回复 支持 反对

使用道具 举报

16

主题

352

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2535

优秀会员奖章活跃会员奖章

QQ
威望
888
贡献
1261
兑换币
10
注册时间
2011-8-31
在线时间
193 小时
5#
发表于 2011-10-7 22:35:48 | 只看该作者
学习了
回复 支持 反对

使用道具 举报

8

主题

162

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1038
威望
665
贡献
259
兑换币
16
注册时间
2011-7-19
在线时间
57 小时
6#
发表于 2011-10-26 20:54:00 | 只看该作者
知道了,谢谢啦
回复 支持 反对

使用道具 举报

1

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
威望
171
贡献
48
兑换币
0
注册时间
2011-11-3
在线时间
5 小时
7#
发表于 2011-12-11 19:07:56 | 只看该作者
我用的是脉冲计数,用定时器读取脉冲寄存器。。。
下面是我的程序。。。。


ACN_init(void)      //使用16位脉冲累加器A进行计数
{
  
  PACTL_PAEN =0;
  PACTL_PEDGE =1;         //上升沿计数
  PACNT=0x0000;               //脉冲累加器清0   
  PACTL_PAEN =1;         //脉冲累加器A使能
}

unsigned int speed_get(void)         //每40个脉冲对应7.8CM
{     
   unsigned int speed;
   speed = PACNT;
   PACNT = 0;
   return speed;
}

void initPIT(void)
{
  PITCFLMT_PITE=0;
  PITCE_PCE=1;
  PITMTLD0=240-1;
  PITLD0=PITTIME-1;
  PITINTE_PINTE0=1;
  PITCFLMT_PITE=1;
}

  #pragma CODE_SEG_NEAR_SEG NON_BANKED
void interrupt 66 PIT0(void) {
vTmpPIT++;
if(vTmpPIT==10) {
  x=speed_get();
put_char_change(x);
Sci0Write('    ');
vTmpPIT=0;
}
PITTF_PTF0=1;
}
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
296
威望
203
贡献
41
兑换币
2
注册时间
2012-2-20
在线时间
26 小时
毕业学校
rae
8#
发表于 2012-3-4 18:38:28 | 只看该作者
回复 支持 反对

使用道具 举报

6

主题

124

帖子

0

精华

高级会员

Rank: 4

积分
712
QQ
威望
488
贡献
146
兑换币
3
注册时间
2012-2-12
在线时间
39 小时
9#
发表于 2012-3-5 19:47:33 | 只看该作者
学习
回复 支持 反对

使用道具 举报

45

主题

897

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4570

热心会员奖章推广达人奖章优秀会员奖章活跃会员奖章

QQ
威望
2734
贡献
1368
兑换币
803
注册时间
2011-11-30
在线时间
234 小时
10#
发表于 2012-3-16 07:34:32 | 只看该作者
lz  pulse=PACNT; //读取脉冲值
这是什么意思?获得这个脉冲就知道了????
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 05:00 , Processed in 0.051092 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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