PWM脉冲的产生与使用

电子说

1.3w人已加入

描述

PWM脉冲是一种占空比和周期都可调的脉冲。

PWM脉冲的周期范围为10~65535μs或2~65535ms,在设置脉冲周期时,如果周期小于两个时间单位,系统会默认周期值为两个时间单位;PWM脉宽时间为0~65535μs或0~65535ms,若设定的脉宽等于周期(即占空比为100%),输出一直接通,设定脉宽等于0(即占空比为0%),输出断开。

1.波形改变方式

PWM脉冲的波形改变方式有两种:同步更新和异步更新。同步更新。如果不需改变时间基准,则可以使用同步更新方式。利用同步更新,信号波形特性的变化发生在周期边沿,使波形能平滑转换。异步更新。如果需要改变PWM发生器的时间基准,就要使用异步更新。异步更新会使PWM功能被瞬时禁止, PWM信号波形过渡不平滑,这会引起被控设备的振动。

由于异步更新生成的PWM脉冲有较大的缺陷,一般情况下尽量使用脉宽变化、周期不变的PWM脉冲,这样可使用同步更新。

2.产生PWM脉冲的编程方法

要让高速脉冲发生器产生PWM脉冲,可按以下步骤编程。根据需要设置控制字节SMB67(Q0.0)、SMB77(Q0.1)或SMB567(Q0.3)。根据需要设置脉冲的周期值和脉宽值。周期值在SMW68、SMW78或SMB568中设置,脉宽值在SMW70、SMW80或SMW570中设置。执行高速脉冲输出PLS指令,系统则会让高速脉冲发生器按设置从Q0.0、Q0.1或Q0.3端子输出PWM脉冲。

3.产生PWM脉冲的编程实例

图1所示是一个产生PWM脉冲的程序,其实现的功能是:让PLC从Q0.0端子输出PWM脉冲,要求PWM脉冲的周期固定为5s,初始脉宽为0.5s,每周期脉宽递增0.5s,当脉宽达到4.5s后开始递减,每周期递减0.5s,直到脉宽为0。以后重复上述过程。

波形

波形

图1 产生PWM脉冲的程序

该程序由主程序、SBR_0子程序和INT_0、INT_1两个中断程序组成,SBR_0子程序为PWM初始化程序,用来设置脉冲控制字节和初始脉冲参数,INT_0中断程序用于实现脉宽递增,INT_1中断程序用于实现脉宽递减。由于程序采用中断事件0(I0.0上升沿中断)产生中断,因此要将脉冲输出端子Q0.0与I0.0端子连接,这样在Q0.0端子输出脉冲上升沿时,I0.0端子会输入脉冲上升沿,从而触发中断程序,实现脉冲递增或递减。

程序工作过程说明如下。

在主程序中,PLC上电首次扫描时SM0.1触点接通一个扫描周期,子程序调用指令执行,转入执行SBR_0子程序。在子程序中,先将M0.0线圈置1,然后设置脉冲的控制字节和初始参数,再允许所有的中断,最后执行高速脉冲输出PLS指令,让高速脉冲发生器按设定的控制字节和参数产生并从Q0.0端子输出PWM脉冲,同时从子程序返回到主程序网络2。由于网络2、3指令条件不满足,程序执行网络4,M0.0常开触点闭合(在子程序中M0.0线圈被置1),中断连接ATCH指令执行,将INT_0中断程序与中断事件0(I0.0上升沿中断)连接起来。当Q0.0端子输出脉冲上升沿时,I0.0端子输入脉冲上升沿,中断事件0马上发出中断请求,系统响应该中断而执行INT_0中断程序。

在INT_0中断程序中,ADD_I指令将脉冲宽度值增加0.5s,再执行PLS指令,让Q0.0端子输出完前一个PWM脉冲后按新设置的宽度输出下一个脉冲,接着执行中断分离DTCH指令,将中断事件0与INT_0中断程序分离,然后从中断程序返回主程序。在主程序中,又执行中断连接ATCH指令,又将INT_0中断程序与中断事件0连接起来,在Q0.0端子输出第二个PWM脉冲上升沿时,又会产生中断而再次执行INT_0中断程序,将脉冲宽度值再增加0.5s,然后执行PLS指令让Q0.0端子输出的第三个脉冲宽度增加0.5s。以后INT_0中断程序会重复执行,直到SMW70单元中的数值增加到4500。

当SMW70单元中的数值增加到4500时,主程序中的“SMW70|>=I|4500”触点闭合,将M0.0线圈复位;网络4中的M0.0常开触点断开,中断连接ATCH指令无法执行,INT_0中断程序也无法执行;网络5中的M0.0常闭触点闭合,中断连接ATCH指令执行,将INT_1中断程序与中断事件0连接起来。当Q0.0端子输出脉冲上升沿(I0.0端子输入脉冲上升沿)时,中断事件0马上发出中断请求,系统响应该中断而执行INT_1中断程序。

在INT_1中断程序中,将脉冲宽度值减0.5s,再执行PLS指令,让Q0.0端子输出PWM脉冲宽度减小0.5s,接着执行中断分离DTCH指令,分离中断,然后从中断程序返回主程序。在主程序中,又执行网络5中的中断连接ATCH指令,又将INT_1中断程序与中断事件0连接起来,在Q0.0端子输出PWM脉冲上升沿时,又会产生中断而再次执行INT_1中断程序,将脉冲宽度值再减0.5s。以后INT_1中断程序会重复执行,直到SMW70单元中的数值减小到0。

当SMW70单元中的数值减小到0时,主程序中的“SMW70|==I|0”触点闭合,子程序调用指令执行,转入执行SBR_0子程序,又进行PWM初始化操作。

以后程序重复上述工作过程,从而使Q0.0端子输出先递增0.5s、后递减0.5s、周期为5s连续的PWM脉冲。

审核编辑:汤梓红

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

全部0条评论

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

×
20
完善资料,
赚取积分