s高速脉冲计数器及PTO和PWM.docx
《s高速脉冲计数器及PTO和PWM.docx》由会员分享,可在线阅读,更多相关《s高速脉冲计数器及PTO和PWM.docx(23页珍藏版)》请在冰豆网上搜索。
s高速脉冲计数器及PTO和PWM
高速脉冲计数器
高速计数器专用输入
高速计数器使用的输入
HSC0,,
HSC1,,,
HSC2,,,
HSC3
HSC4,,
HSC5
有些高速计数器和边缘中断的输入点赋值存在某些重叠。
同一个输入不能用于两种不同的功能;但是高速计数器当前模式未使用的任何输入均可用于其他目的。
例如,如果在模式2中使用HSC0,模式2使用和,则可用于边缘中断或用于HSC3。
如果所用的HSC0模式不使用输入,则该输入可用于HSC3或边缘中断。
与此相似,如果所选的HSC0模式不使用,则该输入可用于边缘中断;如果所选HSC4模式不使用,则该输入可用于HSC5。
请注意HSC0的所有模式均使用,HSC4的所有模式均使用,因此当使用这些计数器时,这些输入点绝不会用于其他用途。
HSC模式
说明(中断描述)
输入点
HSC0
HSC1
HSC2
HSC3
HSC4
HSC5
0
具有内部方向控制的单相计数器
时钟
1
时钟
复位
2
时钟
复位
启动
3
具有外部方向控制的单相计数器
时钟
方向
4
时钟
方向
复位
5
时钟
方向
复位
启动
6
具有两个时钟输入的双向计数器
增计数脉冲
减计数脉冲
7
增计数脉冲
减计数脉冲
复位
8
增计数脉冲
减计数脉冲
复位
启动
9
A/B相正交计数器
时钟脉冲A
时钟脉冲B
10
时钟脉冲A
时钟脉冲B
复位
11
时钟脉冲A
时钟脉冲B
复位
启动
12
仅HSC0和HSC3支持模式12。
HSC0计数输出的脉冲数。
HSC3计数输出的脉冲数。
四台计数器有三个控制位,用于配置复原和起始输入的激活状态并选择1x或4x计数模式(仅限正交计数器)。
这些控制位位于各自计数器的控制字节内,只在执行HDEF指令时才使用。
执行HDEF指令之前,必须将这些控制位设为所需的状态,否则计数器采用所选计数器模式的默认配置。
复原输入和起始输入的默认设置为现用水平高,正交计数速率为4x(或4乘以输入时钟频率)。
一旦执行了HDEF指令,就不能再改变计数器设置,除非首先将CPU设为STOP(停止)模式。
下表复位和启动输入的有效电平以及1x/4x控制位
HSC0
HSC1
HSC2
HSC4
HDEF控制位(仅在执行HDEF时使用)说明
"复原"的有效控制位**:
0=复原现用水平高1=复原现用水平低
-
-
起动有效电平控制位**:
0=起始现用水平高1=起始现用水平低
"正交"计数器的计数速率选项:
0=4x计数速率1=1x计数速率
**缺省设置为:
复位输入和启动输入高电平有效,正交计数率为四倍速(四倍输入时钟频率)。
定义控制字节
一旦定义了计数器和计数器模式,您就可以为计数器动态参数编程。
每台高速计数器均有一个控制字节,允许完成以下作业:
*启用或禁止计数器
*控制方向(仅限模式0、1和2)或初始化所有其他模式的计数方向
*载入当前值
通过执行HSC指令可激活控制字节以及相关当前值和预设值检查。
下表说明每个控制位。
HSC0
HSC1
HSC2
HSC3
HSC4
HSC5
中断描述
计数方向控制位:
0=减计数;1=增计数
向HSC中写入计数方向:
0=不更新;1=更新计数方向
向HSC中写入预置值:
0=不更新;1=更新预置值
向HSC中写入新的初始值:
0=不更新;1=更新初始值
启用HSC:
0=禁用HSC1=启用HSC
设置当前值和预设值
每台高速计数器都有一个32位初始值和一个32位预设值,初始值和预设值均为带符号的整数值。
欲向高速计数器载入新的初始值和预设值,您必须设置包含初始值和/或预设值的控制字节及特殊内存字节。
然后您必须执行HSC指令,将新数值传输至高速计数器。
下表说明用于包含新当前值和预设值的特殊内存字节。
除控制字节以及新预设值和当前值保持字节外,还可以使用数据类型HC(高速计数器当前值)加计数器号码(0、1、2、3、4或5)读取每台高速计数器的当前值。
因此,读取操作可直接存取当前值,但只有用上述HSC指令才能执行写入操作。
载入数值
HSC0
HSC1
HSC2
HSC3
HSC4
HSC5
新初始值
SMD38
SMD48
SMD58
SMD138
SMD148
SMD158
新预设值
SMD42
SMD52
SMD62
SMD142
SMD152
SMD162
指定中断
所指有定计中数断器模式都支持在HSC的当前值等于预设值时产生一个中断事件。
使用外部复位端的计数模式支持外部复位中断。
除去模式0、1和2之外,所有计数器模式支持计数方向改变中断。
每种中断条件都可以分别使能或者禁止。
要得到关于使用中断的更多信息,参见通讯和中断指令一节
注:
当使用外部复位中断时,不要写入初始值,或者是在该中断服务程序中禁止再允许高速计数器,否则会产生一个致命错误。
状态字节
每个高速计数器都有一个状态字节,其中的状态存储位指出了当前计数方向,当前值是否大于或者等于预置值。
下表给出了每个高速计数器状态位的定义
提示:
只有在执行中断服务程序时,状态位才有效。
监视高速计数器状态的目的是使其它事件能够产生中断以完成更重要的操作。
HSC0到HSC5的状态位
HSC0
HSC1
HSC2
HSC3
HSC4
HSC5
中断描述
不用
不用
不用
不用
不用
当前计数方向状态位0=减计数;1=增计数
当前值等于预置值状态位0=不等;1=相等
当前值大于预置值状态位:
0=小于等于;1=大于
脉冲输出指令
脉冲输出(PLS)指令被用于控制在高速输出(和)中提供的"脉冲串输出"(PTO)和"脉宽调制"(PWM)功能。
PTO提供方波(50%占空比)输出,配备周期和脉冲数用户控制功能。
PWM提供连续性变量占空比输出,配备周期和脉宽用户控制功能。
识别S7-200高速输出指令
S7-200有两台PTO/PWM发生器,建立高速脉冲串或脉宽调节信号信号波形。
一台发生器指定给数字输出点,另一台发生器指定给数字输出点。
一个指定的特殊内存(SM)位置为每台发生器存储以下数据:
一个控制字节(8位值)、一个脉冲计数值(一个不带符号的32位值)和一个周期和脉宽值(一个不带符号的16位值)。
PTO/PWM发生器和过程映像寄存器共用和。
PTO或PWM功能在或位置现用时,PTO/PWM发生器控制输出,并禁止输出点的正常使用。
输出信号波形不受过程映像寄存器状态、点强迫数值、执行立即输出指令的影响。
PTO/PWM发生器非现用时,输出控制转交给过程映像寄存器。
过程映像寄存器决定输出信号波形的初始和最终状态,使信号波形在高位或低位开始和结束。
注释
●在启用PTO或PWM操作之前,将用于和的过程映像寄存器设为0。
●所有的控制位、周期、脉宽和脉冲计数值的默认值均为0
●PTO/PWM输出必须至少有10%的额定负载,才能提供陡直的上升沿和下降沿。
每台PTO/PWM发生器有一个控制字节(8位),一个周期值和脉宽值(不带符号的16位值)和一个脉冲计值(不带符号的32位值)。
这些值全部存储在特殊内存(SM)区域的指定位置。
一旦设置这些特殊内存位的位置,选择所需的操作后,执行脉冲输出指令(PLS)即启动操作。
该指令使S7-200读取SM位置,并为PTO/PWM发生器编程。
通过修改SM区域中(包括控制字节)要求的位置,您可以更改PTO或PWM的信号波形特征,然后执行PLS指令。
您可以在任意时间向控制字节(或)的PTO/PWM启用位写入零,禁用PTO或PWM信号波形的生成,然后执行PLS指令。
脉冲串操作(PTO)
PTO按照给定的脉冲个数和周期输出一串方波(占空比50%)。
(见右图)PTO可以产生单段脉冲串或者多段串(使用脉冲包络)。
可以指定脉冲数和周期(以微秒或毫秒为增加量):
-脉冲个数:
1到4,294,967,295
-周期:
10μs到65,535μs或者
2ms到65,535ms。
如果为周期指定一个奇微秒数或毫秒数(例75ms)将会引起占空比失真
下表中是对计数和周期的限定。
PTO功能的脉冲个数及周期
脉冲个数/周期
结果
周期<2个时间单位
将周期缺省地设定为2个时间单位
脉冲个数=0
将脉冲个数缺省地设定为1个脉冲
PTO功能允许脉冲串“链接”或者“排队”。
当当前脉冲串输出完成时,会立即开始输出一个新的脉冲串。
这保证了多个输出脉冲串之间的连续性。
PTO脉管冲的单段管线
在单段线串模式,需要为下一个脉冲串更新特殊寄存器。
一旦启动了起始PTO段,就必须按照第二个波形的要求改变特殊寄存器,并再次执行PLS指令。
第二个脉冲串的属性在管线中一直保持到第一个脉冲串发送完成。
在管线中一次只能存储一段脉冲串的属性。
当第一个脉冲串发送完成时,接着输出第二个波形,此时管线可以用于下一个新的脉冲串。
重复这个过程可以再次设定下一个脉冲串的特性。
除去以下两种情况之外,脉冲串之间可以作到平滑转换:
时间基准发生了变化或者在利用PLS指令捕捉到新脉冲之前,启动的脉冲串已经完成。
如果您在管线已满时尝试载入,状态寄存器(或)中的PTO溢出位被设置。
进入RUN(运行)模式时,该位被初始化为0。
如果您希望探测随后出现的溢出,则必须在探测到溢出之后以手动方式清除该位。
PTO脉冲线串的多段管线
在多段脉管模式,CPU自动从V存储器区的包络表中读出每个脉冲串的特性。
在该模式下,仅使用特殊存储器区的控制字节和状态字节。
选择多段操作,必须装入包络表在V存储器中的起始地址偏移量(SMW168或SMW178)。
时间基准可以选择微秒或者毫秒,但是,在包络表中的所有周期值必须使用同一个时间基准,而且在包络正在运行时不能改变。
执行PLS指令来启动多段操作。
每段记录的长度为8个字节,由16位周期值、16位周期增量值和32位脉冲个数值组成。
下表中给出了包络表的格式。
您可以通过编程的方式使脉冲的周期自动增减。
在周期增量处输入一个正值将增加周期;输入一个负值将减少周期;输入0将不改变周期。
如果您指定的周期增量在一定数量的脉冲后导致非法周期则会出现数学溢出条件。
PTO功能被终止,输出转换成映象寄存器控制。
此外,状态字节(或)中的增量计算错误位被设为一。
如果您以手动方式异常中止正在运行的PTO包络,状态字节(或)中的用户异常中止位则被设为一。
当PTO包络执行时,当前启动的段的编号保存在SMB166(或SMB176)。
多段PTO操作的包络表格式
字节偏移量
包络段数
描述
0
段数1到2551
1
#1
初始周期(2到65535时间基准单位)
3
每个脉冲的周期增量(有符号值)(--32768到32767时间基准单位)
5
脉冲数(1到)
9
#2
初始周期(2到65535时间基准单位)
11
每个脉冲的周期增量(有符号值)(--32768到32767时间基准单位)
13
脉冲数(1到)
(连续)
#3
(连续)
1输入0作为脉冲串的段数会产生一个非致命错误,将不产生PTO输出
脉宽调制(PWM)
PWM产生一个占空比变化周期固定的脉冲输出,(见下图)您可以以微秒或者毫秒为单位指定其周期和脉冲宽度:
-周期:
10μs到65,535μs或者2ms到65,535ms
-脉宽:
0μs到65,535μs或者0ms到65,535ms。
如下表所示,设定脉宽等于周期(使占空比为100%),输出连续接通。
设定脉宽等于0(使占空比为0%),输出断开。
脉宽、周期和PWM功能的执行结果。
脉宽/周期
结果
脉宽≥周期值
占空比为100%:
输出连续接通
脉宽=0
占空比为0%:
输出断开。
周期<2个时间单位
将周期缺省地设定为2个时间单位。
有两个方法改变PWM波形的特性:
-同步更新:
如果不需要改变时间基准,就可以进行同步更新。
利用同步更新,波形特性的变化发生在周期边沿,提供平滑转换。
-异步更新:
PWM的典型操作是当周期时间保持常数时变化脉冲宽度。
所以,不需要改变时间基准。
但是,如果需要改变PTO/PWM发生器的时间基准,就要使用异步更新。
异步更新会造成PTO/PWM功能被瞬时禁止,和PWM波形不同步。
这会引起被控设备的振动。
由于这个原因,建议采用PWM同步更新。
选择一个适合于所有周期时间的时间基准。
提示:
控制字节中的PWM更新方式位(或)用于指定更新方式。
当PLS指令执行时变化生效。
如果改变了时间基准,会产生一个异步更新,而与PWM更新方式位的状态无关。
使用SM来配置和控制PTO/PWM操作
PLS指令会从特殊存储器SM中读取数据,使程序按照其存储值控制PTO/PWM发生器。
SMB67控制PTO0或者PWM0,SMB77控制PTO1或者PWM1。
下表对用于控制PTO/PWM操作的存储器给出了描述。
您可以使用PTO/PWM控制字节参考表作为一个快速参考,用其中的数值作为PTO/PWM控制寄存器的值来实现需要的操作。
您可以通过修改SM存储区(包括控制字节),然后执行PLS指令来改变PTO或PWM波形的特性。
您可以在任意时刻禁止PTO或者PWM波形,方法为:
首先将控制字节中的使能位(或者)清0,然后执行PLS指令。
PTO状态字节中的空闲位(或者)标志着脉冲串输出完成。
另外,在脉冲串输出完成时,您可以执行一段中断服务程序。
如果您使用多段操作,可以在整个包络表完成之后执行中断服务程序。
下列条件使(或)或(或)置位:
-如果周期增量使PTO在许多脉冲后产生非法周期值,会产生一个算术溢出错误,这会终止PTO功能并在状态字节中将增量计算错误位(或者)置1,PLC的输出变为由映象寄存器控制。
-如果要手动终止一个正在进行中的PTO包络,要把状态字节中的用户终止位(或)置1。
-当管线满时,如果试图装载管线,状态存储器中的PTO溢出位(或者)置1。
如果想用该位检测序列的溢出,必须在检测到溢出后手动清除该位。
当CPU切换至RUN模式时,该位被初始化为0。
提示:
如果要装入新的脉冲数(SMD72或SMD82)、脉冲宽度(SMW70或SMW80)或周期(SMW68或SMW78),应该在执行PLS指令前装入这些值和控制寄存器。
如果要使用多段脉冲串操作,在使用PLS指令前也需要装入包络表的起始偏移量(SMW168或SMW178)和包络表的值。
PTO/PWM控制寄存器的SM标志
状态字节
PTO包络由于增量计算错误而终止0=无错误;1=终止
PTO包络由于用户命令而终止0=无错误;1=终止
PTO管线上溢/下溢0=无溢出;1=上溢/下溢
PTO空闲0=执行中;1=PTO空闲
控制字节
PTO/PWM更新周期值0=不更新;1=更新周期值
PWM更新脉冲宽度值0=不更新;1=脉冲宽度值
PTO更新脉冲数0=不更新;1=更新脉冲数
PTO/PWM时间基准选择0=1μs/格,1=1ms/格
PWM更新方法:
0=异步更新;1=同步更新
PTO操作:
0=单段操作;1=多段操作
PTO/PWM模式选择0=选择PTO;1=选择PWM
PTO/PWM允许0=禁止;1=允许
其它PTO/PWM寄存器
SMW68
SMW78
PTO/PWM周期值(范围:
2到65535)
SMW70
SMW80
PWM脉冲宽度值(范围:
0到65535)
SMD72
SMD82
PTO脉冲计数值(范围:
1到4,294,967,295)
SMB166
SMB176
进行中的段数(仅用在多段PTO操作中)
SMW168
SMW178
包络表的起始位置,用从V0开始的字节偏移表示(仅用在多段PTO操作中)
SMB170
SMB180
线性包络状态字节
SMB171
SMB181
线性包络结果寄存器
SMD172
SMD182
手动模式频率寄存器
PTO/PWM控制字节参考
控制寄存器(16进制)
执行PLS指令的结果
允许
模式选择
PTO段操作
PWM更新方法
时基
脉冲数
脉冲宽度
周期
16#81
YES
PTO
单段
1μs/周期
装入
16#84
YES
PTO
单段
1μs/周期
装入
16#85
YES
PTO
单段
1μs/周期
装入
装入
16#89
YES
PTO
单段
1ms/周期
装入
16#8C
YES
PTO
单段
1ms/周期
装入
16#8D
YES
PTO
单段
1ms/周期
装入
装入
16#A0
YES
PTO
多段
1μs/周期
16#A8
YES
PTO
多段
1ms/周期
16#D1
YES
PWM
同步
1μs/周期
装入
16#D2
YES
PWM
同步
1μs/周期
装入
16#D3
YES
PWM
同步
1μs/周期
装入
装入
16#D9
YES
PWM
同步
1ms/周期
装入
16#DA
YES
PWM
同步
1ms/周期
装入
16#DB
YES
PWM
同步
1ms/周期
装入
装入
计算包络表的值
PTO/PWM发生器的多段管线功能在许多应用中非常有用,尤其在步进电机控制中。
例如:
您可以用带有脉冲包络的PTO来控制一台步进电机,来实现一个简单的加速、匀速和减速过程或者一个由最多255段脉冲包络组成的复杂过程,而其中每一段包络都是加速、匀速或者减速操作。
下图示例给出的包络表值要求产生一个输出波形包括三段:
步进电机加速(第一段);步进电机匀速(第二段)和步进电机减速(第三段)。
对该例,假定需要4000个脉冲达到要求的电机转动数,启动和结束频率是2kHz,最大脉冲频率是10kHz。
由于包络表中的值是用周期表示的,而不是用频率,需要把给定的频率值转换成周期值。
所以,启动和结束的脉冲周期为500μs,最高频率的对应周期为100μs。
在输出包络的加速部分,要求在200个脉冲左右达到最大脉冲频率。
也假定包络的减速部分,在400个脉冲完成。
在该例中,使用一个简单公式计算PTO/PWM发生器用来调整每个脉冲周期所使用的周期增量值:
De给定段的周期增量=|ECT--ICT|/Q
其中:
ECT=该段结束周期时间
ICT=该段初始化周期时间
Q=该段的脉冲数量
利用这个公式,加速部分(第1段)的周期增量是-2。
由于第2段是恒速控制,因此,该段的周期增量是0。
相似地,减速部分(第3段)的周期增量是1。
假定包络表存放在从VB500开始的V存储器区,下表给出了产生所要求波形的值。
该表的值可以在用户程序中用指令放在V存储器中。
一种方法是在数据块中定义包络表的值。
包络表值
V存储器地址
值
中断描述
VB500
3
总段数
VW501
500
初始周期
段1#
VW503
-2
周期增量
VD505
200
脉冲数
VW509
100
初始周期
段2#
VW511
0
周期增量
VD513
3400
脉冲数
VW517
100
初始周期
段3#
VW519
1
周期增量
VD521
400
脉冲数
段的最后一个脉冲的周期在包络中不直接指定,但必须计算出来(除非周期增量是0)。
如果在段之间需要平滑转换,知道段的最后一个脉冲的周期是有用的。
计算段的最后一个脉冲周期的公式是:
段的最后一个脉冲的周期时间=ICT+(DEL*(Q--1))
其中:
ICT=该段的初始化周期时间
DEL=该段的增量周期时间
Q=该段的脉冲数量
作为介绍,上面的简例是有用的,实际应用可能需要更复杂的波形包络。
记住:
周期增量只能以微秒数或毫秒数指定,周期的修改在每个脉冲上进行。
这两项的影响使对于一个段的周期增量的计算可能需要叠代方法。
对于结束周期值或给定段的脉冲个数,可能需要作调整。
在确定校正包络表值的过程中,包络段的持续时间很有用。
按照下面的公式可以计算完成一个包络段的时间长短:
包络段的持续时间=Q*(ICT+((DEL/2)*(Q--1)))
其中:
Q=该段的脉冲数量
ICT=该段的初始化周期时间
DEL=该段的增量周期时间
PTO/PWM初始化和操作顺序
以下是初始化和操作顺序说明,能够帮助您更好地识别PTO和PWM功能操作。
在整个顺序说明过程中一直使用脉冲输出。
初始化说明假定S7-200刚刚置入RUN(运行)模式,因此首次扫描内存位为真实。
如果不是如此或者如果必须对PTO/PWM功能重新初始化,您可以利用除首次扫描内存位之外的一个条件调用初始化例行程序。
PWM初始化
以下PWM初始化和操作顺序说明建议使用"首次扫描"位()初始化脉冲输出。
使用"首次扫描"位调用初始化子程序可降低扫描时间,因为随后的扫描无须调用该子程序。
(仅需在转换为RUN(运行)模式后的首次扫描时设置"首次扫描"位。
)但是,您的应用程序可能有其他限制,要求您初始化(或重新初始化)脉冲输出。
在此种情况下,您可以使用另一个条件调用初始化例行程序。
通常,您用一个子程序为脉冲输出初始化PWM。
您从主程序调用初始化子程序。
使用首次扫描内存位()将脉冲输出初始化为0,并调用子程序,执行初始化操作。
当您使用子程序调用时,随后的扫描不再调用该子程序,这样会降低扫描时间执行,并提供结构更严谨的程序。
从主程序建立初始化子程序调用后,用以下步骤建立控制逻辑,用于在初始化子程序中配置脉冲输出:
1.通过将以下一个值载入SMB67:
16#D3(选择微秒递增)或16#DB(选择毫秒递增)的方法配置控制字节。
两个数值均可启用PTO/PWM功能、选择PWM操作、设置更新脉宽和周期值、以及选择(微秒或毫秒)。
2.在SMW68中载入一个周期的字尺寸值。
3.在SMW70中载入脉宽的字尺寸值。
4.执行PLS指令(以便S7-200为PTO/PWM发生器编程)。
5.欲为随后的脉宽变化预载一个新控制字节数值(选项),在SMB67:
16#D2(微秒)