樹莓派控制調速以及關於PWM的思考

kumfo 發表於 2022-05-20
樹莓派

前情概要

最近在尋思用樹莓派控制電機速度,電機預估電壓是24V,電流是10A,以這樣的配置需要個無極調速控制器控制電機轉速,看了下相關的控制器價格也不貴,十多塊錢就能整一塊。然後,相關的無極調速有提供PWM控制的。

然後說到調速控制這一塊,一般來說,低功率電路,比如5V/1A,3V/1A這樣的電路,通常直接接個電位器進行控制就行了,而對於大功率電路,比如100W,200W這樣的,通常來說就需要個通過低電壓控制高電壓電路了。一般來說,直接通過一個大功率三極體就能通過低電壓的無極電壓電流調節從而控制高電壓電流的電路。但是實際上的放大電路還是比較複雜的,我非科班出身,關於這塊目前也沒有做過深入研究其根本原因和原理,暫且不談。另外就是數位電路來控制大功率電器,那麼也需要低電壓通過放大電路來進行控制。

以此為前提,那麼就問題來了,數位電路怎麼能做到控制電壓電流大小。首先看物理電位器的調節原理就是控制電路中的電阻來控制整個電路中的電流和電壓大小,這個好理解。而在數位電路中,則是通過PWM(Pulse width modulation),中文意思是脈衝寬度調製

PWM

從字面理解PWM,一開始看到其實是不太好理解的,我一開始也是弄得雲裡霧裡的,這裡用我自己所理解的方式進行梳理一下。

首先:

  1. 數位電路輸出都是/電平,高電平可以假定為1,低電平假定為0,也就是低電平情況電路中沒有電流電壓流動。至於具體的這個電平,對應的是多少電壓,那麼我這以樹莓派為例,樹莓派有好幾個引腳,有的引腳輸出的是3.3V電壓,有的引腳輸出的是5V,那麼對應的相關高低電平就是:3.3:0,5:0
  2. 數位電路是有頻率的,這個以我的理解,就是一個時鐘週期(1秒)內電流分成多少次流動,也就是一個時鐘週期內電流分成多少次傳遞,如10MHZ,那麼就是一個時鐘週期內把電流分成10M次進行傳遞。

然亦有以上兩點基礎知識之後,那麼就很容易理解PWM了。理解PWM之前,還需要理解個叫做空佔比的概念。空佔比的意思是在單位時間內輸出的低電平次數佔所有電平次數(高電平輸出次數+低電平輸出次數)的比率,如10MHZ的電路,如果空佔比為0.1,那麼就有1M次是輸出低電平的,9M次是輸出高電平的。

PWM的理念就是,本來是5V/16MA的電路,那麼,我在單位時間內,本來10M次都是輸出高電平,但是假設空佔比為0.8,也就是說,相當於這10M次其中有8M=10M*0.8次是輸出低電平。然後就顯而易見的可知,單位時間內流過的電流為2M=10M-8M次,也就是實際在單位時間內傳送電流的時間只佔了0.2。也就是說,原本的5V/16MA的電路如今在單位時間內就傳送了5V/16MA*0.2=1V/3.2MA,從而達到了降壓限流的目的了。

程式控制空佔比

如果說樹莓派的話,本身是有幾個介面可以呼叫系統提供的庫來直接輸出PWM的,拋開這點不談,如果說自己來處理的話,用程式來控制,類似於如下虛擬碼:

頻率 = 10MHZ
一個電平在單位時間內的傳送時間 = 1 / 頻率
空佔比 = 0.8

while True:
    輸出高電平()
    持續等到高電平輸出時間 = 一個電平在單位時間內的傳送時間 * (1-空佔比)

    輸出低電平()
    持續等到低電平輸出時間 = 一個電平在單位時間內的傳送時間 * 空佔比

實際上PWM的演算法有很多,而在不同的電路控制中可能會有不同的限制,如最簡單的例子,如LED燈控制,如果空佔比為0.5,那麼1秒內,如果前面0.5秒輸出高電平,後面0.5秒輸出低電平。雖然來說,單位時間內平均電壓和電流為實際電壓電流的一半,但是,人眼就非常明顯的能感受到LED在閃爍,因為人眼要能感受到畫面不閃爍,畫面重新整理率最起碼要達到24HZ。所以,需要把高低電平在單位時間內最起碼還要拆分成24份,然後每一份時間內,再按照空佔比進行時間拆分,再在自己的時間內輸出高電平和低電平。也就是說,把按照空佔比輸出的高/低電平作為一個基礎操作的話,單位時間內能做越多操作,電壓和電流也就越穩定,當然,這裡我也只是在樹莓派上做了實際驗證,對於實際的相關數學驗證沒有做過。

寫在結尾

個人對整套控制想法做下記錄,後續在需要用到PWM控制的時候,直接用對應系統硬體提供的操作進行控制就行了,主要就是了解了整套基礎原因之後,事情就沒有這麼神祕了。