可控硅控制之嵌入式软件实现思路
前言
在嵌入式中可控硅控制在很多地方是不可替代的,本人在使用可控硅对灯带的控制中遇了到很多问题,但最终还是解决了这个控制问题,并且在这儿分享给大家,希望对各位有所帮助。
原理
在这儿先讲一下大致的原理以及问题描述,话不多说,直接上图:
- 【原始波形A】为 硬件部分 拿到的波形 (通常为 220V · 50HZ 的交流电)
- 【整形后的波形图B】为硬件部分通过滤波整流后得到的波形(根据实际需要, 有时候可能不需要整流)
- 【芯片检测的波形C】为硬件部分过零检测的检测到零点之后给 芯片 的波形图
- 【芯片输出的波形D】为 芯片输出给硬件的波形, 我们主要就是控制这个输出的波形
- 【最终输出波形E】为硬件部分最终输出的波形图 (阴影部分为有效值)
- 为了方便分析, 将他们对齐, 如下图所示:
过程分析
- 芯片检测到这个零点
- 通过软件设置 t 的长度,然后输出类似【芯片输出的波形D】(这里只需要给一个高电平就够了)
- 硬件部分拿到【芯片输出的波形D】,最终的输出的有效部分为【最终输出波形E】中的阴影部分。
那就开始吧
既然原理知道了, 就开始吧!(因为涉及公司代码不方便给出,所以这里将思路流程讲给大家,希望聪明的你能够看明白^_^)
讲解
需要的资源
- PWM波:这里我是用的是STM32的芯片,里面需要进行输出PWM的配置,芯片只要有定时器基本上都能够配置,(不要用IO口模拟PWM输出,因为很占用CPU资源)这里讲PWM波的周期设置为和输入波形周期一致,或者略小一点。
- 外部中断:需要配置一个检测零点的外部中断,触发方式我采用的是下降沿触发(主要作用是检测【芯片检测的波形c】中的小尖尖,大部分工作是在外部中断函数中实现的)
检测输出
- 首先芯片上电 → 进入主程序 → 进行各种功能的初始化操作 → 等待外部中断
- 当接收到过零点时,会进入外部中断函数在外部中断中进行PWM波的占空比进行设置(如果不需要改变输出的状态就不需要改变PWM的占空比),接下来进行PWM计数值重置(相当于PWM波从低电平开始从新输出,然后就回到主函数执行其他功能,没错!就这么简单。
这样控制的优点
- 中断函数中执行的程序不多,不会很占用CPU资源
- 留给主程序其他功能的时间很多,可以在外部完成自己的任务。当外部进行PWM波占空比的设置后,再进入中断函数会自动按照新的占空比进行输出,响应的时间不超过过零检测的周期。
- 因为是【芯片输出的波形D】和【芯片检测的波形C】周期差不多的PWM波,当【芯片检测的波形C】丢失某一个或者几个波形,不会对最终控制结果有太大影响。
小编使用过,但最终放弃的控制方法
- 采用延时操作:改变【芯片检测的波形C】中的” t “, 这样非常消耗CPU资源,如果跑Linux系统或者其他的小型操作系统还好。裸板开发这样做的话CPU根本就不能去完成其他的功能。
- 采用定时器:通过加入时间标志位,记录每次进入定时器中断的时间,在进入外部中断时将这个时间标志位清零。然后在里面用很多标志位用IO口模拟输出触发电平。这样有很多弊端,定时器必须比【芯片检测的波形C】的周期更小,定时器周期越小输出等级越多CPU消耗就越大,定时器周期越小输出等级越少CPU消耗就越小,这样接造成了一个不能够两全其美的方法,最重要的是,在具体控制过程中波形会周期性平移(这个我找了好久都没找到原因,哪个小伙伴知道原因的话希望能够给鄙人讲解一下,先谢过了),无论怎么样,这方案已经被我PASS掉了。
总结
- 本人在控制过程中尝试过很多种方法,最终选择了最上面这种方法,而且控制效果真的很不错。
- 因为客观原因真的不能贴代码 ::>_<::>
提供一下个人微信 Hleafleafleaf,欢迎加好友,共同学习!共同进步!
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!