最近课程进度正好讲到高速计数,有些学员反馈说高速计数很难,没有讲之前很多地方看不懂,我分析了每期学员的学习情况总结了几个问题及一些见解,希望对大家学习有所帮助: 一、不知到什么场合需要用到高速计数。 高速计数与普通计数器最大的区别在于计数频率高,根本原因是因为其原理有着本质上的区别。普通计数器是通过扫描计数输入条件是否发生变化来进行计数,其计数频率受扫描周期的影响,所以频率不会太高。而高速计数器则是通过外部高速输入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所示。
表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 |
|