1. 程式人生 > >可控矽控制之嵌入式軟體實現思路

可控矽控制之嵌入式軟體實現思路

可控矽控制之嵌入式軟體實現思路


前言

在嵌入式中可控矽控制在很多地方是不可替代的,本人在使用可控矽對燈帶的控制中遇了到很多問題,但最終還是解決了這個控制問題,並且在這兒分享給大家,希望對各位有所幫助。


原理

在這兒先講一下大致的原理以及問題描述,先來一張圖:

通常硬體得到的是, 【原始波形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掉了。

總結

本人在控制過程中嘗試過很多種方法,最終選擇了最上面這種方法,而且控制效果真的很不錯。

因為客觀原因真的不能貼程式碼 ::>_<:: 再次抱歉啦。