智能车制作

标题: 关于输入捕获测速问题(MC9S12XS128) [打印本页]

作者: wx837078933    时间: 2012-2-4 20:37
标题: 关于输入捕获测速问题(MC9S12XS128)
本帖最后由 wx837078933 于 2012-2-4 20:43 编辑

使用的芯片是MC9S12XS128。前天开始学习这款芯片。。不是很熟悉。。请教各位大神。。想明确下输入捕获的工作原理,我知道输入捕获的基本原理,就是特定输入触发中断,读取计数器的值。在下次进入中断,通过两次中断之间计数器的计数值,和时钟频率即可算出输入频率。

但我想知道,这个计数器是在什么时候开始工作的,而且在读完一次后他清0吗?
求指教!!
进入中断后怎样处理啊。我今天试了下
#pragma CODE_SEG __NEAR_SEG NON_BANKED //指示该程序在不分页区
interrupt 8 void IC0(void) //通道 0  
{
  t=TC0;//读取当前计数值,可用于脉冲间隔时间计算
   t=t1-t;
   TFLG1_C0F=1;//清相应通道中断标志位
   
}  
但感觉不太多。正确应该怎么做。。求指教。。
另外。。两个电机的测速。。是不是不能用累加器来测速啊?
作者: dich    时间: 2012-2-4 20:45
我晕。。。第一次看到论坛里还有其他的路飞。。。
作者: zjh3123629    时间: 2012-2-4 22:40
它是这么工作的:
你要明白它是自行运行的,不由控制的free counter,从0开始递增(ps:好像是加一计数器)加到ffff,再自己归0,再递增,不用你管撒。
假设你是上升沿捕捉的:
当你的输入信号有一个上升沿时:假设counter加到了100,它会把100存放在某个寄存器中,并且触发中断,在中断服务程序中你去读该寄存器的值为100,记在某个变量a中,
再后来又有一个上升沿:假设counter加到了200,类似,你去读取寄存器的值为200,存在变量b中。
所以你前一个上升沿和后一个上升沿之间的时间就能算出来=(200-100)*定时器时钟源频率

一般来说,输入捕获是用在测脉宽/周期使用,测速的话我推荐你用PA来计数,再配合PIT定时器,就OK了,当然只能是用在A,B车,C车有两个电极,但可以一路PA,一路硬件测速,比如4520,你可以试试。
作者: wx837078933    时间: 2012-2-4 23:17
zjh3123629 发表于 2012-2-4 22:40
它是这么工作的:
你要明白它是自行运行的,不由控制的free counter,从0开始递增(ps:好像是加一计数器) ...

谢谢你的回答!!!帮助很大!我也一般不太喜欢问人。,。遇到问题都自己找答案。觉得这样印象深刻。研究了一天了(有点恶心,论坛里关于输入捕获的帖子都看了一遍。。)。。计数器就像你说的。。不受我控制。。今天我仿真的时候也是这样。还觉得自己哪个寄存器没设置好呢。。由于英文的数据手册。。自己也不太确定。。我刚开始研究这芯片,以前研究过STM32,用过它的输入捕获,他的计时器就是可以由触发控制,读写后会清0。。因此对飞思卡尔这款感觉别扭。用起来并不是很人性化。。

真的很感谢!!!!


补充内容 (2012-2-5 00:14):
呵呵,我也觉得输入捕获测速不太好,一直进中断。。就是研究研究。。没弄懂。。心里不舒服。。
作者: wx837078933    时间: 2012-2-4 23:18
dich 发表于 2012-2-4 20:45
我晕。。。第一次看到论坛里还有其他的路飞。。。

呵呵,大爱海贼!
作者: gagoo    时间: 2012-2-5 09:50
wx837078933 发表于 2012-2-4 23:18
呵呵,大爱海贼!

你这头像我看起来头晕。。。

作者: zjh3123629    时间: 2012-2-5 10:53
gagoo 发表于 2012-2-5 09:50
你这头像我看起来头晕。。。

我也头晕,难怪回复楼猪帖子的时候来觉得怪怪的。。。

作者: wx837078933    时间: 2012-2-5 18:06
zjh3123629 发表于 2012-2-5 10:53
我也头晕,难怪回复楼猪帖子的时候来觉得怪怪的。。。

哈哈、、需要点活力。。。我换个。。
作者: wx837078933    时间: 2012-2-5 18:08
gagoo 发表于 2012-2-5 09:50
你这头像我看起来头晕。。。

