1 有人说采用编码器,但是编码器的转速最高才1500RPM,我要测量的轴的转速至少是4000多转,编码器的速度根本跟不上啊?
2 这个程序如何写啊?请详细的说明提纲就可以了。
谢谢
最佳答案
首先是检测机构,可以使用高速接近开关取信号,也就是转一圈接近开关输出一个脉冲信号
编程就是使用高速计数器和定时中断,定时中断设定时间100ms,在中断程序里累计10次,取得高数计数器的实际值,就是每秒的转速了,然后清定时的累计值,复位高速计数器的初始值,进行下一秒的计数。
刚好昨天做了个测试程序,脉冲信号输入到I0.0
ORGANIZATION_BLOCK 主程序:OB1
TITLE=程序注释
BEGIN
Network 1
LD SM0.1
CALL SBR1
Network 2
LD SM0.1
CALL SBR0
END_ORGANIZATION_BLOCK
SUBROUTINE_BLOCK SBR_0:SBR0
TITLE=子程序注释
BEGIN
Network 1
LD SM0.0
MOVW 0, VW100
Network 2
LD SM0.0
MOVB 100, SMB34
ATCH INT0, 10
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK HSC_INIT:SBR1
TITLE=
BEGIN
Network 1
LD SM0.0
MOVB 16#F8, SMB37
MOVD +0, SMD38
MOVD +0, SMD42
HDEF 0, 0
ENI
HSC 0
END_SUBROUTINE_BLOCK
INTERRUPT_BLOCK INT_0:INT0
TITLE=中断程序注释
BEGIN
Network 1
LD SM0.0
+I 1, VW100
Network 2
LDW>= VW100, VW102
MOVD HC0, VD104
MOVD 0, SMD38
HSC 0
MOVW 0, VW100
Network 3
END_INTERRUPT_BLOCK
SUBROUTINE_BLOCK SBR_0:SBR0
TITLE=子程序注释
BEGIN
Network 1
LD SM0.0
MOVW 0, VW100
Network 2 // 网络标题
// 网络注释
LD SM0.0
MOVB 100, SMB34
ATCH INT0, 10
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK HSC_INIT:SBR1
TITLE=
BEGIN
Network 1 // HSC 指令向导
// 要在程序中使用此配置,请在主程序块中使用 SM0.1 或一条沿触发指令调用一次此子程序。
// 配置 HC0 为模式 0;CV = 0; PV = 0;增计数;
// 开放中断和启动计数器。
//
LD SM0.0
MOVB 16#F8, SMB37 //设置控制位:增计数;已使能;
MOVD +0, SMD38 //装载 CV
MOVD +0, SMD42 //装载 PV
HDEF 0, 0
ENI
HSC 0
END_SUBROUTINE_BLOCK
INTERRUPT_BLOCK INT_0:INT0
TITLE=中断程序注释
BEGIN
Network 1 // 网络标题
LD SM0.0
+I 1, VW100 //定时累计
Network 2
LDW>= VW100, VW102 //VW102=10, 10*100ms=1S
MOVD HC0, VD104 //VD104为累计时间的脉冲数
MOVD 0, SMD38
HSC 0
MOVW 0, VW100
Network 3
END_INTERRUPT_BLOCK
提问者对于答案的评价:
多谢大哥,等几天我找个马达再验证一下。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc306169.html