可控硅控制之嵌入式软件实现思路

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_41294615/article/details/81304200

可控硅控制之嵌入式软件实现思路


前言

在嵌入式中可控硅控制在很多地方是不可替代的,本人在使用可控硅对灯带的控制中遇了到很多问题,但最终还是解决了这个控制问题,并且在这儿分享给大家,希望对各位有所帮助。


原理

在这儿先讲一下大致的原理以及问题描述,先来一张图:

通常硬件得到的是, 【原始波形a】, 硬件方面通过滤波整形等一系列操作后拿到 【整形后的波形图b】,过零检测就是要检测零点,硬件方面也可以实现。最后传给我芯片的波形图大致如 【芯片检测的波形c】所示, **难点:芯片就是检测这个零点,然后通过软件设置t的长度,然后输出类似 【芯片输出的波形d】(这里只需要给一个高电平就够了,但是要保证下次零点检测到的时候d的波形图为低电平就够了)** 这时候将 【芯片输出的波形d】输出去,硬件部分拿到波形就进行控制,最终的有效部分为 【最终输出波形e】中的阴影部分。 ———-

那就开始吧

既然原理知道了就开始吧!
(因为涉及公司代码不方便给出,所以这里将思路流程讲给大家,希望聪明的你能够看明白^_^)

讲解

需要的资源

  • PWM波:这里我是用的是STM32的芯片,里面需要进行输出PWM的配置,芯片只要有定时器基本上都能够配置,(不要用IO口模拟PWM输出,因为很占用CPU资源)这里讲PWM波的周期设置为和输入波形周期一致,或者略小一点。
  • 外部中断:需要配置一个外部中断,用于检测零点,触发方式我采用的是下降沿触发(主要作用是检测【芯片检测的波形c】中的小尖尖),大部分工作是在外部中断函数中实现的。

检测输出

首先芯片上电——进入主程序——进行各种功能的初始化操作——等待外部中断
当接收到过零点时,会进入外部中断函数在外部中断中进行PWM波的占空比进行设置(如果不需要改变输出的状态就不需要改变PWM的占空比),接下来进行PWM计数值重置(相当于PWM波从低电平开始从新输出),然后就回到主函数执行其他功能,没错!就这么简单。

这样控制的优点

  • 中断函数中执行的程序不多,不会很占用CPU资源
  • 留给主程序其他功能的时间很多,可以在外部完成自己的任务。当外部进行PWM波占空比的设置后,再进入中断函数会自动按照新的占空比进行输出,响应的时间不超过过零检测的周期。
  • 因为是【芯片输出的波形c】【芯片检测的波形c】周期差不多的PWM波,当某一个或者几个【芯片检测的波形c】的波形丢失后,不会对最终控制结果有太大影响。

小编使用过,但最终放弃的控制方法

  1. 采用延时操作:改变【芯片检测的波形c】中的” t “, 这样非常消耗CPU资源,如果跑Linux系统或者其他的小型操作系统还好。裸板开发这样做的话CPU根本就不能去完成其他的功能。
  2. 采用定时器:通过加入时间标志位,记录每次进入定时器中断的时间,在进入外部中断时将这个时间标志位清零。然后在里面用很多标志位用IO口模拟输出触发电平。这样有很多弊端,定时器必须比【芯片检测的波形c】的周期更小,定时器周期越小输出等级越多CPU消耗就越大,定时器周期越小输出等级越少CPU消耗就越小,这样接造成了一个不能够两全其美的方法,最重要的是,在具体控制过程中波形会周期性平移(这个我找了好久都没找到原因,哪个小伙伴知道原因的话希望能够给鄙人讲解一下,先谢过了),无论怎么样,这方案已经被我PASS掉了。

总结

本人在控制过程中尝试过很多种方法,最终选择了最上面这种方法,而且控制效果真的很不错。

因为客观原因真的不能贴代码 ::>_<:: 再次抱歉啦。

猜你喜欢

转载自blog.csdn.net/weixin_41294615/article/details/81304200