很榮幸能夠參加電源網的你買套件我買單活動,此次我選擇的套件是基于STM32M0的數字電源學習板。苦于對模擬環路調試的一臉懵逼,每次牽一發而動全身的阻容匹配,決心學習數字環路。
①開箱檢查:
開箱,結果發現只有一塊電路板,啥也沒有。打開盒子,取出學習板套件。檢查套件內部是否完整,包括STM32M0主板、電源模塊(沒有送,可能賣家沒配?)、顯示屏模塊(看起來是OLED12864)。
所以我自己準備了一個24V的可調電源和一個電子負載用來做測試。將主板與電源模塊端子相連接,要注意正負極,并進行緊固。然后將數字電源輸出端和電子負載相連接,固定。將顯示屏的插頭與主板相對應插入,插好后輕輕按緊。
測試平臺如下圖所示:
設置電子負載:根據實際需求,設置電子負載的電流、電壓等參數,并開啟電子負載。設置STM32M0電源模塊,可以設置的只有電壓和電流(它們會根據負載電阻的大小工作在CC或者CV模式)
進行測試:啟動電子負載并進行測試,觀察電子負載的輸出情況,以及數字電源信號調節模塊,可以用顯示屏模塊觀察實時電壓和電流,以判斷模塊是否正常工作。在測試之前,一定要先確認連接線路是否正確并保證電壓和電流值不要超出標準范圍(0-24V),以避免對設備造成損壞。同時,在測試過程中,注意不要加太大的電流,電流大于5A會導致模塊發熱嚴重。
數字電源學習板套件的原理圖如下圖所示:
該電路原理圖包含了BUCK主電路拓撲,電壓電流檢測,輸入電壓檢測,輔助電源XL7005A,輔助電源AMS1117,下載接口,按鍵,編碼器,OLED接口,LED顯示,EG3013驅動芯片,蜂鳴器和STM32F030K6T6等部分。
BUCK主電路拓撲:該部分包含BUCK轉換器的核心電路,用于實現輸入電壓的降壓轉換,產生可控的輸出電壓以供后續電路使用。
電壓電流檢測:該部分主要用于檢測輸出電壓和電流,以便進行電路保護和數據采集等操作。
輸入電壓檢測:該部分用于檢測輸入電壓,以便進行過壓保護和數據采集等操作。
輔助電源:該部分包括XL7005A和AMS1117兩種輔助電源,用于提供穩定的供電電壓,以支持后續電路的正常工作。
下載接口:該部分用于與計算機進行連接,實現固件程序的下載和燒錄。
按鍵和編碼器:該部分主要用于人機交互,通過按鍵和編碼器進行參數設置和調整操作。
OLED顯示:該部分用于顯示輸出電壓和電流等相關信息,以方便實時監測和調整。
EG3013驅動芯片和蜂鳴器:該部分用于實現電路保護和報警功能,例如當輸出電流超過一定范圍時,可以通過EG3013驅動芯片進行輸出短路保護,同時也可以通過蜂鳴器進行報警提示。
STM32F030K6T6:該部分為控制核心,通過控制BUCK主電路拓撲和電路保護等部分,實現對輸出電壓和電流的精確控制和保護。
電路非常簡單,難就難在控制部分設計和代碼架構上。
②分享學習STM32控制電源的相關知識:
2.1定時器配置
不同于電機控制或溫度控制的PID程序,電源PID對MCU實時性要求很高,因此定時器的配置很大程度上影響了控制算法的效果。電源的環路通常都是開關頻率的十分之一左右,100kHz的開關頻率,對應的控制帶寬就是十kHz。因此,首先討論定時器配置。
上電之前先要進行初始化,初始化包括以下內容:
這里我們暫時不知道定時器3和定時器14的功能。但是可以看到作者應該把編碼器設置的電壓電流值保存在了系統Flash的固定地址中并進行開機跟新。可以看到ecall的數組結構如下圖所示,內部保持了一些編碼器的設置參數。預計這個結構體在每次編碼器發生變化時都會進行跟新并保存到內存。
從編碼器的代碼看出,并沒有保存到內存,但是有對結構體進行跟新,如下圖所示。
這里用到了兩個定時器
直接看timer.h文件,看定時器的頻率。TM14是12.5kHz,TIM3是100Hz。系統時鐘是48MHz,定時器時鐘是1M和10k.定時器配置.C程序就不多解釋了,基本就是設置時鐘,設置裝載值。關鍵看在定時器中斷中程序做了什么。定時器做了什么在STM32存放中斷的.C文件中:STM32F0xx_it.C.如下圖所示。
可以定時器14是用來執行控制算法的,說明控制帶寬是12.5kHz。另一個定時器3是這段代碼是針對定時器TIM3的中斷服務函數,主要作用是在定時器產生更新事件時,對該事件進行處理。首先,通過判斷TIM3是否產生了update事件,來確定是否需要進行處理。如果確實發生了update事件,就先清除該事件的標志位。然后,代碼檢測是否需要打開蜂鳴器,如果需要,則每次定時器中斷時對計數器buzzer_cnt進行累加,并判斷其是否已經超過BUZZER_SOUND_TIME(定義在其他地方的宏),如果超過了,則關閉蜂鳴器,并將計數器清零,以實現蜂鳴器的持續聲音時間控制。需要說明的是,該中斷服務函數并沒有對定時器計數器進行操作,而是僅僅在update事件發生時進行了處理,所以就是用來控制蜂鳴器的,有點浪費。
可以看到,是以12.5kHz的速率去更新PWM的。也就是全靠定時器14的中斷觸發來執行PWM更新。問題是ADC采集發生在定時器觸發的哪一時刻呢?
從上圖中可知ADC采集的電壓電流應該是存放在結構體POWER中。
看到采集了輸入電壓,輸出電壓和輸出電流,因此需要用到3個ADC通道。同時采用長度用了32個。
2.2 ADC中斷采集
一直以為ADC需要依賴中斷去控制采集,實際上這里作者巧妙的利用了DMA來分擔ADC的采樣工作。
這段代碼是用于配置DMA1通道1,以實現ADC采樣數據的自動采集和傳說。但是似乎只是傳輸3個通道,然后再通道間循環跟新(這里并沒有用到inV,ouV,ouI這三個32單元的大數組)。
再看看ADC采集部分,最關心的就是ADC采集的觸發沿,因為這關系到ADC采到的電壓和控制算法執行間的延遲。
觸發源的選擇由ADC_CFGR的EXTSEL[3:0]和ADC_JSQR的JEXTSEL[3:0]位來控制EXTSEL[3:0]用于規則通道的觸發源。看起來是通過定時器1來進行觸發的。我猜測定時器1既然是高級定時器肯定也是用來產生PWM的定時器。
果然不出我所料,定時器1被配置成用于PWM輸出,所以PWM輸出和ADC是關聯起來的。
到此大部分代碼的架構已經初步理解。作者還用到了操作系統來處理顯示和輸入任務。
2.3 BUCK電路小信號傳遞模型的仿真
然后繪制它的bode圖,我們來觀察這個bode圖的特點。
然后我們來觀察這個bode圖的特點。
增益在w0之前都是基本平坦的,然后0頻率點的位置對應于直流增益。在靠近w0之前輸入與輸出的相移都是0°。
W0是諧振點,諧振點意味著選頻,意味著q值越大,那么這個突起會越高。額這一點附件的相位突變也會越發的陡峭。
同時,因為是LC網絡,畢竟是低通濾波器所以對于高頻是有衰減的。高到多少會開始不放大信號而開始衰減信號呢?高到fc的位置。同時也看到fc位置的信號已經超過負的135度,接近于負180度了,這就很可能直接反向出現變換器震蕩。
利用在 matlab 下運行如下腳本:
Vin=20;l=50e-6;c=500e-6;r=1;rc=0.01;rl=0.25;
omeg0=1/(l*c)^0.5;
omegz=1/rc/c;
omegzl=rl/l;
Q=r/(l/c)^0.5;
G1=tf(Vin*[1/omegz 1],[1/omeg0^2 1/Q/omeg0 1]);
margin(G1);
可得所設計的開環 buck 幅頻相頻特性曲線如下圖所示:
fc這里畫一條豎線下來,在相位圖上的相位離-180°邊界的距離大約是12.4°,小于45°。需要補償。
另一方面增益裕度,因為相位沒有靠近負180°的,所以增益裕度無線。
補償目標:相位裕度大于等于45°,增益裕度大于7dB。
可以通過在反饋信號上增加放大的方式來抬高增益,使曲線整體上移,那么穿越頻率就可以變大。穿越頻率變化大,說明系統對這個頻率下的噪聲都有一定的控制能力。
考慮到采樣定理,穿越頻率最大可以放在十分之一開關頻率的地方。我們的例子是100kHz所以可以放在10kHz的地方,那么在10kHz的地方我們看到這里的增益是-13.4,因為我們希望設置這個點做穿越頻率,所以要把增益曲線抬上去,那就加大比例系數,因為比例系數起到放大作用。(需要比例)
2.4 PID補償器的參數設計
問題是比例系數不改變系統的相位特性,所以即使通過增加比例,這個相位圖還是不變,所以10khz的點的相位裕度是-161-(-180)=19°,小于45°。可見,直接加比例不行。(需要微分)
還有另外一個問題,比例是整體的提升,所以在fc之前的曲線還是平坦的,低頻部分的增益不夠大,控制器對低頻的控制響應就小,穩態誤差大。(需要積分)
紫色是積分器的在對數坐標下的近似特性,幅值上滿足10倍頻程衰減20db。黑色是原系統的幅頻特性,紅色是補償后的幅頻特性。
由于是對數坐標系,系統級聯相乘,在對數圖上表示為兩張圖每一頻率點上的量之和,所以我們需要找到在10kHz處,可以把這一點頂起來的補償對數圖。(需要微分)
知道了為什么需要P,需要I,需要D,我們還需要知道三者怎么搭配,或者說積分時間常數,微分時間常數,比例放大系數應該設置多大(對應的幅頻特性曲線拐點在哪里)。
上圖是PI補償后的結果,可見穿越頻率和直流增益都擴大了,但是相位裕度確很極限。
第三步:調節D來改變相位裕度。
10kHZ的創越頻率如豎的虛線所示,要把這一點從距離-180°有18.6°到距離-180°有45°的余量,需要向上再頂高25.4°。
最后一步因為只剩下C1的值可以調,所以可以用試驗的方式去多次嘗試。
問題是初值怎么確定?
把C1加到2nF,發現頂高了不少。
到這里就完成了模擬PID參數設計。
如何將模擬PID轉換為數字PID控制器?在matlab中使用離散化指令即可.
3.學習總結
通過本次電源網的套件學習活動,學習了PID控制BUCK電路的軟件框架,對補償器參數設計有了一定了解。
看了這么多大家一定累了,這就把代碼分享出來
鏈接:https://pan.baidu.com/s/1w0TjZliJfFV8MTcMq7BizQ?pwd=1234 提取碼:1234