这回好了吧。。哈哈
作者: zjh3123629    时间: 2012-2-5 18:19
wx837078933 发表于 2012-2-5 18:08
这回好了吧。。哈哈

这回更蛋疼了,人要倒过来看了。。。

作者: wx837078933    时间: 2012-2-5 22:24
zjh3123629 发表于 2012-2-5 18:19
这回更蛋疼了,人要倒过来看了。。。


作者: gagoo    时间: 2012-2-5 23:45
呵呵
作者: 月光疾风    时间: 2012-2-6 22:56
zjh3123629 发表于 2012-2-5 18:19
这回更蛋疼了,人要倒过来看了。。。

学习了~正在看手册的这部分~~

作者: xinhuaH    时间: 2012-2-12 09:27
你们还真行……
作者: zhuwenwujy    时间: 2012-2-12 09:57
内容受教了
……
作者: xinhuaH    时间: 2012-2-12 10:56
wx837078933 发表于 2012-2-4 23:17
谢谢你的回答!!!帮助很大!我也一般不太喜欢问人。,。遇到问题都自己找答案。觉得这样印象深刻。研究 ...

TC0究竟是怎么计数的啊,怎么我在输入捕捉中读TC0的值,它不是随着捕捉脉冲的增加而递增呢?假如第一次进输入捕捉中断时TC0是120,怎么当第二次进输入捕捉中断时TC0就变成224了?

作者: wx837078933    时间: 2012-2-23 14:14
xinhuaH 发表于 2012-2-12 10:56
TC0究竟是怎么计数的啊,怎么我在输入捕捉中读TC0的值,它不是随着捕捉脉冲的增加而递增呢?假如第一次进 ...

其实上面的问答已经把这个问题解释的很清楚了。。首先要理解输入捕获的原理。。每次触发捕获,计数器的值都会被装进捕获寄存器,但是计数器不会自动清0,而是继续增加。。下次捕获时新的计数值被存入。。两次相比较就可得相邻边沿间的计数值。。根据系统时钟即可算出时间。。同时要考虑计数器在这期间溢出的问题。。

作者: xinhuaH    时间: 2012-2-23 18:40
wx837078933 发表于 2012-2-23 14:14
其实上面的问答已经把这个问题解释的很清楚了。。首先要理解输入捕获的原理。。每次触发捕获,计数器的值 ...

也就是说:TC0是对系统时钟计数,对吗?

作者: 木飞右    时间: 2012-3-9 19:16
有其他测速方法吗

作者: 断翅at雄鹰    时间: 2012-3-20 19:21
4520怎么用???:Q
作者: szcszc55    时间: 2012-3-31 21:56
提示: 作者被禁止或删除 内容自动屏蔽
作者: zjh3123629    时间: 2012-4-1 09:12
szcszc55 发表于 2012-3-31 21:56
想问一下,假如free counter测到一个上升沿后,free counter已经计算到ffff了,但上升沿还没来,就是我想 ...

计到0xfffff时,它自己又会归0,这个是没问题的,还使能检测到上升沿的。

不过貌似很低的频率,它是检测不到的,只是貌似而已,我没试过。

你可以用IO中断检测它,接在PTH或者PTJ上,试试看。。。

作者: 玩ㄝ★卟恭    时间: 2012-4-3 15:43
zjh3123629 发表于 2012-4-1 09:12
计到0xfffff时,它自己又会归0,这个是没问题的,还使能检测到上升沿的。

不过貌似很低的频率,它是检 ...

麻烦问一下 为什么输入捕捉做测速不好呢?  一路测速用PA   另一路用中断怎么样呢?
作者: 一毛钱~~~~~~    时间: 2012-4-7 15:03
我来打酱油的。。。看这一颗帖子,必看其他的帖子十遍还好

...........
作者: oooooo    时间: 2012-4-23 21:53
谢谢电锯先生了
作者: 飞扬or落寞    时间: 2013-3-10 17:08
我还是没看明白
作者: 小超仔dhr    时间: 2016-11-10 18:31
zjh3123629 发表于 2012-2-4 22:40
它是这么工作的:
你要明白它是自行运行的,不由控制的free counter,从0开始递增(ps:好像是加一计数器 ...

如果自由定时器溢出的话,是不是程序就不对啦,是不是应该加上一个IF判断,但是加上IF会给警告,为啥基本上s12例程都没考虑自由定时器溢出的情况?希望能给解答一下,刚开始学习S12





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