智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 15400|回复: 53
打印 上一主题 下一主题

谈谈XS128的脉冲计数问题,讨论如何按照手册编程

  [复制链接]

15

主题

362

帖子

1

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4726
QQ
威望
1564
贡献
2808
兑换币
497
注册时间
2010-12-28
在线时间
177 小时
跳转到指定楼层
1#
发表于 2011-3-24 11:45:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
谈谈XS128的脉冲计数问题
1. 测速在常用的方法是测速,一见到过的有两大类:A—采用编码器(包括才用鼠标器内的改用),B—采用检测光电
计数。
2. A方法精度高,成本也高,自改制会便宜一点;B自制便宜,精度不高。
3. A方法按照网上介绍的多是直接接在电机的传动轴上,如果是300mpr的编码器,一圈就是300个脉冲,如果电机
每秒10圈,就是3000个脉冲,这种编码器如果采用定时器的CCP——扑捉中断的功能将会使得单片机大量时间处理这
个中断,如果系统还有其它中断会造成技术不准等问题,因此适合门控计数的方案,而XS128只提供了一路16位门
控计数模块,并且规定只能从PT7口输入;
B方法由于是计数轴的转速,有采用霍尔的,有光电的(比如我们的方案就是轴上直测,一圈4个),他的采样速度比
编码器少的多,能差出2个数量级或以上,也就是最多数十个PS,可以采用门控计数,也可以采用CCP扑捉技术方案
,我们就是采用这个方案。这样可以有多路计数单元——实际只用1路——PT0口。
4. 如何编程,参考原文文档Chapter 16 Timer Module (TIM16B8CV2)P461中的16.3.2.15 16-Bit Pulse
Accumulator Control Register (PACTL)P478。针对门控计数,初始化用得着的有3个寄存器:PACTL控制寄存器、
PACNT数据寄存器、PAFLG标志寄存器,打开(CW中include/MC9S12XS128.h)文档,可以找到这些寄存器的bid名,可
以写成:PACTL_PAEN、PACTL_PAMOD等,直接控制需要的bit;下边是我编的频率计设置扑捉初始化:
void time1Init(void){
  PACTL_PAEN=0;//0-16b计数禁止,1允许,先禁止
  PACTL_PAMOD=0;//0-计数模式,1-门时计数模式,设0
  PACTL_PEDGE=0;//0下降沿,1-上升沿,指定有IOC7-PT7口输入,此位受PACTL_PAMOD影响,此设0
  PACTL_CLK1=0;//当计数位外部脉冲,此设置无意义,都设0
  PACTL_CLK0=0;
  PACTL_PAOVI=0;//0-溢出中断禁止,1-允许,本例计数个数有time0时钟中断读取,不需要溢出中断,设0
  PACTL_PAI=0;//0禁止中断,1允许,设0
  PACNT=0;//计数器寄存器的值,可以使0000~FFFF,先清0
  //PAFLG_PAOVF=1;//计数溢出FFFF>0000
  PAFLG_PAIF=1;//脉冲数入1=IOC7-PT7,最大65536个脉冲
  PACTL_PAEN=1;//16b计数允许
}
Time初始化,参考原文文档Chapter 12 Periodic Interrupt Timer (S12PIT24B4CV1)P349中的12.3.0.1 PIT
Control and Force Load Micro Timer Register (PITCFLMT)P353
用得着的寄存器:PITCFLMT、PITCE、PITMUX、PITINTE,与上相同,可以写成PITCFLMT_PITE格式直接控制需要的
bit(不解释了):
void Pit01_Init(void){
   PITCFLMT_PITE=0; //禁止PIT
   PITCE_PCE0=1;    //允许时钟通道0
   PITMUX_PMUX0=0;  //通道0
   PITMTLD0=0XFF;   //通道0预设计数值为255
   PITLD0=0X61A7;   //time-out period=(PITMTLD+1)*(PITLD+1)/fBUS=256X25000/64000000=0.1s
   PITINTE_PINTE0=1;//通道0中断允许
   PITCFLMT_PITE=1; //开PIT中断
}
因为是用时钟进行中断,而后读取计数器PT7的值所以需要编PIT0的中断程序,同样打开(CW中
include/MC9S12XS128.h)文档,在开头处可以找到#define VectorNumber_Vpit0              66U,语句表明
pit0的中断号为66,编程如下:
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 66 PIT0_ISR(void){//0.1秒中断1次
  PACTL_PAEN=0;//16b计数禁止
  spd =PACNT;
  PACNT=0;
  PACTL_PAEN=1;//16b计数允许
  PITTF_PTF0=1;//清除PIT0的标记
}
#pragma CODE_SEG DEFUALT
上述语句void interrupt 66
是必须这样写的,函数名称可以随意。
程序中调用spd就是每0.1秒所计的数,如果在中断程序中再加上一个计数器,10次再读取PACNT的值,就是每秒的
计数值了。

12

主题

1121

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3668

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

QQ
威望
1871
贡献
1107
兑换币
93
注册时间
2011-3-14
在线时间
345 小时
2#
发表于 2011-3-24 21:10:50 | 只看该作者
支持分享!
回复 支持 反对

使用道具 举报

12

主题

1121

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3668

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

QQ
威望
1871
贡献
1107
兑换币
93
注册时间
2011-3-14
在线时间
345 小时
3#
发表于 2011-3-24 21:10:57 | 只看该作者
回去试试去
回复 支持 反对

使用道具 举报

12

主题

1121

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3668

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

QQ
威望
1871
贡献
1107
兑换币
93
注册时间
2011-3-14
在线时间
345 小时
4#
发表于 2011-3-24 21:11:08 | 只看该作者
回复 支持 反对

使用道具 举报

5

主题

94

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7730

论坛元老奖章

QQ
威望
369
贡献
7281
兑换币
6
注册时间
2010-3-2
在线时间
40 小时
5#
发表于 2011-3-24 23:10:41 | 只看该作者
好呀。。。。及时。。。
回复 支持 反对

使用道具 举报

5

主题

94

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7730

论坛元老奖章

QQ
威望
369
贡献
7281
兑换币
6
注册时间
2010-3-2
在线时间
40 小时
6#
发表于 2011-3-24 23:10:54 | 只看该作者
纠结测速很久了。
回复 支持 反对

使用道具 举报

10

主题

113

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1010
威望
425
贡献
415
兑换币
12
注册时间
2011-3-7
在线时间
85 小时
7#
发表于 2011-3-24 23:39:31 | 只看该作者
回复 支持 反对

使用道具 举报

16

主题

80

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3215
威望
398
贡献
2609
兑换币
2
注册时间
2010-11-6
在线时间
104 小时
8#
发表于 2011-3-24 23:50:49 | 只看该作者
灰常灰常感谢楼主分享
回复 支持 反对

使用道具 举报

7

主题

77

帖子

0

精华

高级会员

Rank: 4

积分
811
QQ
威望
338
贡献
71
兑换币
0
注册时间
2010-3-5
在线时间
201 小时
9#
发表于 2011-3-25 15:16:11 | 只看该作者
好难啊,没看懂
回复 支持 反对

使用道具 举报

7

主题

168

帖子

0

精华

高级会员

Rank: 4

积分
796
威望
415
贡献
331
兑换币
10
注册时间
2010-10-19
在线时间
25 小时
10#
发表于 2011-4-2 09:39:44 | 只看该作者
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 20:36 , Processed in 0.115412 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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