分享

看完这个案例,你还会觉得高数计数难吗?

 反恐精英秃鹫 2019-05-11

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

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

高速计数与普通计数器最大的区别在于计数频率高,根本原因是因为其原理有着本质上的区别。普通计数器是通过扫描计数输入条件是否发生变化来进行计数,其计数频率受扫描周期的影响,所以频率不会太高。而高速计数器则是通过外部高速输入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

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

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

图1-5

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

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

图1-6

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

中断事件号

中断触发条件

12

HSC0 CV=PV(当前值 = 预设值)

27

HSC0 方向改变

28

HSC0 外部复位

13

HSC1 CV=PV(当前值 = 预设值)

16

HSC2 CV=PV(当前值 = 预设值)

17

HSC2 方向改变

18

HSC2 外部复位

32

HSC3 CV=PV(当前值 = 预设值)

29

HSC4 CV=PV

30

HSC4 方向改变

31

HSC4 外部复位

33

HSC5 CV=PV

43

HSC5 方向改变

44

HSC5 外部复位

表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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多