智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3752|回复: 2
打印 上一主题 下一主题

求教ECT模块

[复制链接]

0

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
457
威望
317
贡献
110
兑换币
88
注册时间
2008-3-30
在线时间
15 小时
跳转到指定楼层
1#
发表于 2008-5-29 13:13:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
<>ECT模块有两大功能,输入捕捉和输出比较。现在刚接触此芯片,英语水平有限,资料也看不大明白,求教能举个例子并且详细说明一下,这两个功能怎么使用吗?看过别人写的电机测速程序,</P><P>void speed_get(void){<BR>//&nbsp; TFLG1_C2F=1;<BR>&nbsp; PORTB=PACN2;<BR>&nbsp; PACN2=0; </P><P>这就不大明白了,初始化就设置了捕捉的方式,不知道程序何时去读取计数器的值,怎么能够计数呢?</P>

14

主题

929

帖子

1

精华

功勋会员

WJ

Rank: 10Rank: 10Rank: 10

积分
6304

特殊贡献奖章

威望
1456
贡献
4674
兑换币
17
注册时间
2008-4-6
在线时间
87 小时
2#
发表于 2008-5-29 16:27:24 | 只看该作者

Re:求教ECT模块

根据计数器的值看第一次的数值和第二次的数值之差,就是两次捕捉的时间.
回复 支持 反对

使用道具 举报

14

主题

929

帖子

1

精华

功勋会员

WJ

Rank: 10Rank: 10Rank: 10

积分
6304

特殊贡献奖章

威望
1456
贡献
4674
兑换币
17
注册时间
2008-4-6
在线时间
87 小时
3#
发表于 2008-6-24 20:29:27 | 只看该作者

Re:求教ECT模块

<>上面说的是利用外部捕捉计算.</P><P>我自己写了一个ECT累加器计脉冲的,粘出来,ECT的分析太长了,可以去博客上看.</P><P>///////////////////////////////////////////////////////////////////<BR>// 16位累加器测速程序(PACB累加器),PT0口输入脉冲<BR>//每次记录脉冲时间可修改宏:TIME_INTER</P><P>///////////////////////////////////////////////////////////////////<BR>#include &lt;hidef.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* common defines and macros */<BR>#include &lt;mc9s12dg128.h&gt;&nbsp;&nbsp;&nbsp;&nbsp; /* derivative information */<BR>#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"</P><P>#define TIME_INTER 1000&nbsp; //1000个ms=1s<BR>unsigned int Get_pulse;</P><P><BR>void Start_PLL(void)&nbsp;&nbsp; //busCLK=32M<BR>{<BR>&nbsp; REFDV=0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1)<BR>&nbsp; SYNR=0x03;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =2*16M*3/2=64M<BR>&nbsp; asm{<BR>&nbsp;&nbsp;&nbsp; BRCLR CRGFLG,#$08,*<BR>&nbsp;&nbsp;&nbsp; BSET CLKSEL,#$80<BR>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>}</P><P><BR>void PACBInit()<BR>{<BR>&nbsp; TCTL4 = 0X02;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //下降沿捕捉脉冲<BR>&nbsp; PBCTL = 0x40;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //级联两个8位累加器(PAC0和PAC1)<BR>&nbsp; ICPAR = 0X03;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使能累加器<BR>&nbsp; PACN10 = 0X0000;<BR>}</P><P><BR>void MDCInit(void)<BR>{<BR>&nbsp; MCCTL = MCCTL&amp;0Xfb; //模数计数器禁止运行<BR>&nbsp; MCCTL = 0Xe3;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //允许中断,模数计数方式 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //返回时重新加载所用的常数,分频常数为16 <BR>&nbsp; MCCTL = MCCTL|0X04; //模数计数器使能<BR>&nbsp; MCCNT = 2000; //(1/32M)*16*2000= 1ms <BR>&nbsp; MCCTL = MCCTL|0X08 ; //把模数常数寄存器的值加载到模数计数器FLMC;<BR>}</P><P>&nbsp;</P><P>void main(void) <BR>{<BR>&nbsp; DisableInterrupts;<BR>&nbsp; Start_PLL();<BR>&nbsp; PACBInit();<BR>&nbsp; MDCInit();<BR>&nbsp; EnableInterrupts;<BR>&nbsp; DDRB=0xff;<BR>&nbsp; PORTB=0XAA; <BR>&nbsp; for(;;)<BR>&nbsp;&nbsp; {</P><P>&nbsp;&nbsp; } <BR>}</P><P><BR>#pragma CODE_SEG __NEAR_SEG NON_BANKED<BR>void interrupt 26 MDC_ISR(void) <BR>{ <BR>&nbsp; static unsigned int number_count;<BR>&nbsp; MCFLG = 0x80; <BR>&nbsp; number_count ++;</P><P>&nbsp; if( number_count==TIME_INTER)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //1秒取一次<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; number_count=0;<BR>&nbsp;&nbsp;&nbsp; Get_pulse = PACN10; <BR>&nbsp;&nbsp;&nbsp; PACN10 = 0X0000;<BR>&nbsp;&nbsp;&nbsp; PORTB^=0Xff;<BR>&nbsp;&nbsp;&nbsp; }<BR>}</P>
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 13:29 , Processed in 0.249052 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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