高速计数的几个问题及一些见解

电子说

1.3w人已加入

描述

最近课程进度正好讲到高速计数,有些学员反馈说高速计数很难,没有讲之前很多地方看不懂,我分析了每期学员的学习情况总结了几个问题及一些见解,希望对大家学习有所帮助:

一、 不知到什么场合需要用到高速计数。

高速计数与普通计数器最大的区别在于计数频率高,根本原因是因为其原理有着本质上的区别。普通计数器是通过扫描计数输入条件是否发生变化来进行计数,其计数频率受扫描周期的影响,所以频率不会太高。而高速计数器则是通过外部高速输入I点直接采集外部高速事件到CPU中来实现计数,其计数频率不再受扫描周期限制,所以计数频率可以高达200KHZ。由此可知,高速计数主要是应用于计数频率较高的场合,应用时常与编码器配合使用,典型的应用有两个:

1) 用于速度检测。

2) 用于位置检测。

二、 不知道高速计数程序该从何写起。

高速计数程序虽然步骤较多,但是还是有迹可循,编程步骤较为固定,总结了一下编程步骤不外乎一下几步:

1) 选择合适的高速计数器以及定义符合要求的工作模式,该步采用HDEF指令

如图1-1所示。HSC为高速计数编号1-5,MODE为工作模式可选0、1、3、4、6、7、9、10。该指令定义了计数输入,方向及复位输入端子,如图1-2所示。

计数器

图1-1

计数器

图1-2

2) 写高速计数器的控制字节。该步应用MOV_B将控制字节写入对于地址中,如图1-3所示,控制字节表如图1-4所示。

计数器

图1-3

计数器

图1-4

3)设定新的预设值MOV_DW(可选)

当需要达到某个计数值时触发动作,则需要提前设置一个预设值,高速计数预设值为一个32位双整数,所以用MOV_DW指令,如图1-5所示。

计数器

图1-5

4)设定高速计数器的当前值MOV_DW(可选)

需要计数从一个特定的值开始,如从0开始,则需要将当前值更新成0,当前值也是一个双整数,所以用MOV_DW操作,如图1-6所示。

计数器

图1-6

高速计数常需要中断配合使用,需编写中断程序。高速计数器当前值等于预设值(CV=PV)时会产生中断;除0,1号模式外其他模式方向改变也会产生中断;有外部复位输入的模式下,当外部复位输入时也会产生中断。中断事件号如表1-7所示。

计数器

表1-7

注意:高速计数触发动作一定要CV=PV中断来触发,不能用比较指令。

5)允许中断ENI。

6)连接中断程序和事件号ATCH,如图1-8所示。

计数器

图1-8

7)编写中断程序。

8)执行高速计数器HSC,如图1-9所示。

计数器

图1-9

不同的高速计数器,程序编写方法类似,只是控制字节及预设值地址等不相同,如表1-10所示。

计数器

表1-10

以上就是编写高速计数程序的基本步骤,只要理解了以上八步,高速计数程序再也难不倒你们了。

附上一个小案例供大家学习:利用高速计数器HSC0计旋转编码器的数值,当计到1000个数点亮Q0.0,当计到2000时熄灭并清零当前值,如此循环不断,程序如图1-11至1-13所示。

计数器

图1-11

计数器

图1-12

计数器

图1-13

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分