User Tools

Site Tools

study:motor-paper:2024-10-08-01:index

【自製FOC驅動器】深入淺出講解FOC演算法與SVPWM技術]] (2024-10-08)

Local Backup

0. 前言

  • 前陣子工作太忙,好久沒做個人專案了,最近久違地想做一個機器人項目,設計中需要用到高性能超小體積的伺服馬達。
  • 馬達這一塊性能滿足專案需求的基本上只有無刷馬達可以選了–又要大功率、大扭矩,又要體積小,成本還最好不要太高,選擇低KV 值的無刷馬達顯然是最合適的。我預計的方案中計畫把減速器也省略了,採用扭力無刷馬達直驅。那麼作為機器人硬體三大核心部件(電機、減速器、驅動器)之一的驅動器,我感覺是有必要自己設計一下的,因此這裡把我學習FOC 過程中看到的一些有關無刷電機矢量控制的資料和個人理解整理分享出來。

0.1 什麼是FOC?

  • FOC(Field-Oriented Control),直譯是磁場定向控制,也稱為向量控制(VC,Vector Control),是目前無刷直流馬達(BLDC)和永磁同步馬達(PMSM)高效控制的最優方法之一。 FOC 旨在透過精確地控制磁場大小與方向,使得馬達的運動轉矩平穩、雜訊小、效率高,並且具有高速的動態響應。
  • 簡單來說就是,FOC 是一種對無刷馬達的驅動控制方法,它可以讓我們對無刷馬達進行「像素級」控制,實現許多傳統馬達控制方法所無法達到的效果~

0.2 FOC 驅動器和無刷電調的區別

  • 玩過航模的同學可能對無刷馬達很熟悉,也應該知道航模中對於無刷馬達的驅動使用的是電子調速器(ESC)也就是我們常說的電調,那麼這個FOC 驅動器和普通的電調有什麼差別呢?

  • 航模中的無刷電調
  • FOC 的優點:
    • 1, 低轉速下控制: 由於控制原理的區別,無刷電調只能控制馬達工作在高轉速下,低速時無法控制;而FOC 控制器則完全沒有這個限制,不論在什麼轉速下都可以實現精確控制。
    • 2, 馬達換向: 同上面的理由,由於電調無法反饋轉子位置,因此很難實現馬達正反轉的換向(當然有感電調可以實現);而FOC 驅動器的換向性能極其優秀,最高轉速下正反轉切換可以非常順暢;此外FOC 還可以以能量回收的形式進行煞車控制。
    • 3, 力矩控制: 普通電調都只能控制馬達轉速,而FOC 可以進行電流(力矩)、速度、位置三個閉迴路控制。
    • 4, 雜訊: FOC 驅動器的雜訊會比電調小很多,原因是普通電調採用方波驅動,而FOC 是正弦波。
  • 電調的優勢:
    • 1, 相容性: 電調驅動不同的BLDC 不需要進行參數整定,而FOC 需要。
    • 2, 演算法複雜度: 電調的演算法實作更簡單,運算量少,很適合需要提高頻寬的超高轉速馬達。
    • 3, 成本: 電調的成本比FOC 低很多。
  • 綜上大家應該可以看出來,FOC 驅動器在控制性能上是要比電調強大得多的,其優異的性能和磁場定向控制的原理是密不可分的,下面就會詳細介紹FOC 控制的實現方法。

1. 從電機原理說起

1.1 一些基礎知識

  • 1, 左手定則
    • 用於判斷導線在磁場中受力的方向:伸開左手,使拇指與其他四指垂直且在一個平面內,讓磁感線從手心流入,四指指向電流方向,大拇指指向的就是安培力方向(即導體受力方向)。
  • 2, 右手定則
    • 伸開右手,使大拇指跟其餘四個手指垂直並且都跟手掌在一個平面內,把右手放入磁場中,讓磁感線垂直穿入手心,大拇指指向導體運動方向,則其餘四指指向感生電動勢的方向。也就是切割磁感線的導體會產生反電動勢,實際上透過反電動勢定位轉子位置也是普通無感應電調工作的基礎原理之一
  • 3, 右手螺旋定則(即安培定則)
    • 用來判斷通電線圈判斷極性:用右手握螺線管,讓四指彎向螺線管中電流方向,大拇指所指的那端就是螺線管的N 極。直線電流的磁場的話,大拇指指向電流方向,另外四指彎曲指的方向為磁感線的方向。
  • 4, PWM(脈衝寬度調變)

    • 不同佔空比的PWM 波形
    • 本質是利用面積等效原理來改變波形的有效值。舉個例子,一個電燈只有開和關兩個狀態,那麼要怎麼讓它達到50% 亮度的效果的呢?只需要讓它在一半時間開,一半時間關,交替執行這兩個動作只要頻率夠高,在人眼(低通濾波器)看起來就是50% 亮度的樣子了。而其中高電平佔一個開關週期的比例,就叫做佔空比。利用PWM 可以實現使用離散的開關量來模擬連續的電壓值。

1.2 無刷馬達原理

  • 檢視下圖情況中的直流馬達基本模型,根據磁極異性相吸同性相斥的原理,中間永磁體在兩側電磁鐵的作用下會被施加一個力矩並發生旋轉,這就是馬達驅動的基本原理:
  • 對於簡化的無刷馬達來說,以三相二極內轉子馬達為例,定子的三相繞組有星形聯結方式和三角聯結方式,而三相星形聯結的二二導通方式最為常用,這裡就用該模型來做個簡單分析:
  • 如上圖所示,無刷馬達三相的連接方式是每一相引出導線的一頭,而另一頭和其他相兩兩相連。這個情況下假如我們對A、B 極分別施加正電壓和負電壓,那麼由右手螺旋定則可以判斷出線圈磁極的方向如下圖:
  • 思考一下這時候中間的轉子處於什麼角度的時候收到的力矩最大呢?
  • 沒錯就是和CO(O 為中心點)連線平行的時候,磁鐵會受到A、B 兩個磁極一推一拉的作用,直到旋轉到與AB 連線平行的且磁鐵內部磁力線方向和AB 間磁力線方向一致的時候,受合力矩為0 且穩定,也就是上圖右邊的狀態。換句話說,AB 相通電會讓轉子努力轉到上圖右邊的狀態。至於C 這時暫時不起作用。
  • 同理,我們下一階段換成AC 相通電,這時候轉子會傾向於轉到下圖右邊水平的角度:
  • 然後BC 相通電:
  • 以此類推,可以得到每個通電狀態下轉子的角度,就是下圖中的6 個狀態,每個狀態相隔60 度,6 個過程即完成了完整的轉動,共進行了6 次換相:
  • 整個過程就好像騎在驢子上吊一根胡蘿蔔一樣,旋轉的磁場牽引著永久磁鐵不斷旋轉:
  • 而這個換向的操作,就是需要驅動器去完成的。
  • 這也是無刷馬達和有刷馬達最大的區別,即不像有刷馬達的機械換向,無刷馬達是透過電子換向來驅動轉子不斷地轉動,而換向的頻率則決定了馬達的轉速。
  • 至於什麼時候怎麼知道該換到哪個供電相?如何產生更平滑的換向電壓?如何提高電源的利用效率?這些都是FOC 控制方法要探討和解決的問題。

1.3 關於BLDC 和PMSM 的差別

  • 無刷馬達其實可以分為無刷直流馬達(BLDC,我們航模上都是用這種)和永磁同步馬達(PMSM),結構大同小異,主要區別在於製造方式(線圈繞組方式)不同導致的一些特性差異(例如反電動勢的波形)。
  • 從上面分析的無刷馬達模型其實可以看到,由於轉子在磁場中只有6 個穩定的狀態,因此旋轉過程其實是不平滑的,存在扭矩的抖動(沒有通電的時候可以用手轉一下無刷電機,會感受到這種「顆粒感」)。因此為了解決這個問題,從「硬體」 和從「軟體」出發有兩個解決方案,這就衍生出了BLDC和PMSM的區別。
  • 簡單地說,BLDC 由於反電動勢接近梯形波,所以依然是採用方波驅動,肯定是會有上面說的抖動問題的,但是轉一圈抖6 下太明顯了,如果我增加電機槽、極對數(也就是磁鐵對數),那以前是360 度裡面抖6 下,現在變成120 度裡面抖6 下,甚至更小,這樣「顆粒感」 不就變得更小了嘛?實際買到的BLDC 馬達基本上都是多極對的(例如下圖),原理跟之前的分析是一樣的,出來的都是三相信號(圖中的三條線),可以自己進行類推。
  • 而另一方面,為什麼我們非得用方波這種不平滑的波來驅動馬達呢,用正弦波它不香嗎?是的,這就是PMSM 解決問題的方式,由於PMSM 的反電動勢被設計為正弦波的形狀,我們用軟體和演算法結合PWM 技術將方波轉變成等效的正弦波,再來驅動電機,結果美滋滋,控制效果很理想。當然為了產生更好的正弦波、更好的旋轉磁場,驅動器、控制演算法就變得非常複雜,這也是FOC 的實作原理,後面會進行詳細介紹。

1.4 驅動電路實現

  • 無刷馬達的驅動電路主要使用三相逆變電路來實現,如下圖:
  • 所謂逆變電路,即把直流電變換為交流電,或者簡單點說就是一個可以產生不同電流流向的電路,透過前面的馬達模型分析我們也可以看出,對於無刷馬達的驅動是需要在不同時刻施加不同方向的電壓(電流)的,因此需要逆變電路。
  • 而逆變電路具體的實現則一般是採用半橋MOS 電路來製作的。半橋電路的原型如下,其實很簡單,就是兩個MOS 管組成的上橋臂和下軸臂,中間引出一條輸出線:
  • 用3 個半橋電路就可以組合成三相逆變電路,每個半橋引出的一條輸出線跟無刷馬達的一根相線相連,就完成了最基本的無刷驅動電路。
  • 原理方面,MOS 管可以看作電壓控制的高速電子開關,在MOS 管的閘極(上圖中的High Drive 和Low Drive)施加高電平或低電平,就可以控制MOS 源極和汲極的導通或關閉。例如在下圖中,我們打開第一組半橋的上橋臂、第二組和第三組半橋的下橋臂(其餘的關閉),那麼就可以讓電流從電源正極流過馬達的a 相,流經b、c 相,然後回到電源負極:

  • 三相逆變驅動電路
  • 於是透過控制三個半橋的不同開關狀態,我們可以控制電流在馬達中的不同流向了。
  • 注意,在這個電路中,每個狀態下馬達的三相線圈都會有電流;而在上一節的範例中我們同一時刻只會讓兩相線圈有電流,另一相不起作用。
    • 那麼這麼修改的原因是啥呢?當然是:浪費可恥啊~
    • 浪費一相不用那不就白白損失了一部分扭力嘛?透過上圖中的方式驅動原理也是和之前分析一致的,但是可以產生更大的扭矩,所以當然是更好的選擇啦。
  • 接下來我們將半橋電路的狀態做一個編碼,先限定一個半橋只有兩種狀態:
    • 上橋開通下橋關斷定義為狀態1
    • 上橋關斷下橋開通定義為狀態0
  • 這樣,三組半橋就一共有8 種組合方式,編碼分別為:000、001、010、011、100、101、110、111,記住這點,後面會用上~
    • 或許有人會問,為什麼一個半橋只能上橋臂和下橋臂有導通?都關閉或都導通不行? ?
      • 害,仔細想想就知道,上下都導通顯然是不可能的,因為這就等於把電源短路了啊…
      • 那上下都斷開呢?也不需要,因為這樣就回到前面提到的,這時候馬達有一相不起作用,浪了個費。
      • 實際上半橋驅動電路的實現會比上面的分析要複雜一些,例如需要考慮開關管的開關頻率、開啟和關斷時間不對稱、死區問題等等,我後面設計的FOC 驅動使用的是專用的半橋MOS 閘極驅動IC 來實現的。

1.5 旋轉的三相馬達波形

  • 按照前面的無刷電機基本模型,假設我們拿到這樣一個電機,手動勻速轉動它的轉子,然後用示波器觀察它的三相輸出電壓(也就是反電動勢產生的電壓),會看到什麼波形呢?
  • 其實很自然可以想到,我們會得到3 根正弦曲線,而且三根曲線兩兩相位差為120°:
  • 實際上三相發電機的發電原理就是這樣的,輸出的就是三相振幅為220V 的交流電(線電壓為380V,即 V)。
  • 發電機反過來就是電動馬達啦,所以假如反過來我們在三相無刷馬達的三相線圈上輸入上述三相正弦電壓,那麼就可以驅動無刷馬達平穩高效地旋轉了。
  • 而這也是FOC 驅動無刷馬達的基本手段,即透過計算所需電壓向量,使用SVPWM技術產生調試訊號,驅動三相逆變電路,合成出等效的三相正弦電壓驅動馬達。
  • 這個會在後面進行詳細介紹。

2.FOC 控制原理

  • ok 基礎知識鋪墊完畢,終於要進入正題啦~
  • 大家剛開始接觸FOC 查閱相關資料文獻的時候,可能都會覺得有點暈:
  • 為什麼要做各種變換和反變換?
  • 空間向量到底代表了啥? ?
  • 不同扇區內為什麼非得是這樣的狀態切換順序? ? ?
  • 別擔心,某奧力曾經說過:戰勝恐懼的最好方法就是面對恐懼。
  • 下面就由我嘗試深入淺出為大家拆解一下FOC 控制,帶大家直面向量控制的核心原理~

2.1 FOC 演算法的Pipeline

  • 我們先來看看FOC 控制的整個流程圖景:
  • 稍微解釋一下,這張圖是以電流閉環控制為例的,也就是讓馬達始終產生一個恆定的力矩(也就是恆定的電流,因為力矩和電流成正比)。
  • 可以看到控制器的輸入是最左邊的 ,兩個變數經過PID控制器進行反貴調節,其中還涉及到幾個變換模組,有Park變換和Clark變換;最後透過前面提到的SVPWM模組作用到三相逆變器上進而控制馬達;而PID控制器的回授量,是對馬達輸出電流的取樣值。
  • 上面的過程不好理解沒關係,先概括一下,FOC控制的整個過程是這樣的:
    • 1, 對馬達三相電流進行取樣得到 Ia,Ib,Ic
    • 2, 將Ia,Ib,Ic 經過Clark變換得到 Iα,Iβ
    • 3, 將Iα,Iβ 經過Park變換得到 Iq,Id
    • 4, 計算 Iq,Id 和其設定值 Iq−ref 和 Id−ref的誤差
    • 5, 將上述誤差輸入兩個PID (只用到PI) 控制器,得到輸出的控制電壓 Uq,Ud
    • 6, 將Uq,Ud 進行反Park變換得到 Uα,Uβ
    • 7, 用 Uα,Uβ 合成電壓空間向量,輸入SVPWM模組進行調製,輸出該時刻三個半橋的狀態編碼值(前文有提到)
    • 8, 依昭前面輸出的編碼值控制三相逆變器的MOS管開關,驅動電機
    • 9, 循環上述步驟
  • 下面我們來分別介紹每一步的具體操作以及意義。

2.2 Clark 變換與Park 變換

  • 前面分析了,如果要平穩地驅動三相馬達轉動,我們需要產生三個相位相差120 度的正弦波,但是我們最終的控制對像是MOS 管的開通和關斷,只有電壓最大值和0 值兩個狀態啊,怎麼去產生連續變化的正弦波呢?
  • 對了,用前面提到的PWM 技術就可以做到,所謂SPWM就是這麼幹的,如下圖:
  • 大家觀察一下上圖的波形,我們用上面座標系中的正弦波和三角波的交點投影到下面的座標軸,以此確定PWM 的佔空比變化規律,這樣合成的PWM 波,經過低通濾波器之後,其實就等效為了一個正弦波!所以SPWM 就是在PWM 的基礎上用正弦波來調製合成的具有正弦波規律變化的方波。
  • 這不是很理想嗎?不對,我們在FOC 控制中並不會採取SPWM 的調變方式。
  • 最主要的原因是,透過上面三個半橋逆變器電路的分析我們可以知道,我們並不好在某一時刻獨立地控制某一時刻馬達的三個相電壓,也就很難合成三路這種SPWM 波了;另外SPWM也比後面要說的SVPWM的電壓利用率要低15%(具體怎麼算的這裡就不介紹了)。
  • 另一方面來看,我們甚至根本不想跟什麼三個正弦波打交道!
  • 因為要對於非線性的訊號進行準確控制就要使用複雜的高階控制器,這對於建模成本、處理器算力、控制即時性等都是不利的。簡單來說就是,咱們控制器的回饋輸入變數不是三個電流取樣值嘛,你要我穩穩地追蹤三個正弦波太麻煩!能不能簡單點追蹤一條直線(常數)啊?
  • 答案是可以的~ 只要應用一點數學小技巧

Clark 變換

  • 我們回到上面FOC 控製過程9 個步驟的第1 步,也就是對馬達的三個相電流進行取樣,這一步驟會使用串聯的取樣電阻(Shunt)進行電流取樣。
  • 由於馬達工作的電流一般很大,所以採樣電阻的阻值非常小,甚至和導線的電阻接近了,因而實際的採樣電路PCB 設計的時候還有一些講究,比如使用開爾文接法(Kelvin connections)。
  • 但是我們實際電路設計時不會使用三個取樣器,只需要兩個就夠了。因為由基爾霍夫電流定律(KCL),在任一時刻,流入節點的電流總和等於流出節點的電流總和,也就是說
  • 只需要知道其中兩個就可以計算出第三個了。
  • 這三個電流基本上就是三個相位相差120 度的正弦波,在把這些訊號輸入控制器回授控制之前,我們先來做點數學遊戲:
  • 我們知道三相座標系
  • 如下:
  • 問題:這明明是一個二維平面內的座標系,為啥要用3 個座標軸來表示呢?
  • 而且很明顯

    這三個基底向量是非正交的,學過線性代數的同學可能會想到,我們可以做一個很簡單的基底變換將其正交化為一個直角座標系,我們把新的直角座標系命名為
  • 座標系,變換公式如下:
  • 其實就是個很簡單的座標軸投影計算,寫成矩陣形式如下:
  • 於是我們就回到直角座標系啦,是不是很開心,變換前後的波形如下:
  • 可以看到變換後其實還是正弦波… 只不過我們少了一個需要控制的變量了,現在只需要控制\\
    這兩個變量,讓其滿足上圖的下面的波形變化規律就可以控制電機旋轉了,頻率還是不變的。
  • 注意這裡的

    是我們虛擬出來的變量,所以在計算出一組

    後,我們透過上述公式的反向變換公式變換回去再應用到馬達的三相上。
  • 就這?
    • 當然不是,如果只是為了減少一個控制變數那這個變換/ 反變換操作顯然有點多此一舉。
    • 有趣的是我們還可以接著變換:雖然在座標系

      下少了一維變量,但是新的變數還是非線性的(正弦),有沒有辦法把它們線性化呢?有的,Park变换就是做這個工作的。

Park 變換

這一步驟我們接著Clark变换將座標系旋轉度,其中是轉子目前的角度,如下圖:

變換公式如下:

也很簡單,就是作用了一個旋轉矩陣,寫成矩陣形式:

也就是說,這個 座標系 是總是跟著轉子旋轉的!

這個操作是可行的,因為我們會透過編碼器輸入轉子的即時旋轉角度,所以這個角度總是已知數。經過這一步的變換,我們會發現,一個勻速旋轉向量在這個座標系下變成了一個定值! (顯然的嘛,因為參考系相對於該向量靜止了),這個座標系下兩個控制變數都被線性化了!

Park 變換前後的波形

接下來如果我們以這兩個值作為回授控制的對象,那麼顯然就可以使用一些線性控制器來進行控制了,例如PID(是的,儘管學術界有很多酷炫的高階控制方法, 但是工業界還是偏愛PID)。

至此我們已經理解完上面FOC 控制流程9 個步驟的前3 步驟了。

2.3 PID 控制

PID(比例、積分、微分)控制是啥這篇文章就不多講解了,基礎中的基礎,也有大把文章做介紹的,不熟悉的可以自行搜尋相關資料。

在FOC 控制中主要用到三個PID 環,從內環到外環依序為:電流環、速度環、位置環。

也就是說:我們透過電流回饋來控制馬達電流(扭力) → 然後透過控制扭力來控制馬達的轉速→ 再透過控制馬達的轉速控制馬達位置。

其中最內環的電流換控制框圖如下:

PID 電流環

可以看出來,這也就是前面提到的FOC 控制9 個步驟所描述的過程。實際上只用到了PI 控制,沒有引入微分,因為電流的取樣率非常高不需要加入微分項。

上圖中的Speed & Position模組可以是編碼器,或是霍爾感測器等能感應轉子位置的感測器。

特別說明一下其中的,前兩者大家知道是通過Clark变换和Park变换得到的,而後兩者是我們預期希望前兩者達到的值,這個值具體代表了什麼物理量呢?參考一下下圖:

也就是說我們一通操作將轉子磁鏈進行了解耦,分解為了轉子旋轉的徑向和切向這兩個方向的變數:

FOC 的控制目標

透過PID 控制器使用上述輸入(電流取樣值、編碼器位置)和輸出(MOS 管開關狀態)完成對馬達電流的閉迴路控制。

然後進入到下一層的速度環:

速度- 電流雙環控制

在上圖中,是速度設定值,是馬達的轉速回饋,可以透過馬達編碼器或霍爾感測器等計算得到,依然是使用PI 控制。

將計算得到的馬達速度與速度設定值進行誤差值計算,代入速度PI 環,計算的結果作為電流環的輸入,就實現了速度- 電流的雙閉環控制。

最外一層是位置環,也就是可以控制馬達旋轉到某個精確的角度並保持,控制框圖如下:

位置- 速度- 電流三環控制

同理應該很簡單可以理解,上圖位置控制PID 只用了P 項(也可以使用PI)。

在實際使用中,由於編碼器無法直接返回馬達轉速,因此可以透過計算一定時間內的編碼值變化量來表示馬達的轉速(也即以平均速度代表瞬時速度)。當馬達轉速比較高的時候,這樣的方式是可以的;但是在位置控制模式的時候,馬達的轉速會很慢(因為是要求轉子固定在某個位置嘛),這時候用平均測速法會存在非常大的誤差(轉子不動或動地很慢,編碼器就沒有輸出或只輸出1、2 個脈衝)。

所以為了避免速度環節帶來的誤差,在做位置控制的時候可以只使用位置與電流組成的雙環來控制,不過此時需要對位置環做一定的變化,控制框圖如下:

位置- 電流雙閉環控制

由於去掉了速度環,這裡的位置環我們使用完整的PID 控制,即把微分項加上(因為位置的微分就是速度,這樣可以減小位置控制的震盪加快收斂;積分項的作用是為了消除靜態誤差)。

好了,至此整個控制迴路基本上捋清楚了,但還有一些細節我們沒講到,就是上面框圖中的SVPWM模块。

細心的同學可會發現,在整個控制流程圖裡面有Park变换和對應的反Park变换,但是卻沒有Clark变换對應的反Clark变换,取而代之的是一個SVPWM模块。

以下會對SVPWM 技術進行詳細介紹。

2.4 空間電壓向量 什麼是空間電壓向量?

空間電壓向量是我們在控制馬達過程中虛擬出來的向量,既然是向量,自然是有大小和方向的,那麼它的大小和方向是什麼呢?

還是以前面三相逆變驅動電路那幅圖中的狀態為例,輸入100的狀態:

此時等效電路如圖:

因此馬達中三個相電壓(相電壓是每相對於馬達中間連接點的電壓)可以表示為:

其實就是一個最簡單的分壓電路,其中是母線電壓,也就是​​電源電壓。

如果我們規定指向中心的方向為正,反之為負,那麼此時我們可以畫出下圖中的三個電壓向量(左邊),以及它們的合成電壓向量(右邊):

也就是說,這個狀態下我們可以認為馬達中存在一個向量表徵的電壓(電流);然後根據右手螺旋定則,可以判斷出磁場的磁力線方向,也是和向量一致的。

再結合前面章節的分析,轉子永磁體會努力旋轉到內部磁力線和外部磁場方向一致,所以這個向量其實可以表徵我們希望轉子旋轉到的方向,也即所需要生成的磁場方向了。而這個向量是會不斷在空間中旋轉的,它的振幅不變,為相電壓峰值,且以角速度勻速旋轉。

我們後面將會看到,SVPWM 演算法的目的,就是使用三相橋的開關狀態把在空間中旋轉的向量表示出來,我們把這個向量稱為空間電壓向量。

用數學公式來表示的話就是:

為了研究各相上下橋臂不同開關組合時逆變器輸出的空間電壓向量,我們定義開關函數為:

上橋臂導通下橋臂導通

的全部可能組合共有8 個,包括6 個非零向量:

和兩個零向量:

可以看出零向量狀態下馬達三相間電壓都為0 不產生轉矩(不考慮反電動勢)。

以下以其中一種開關組合為例分析,假設,也即這張圖的狀態:

如前文分析,此時的電壓向量為AO 方向,大小為,我們把這個向量畫在座標軸中如圖:

ABC 座標系和αβ座標系下的向量表示

注意上圖的(100) 向量方向和AO 方向是相反的(變成OA 方向),這跟正方向的定義有關,這樣的規定更直觀一些。 同時可以注意到兩個零向量其實和原點重合了,因為這兩個狀態下馬達中產生力矩的磁場為0(不考慮旋轉過程中的反電動勢所產生的阻力力矩)。

同理,上圖還可以看出其餘5 個空間電壓向量,它們的端點組成了一個正六邊形,同時把平面劃分成了六個扇區(也就是圖中的Ⅰ、Ⅱ、Ⅲ、Ⅳ 、Ⅴ、Ⅵ)。

那這裡問題就來了:由這6 個空間電壓向量只能產生6 個方向的力矩啊,我們要怎麼產生任意方向的力矩呢?

2.5 SVPWM 技術 既然是“向量控制”,當然是有辦法的,答案就是:使用這6 個空間電壓向量作為基底向量來合成任意向量。在每一個磁區,選擇相鄰兩個電壓向量以及零向量,依照伏秒平衡原則來合成每個磁區內的任意電壓向量,即:

∫ T 0 U r e f d t = ∫ T x 0 U x d t + ∫ T x + T y T x U y d t + ∫ T T x + T y U ∗ 0 d t 離散化後等效為下式:

U ref ⋅ T = U x ⋅ T x + U y ⋅ T y + U ∗ 0 ⋅ T ∗ 0 式子中的 U r e f 是我們期望得到的電壓向量,T是一個PWM週期。 U x 和 U y 分別是用於合成 U r e f 的兩個空間電壓向量,也就是上面說的6個基底向量中的兩個, 至於是哪兩個? 這跟 U r e f 所在的扇區有關,例如 U r e f 在I 扇區,那麼 U x 和 U y 就是 U 4 和 U 6 ; T x 和 T y 就是在一個週期T中 U x 和 U y 所佔的時間。 U ∗ 0 指的是兩個零向量,可以是 U 0 也可以是 U 7 ,零向量的選擇比較靈活,透過合理地配置零向量可以讓空間電壓向量的切換更平順,後面會說明。

所以上面公式的意義就是:我們可以週期性地在不同空間電壓向量之間切換,只要合理地配置不同基底向量在一個週期中的佔空比,就可以合成出等效的任意空間電壓向量了。

是不是跟PWM 的想法完全一樣呢,這也是為什麼這個方法被成為SVPWM(空間電壓向量脈寬調變)。

下面舉一個栗子,假設我們要合成圖中所示的 U r e f ,在Ⅰ 扇區:

顯然我們可以透過 U 4 和 U 6 來合成 U r e f ,那麼如圖將 U r e f 投影分解到 U 4 和 U 6 的方向,由正弦定理有:

∣ ∣ U r e f ∣ ∣ sin 2 π 3 = ∣ ∣ T 6 T ⋅ U 6 ∣ ∣ sin θ = ∣ ∣ T 4 T ⋅ U 4 ∣ ∣ sin ( π 3 − θ ) 又因為

U 4

=

U 6

= 2 3 U d c ,所以可以計算得到 T 4 和 T 6 :

{ T 4 = m T sin ( π 3 − θ ) T 6 = m T sin θ 其中m為SVPWM的調變係數(即調變比) : m = √ 3 ⋅ ∣ ∣ U r e f ∣ ∣ U d c

顯然在電流環控制過程中m設定得越大代表了期望力矩越大。 而零向量分配的時間為: T 0 = T 7 = 1 2 ( T − T 4 − T 6 )

為什麼 T 0 = T 7 ? 這是我們將PWM波形設定為中央對齊模式對稱配置零向量的結果,後面會提到。

現在一個週期內所有狀態的持續時間我們都得到了,還差一個順序,也就是各個狀態切換的順序。

問題:不是任意順序都可以嘛?反正是做積分,重要的是持續時間而不是順序,一個週期內怎麼切換都行啊。

是的,理論上任何切換順序都是ok 的,但是實際上我們需要考慮更多限制,例如因為MOS 開關次數是有壽命限制的,我們希望能盡量減少MOS 管的開關次數,那麼以最大限度地減少開關損耗為目的,我們就可以設計出下面的切換順序:

上圖可以看出來,在每個狀態切換的時候,都只有一個相發生了轉變:000 → 100 → 110 → 111 → 110 → 100 → 000,這也是所謂的七段式SVPWM 調變法。

同時我們透過在合理的位置插入兩個零向量,並且對零向量在時間上進行了平均分配,以使產生的PWM 對稱,從而有效地降低了PWM 的諧波分量。

同理,我們也可以列出在其他磁區時的切換順序:

至此,SVPWM 的工作完成了,我們得到了每一時刻所需的空間電壓向量以及它們持續的時間,在處理器中賦值給對應通道的捕獲比較寄存器產生相應的三個PWM 波形,控制MOS 管的開關,進而產生我們期望的電壓、電流、力矩。

總結 至此FOC 的原理和整個控制連結都講完了,回想一下整個過程,再試著解答最開始提到的問題:為什麼在FOC 控制中要做這麼多變換和反變換?

因為所謂的「向量控制」 其實就是在做解耦,把互相耦合的三相磁鏈解耦為容易控制的交軸 I q 和直軸 I d 。整個過程就好比我們在做訊號處理的時候,透過FFT 把訊號變換到頻域進行處理之後再IFFT 反變換回時域是一個道理。

另外值得一提的是,本文介紹的是有感的FOC 控制方法,其實FOC 可以做到無感控制(也就是不需要編碼器等額外的感測器),當然控制演算法也會更複雜,需要引進前饋控制、觀測器等概念,無感的好處就是結構安裝更簡單,可以避免位置感測器失效的風險等等,當然這又是另一個話題了。

FOC 是個強大的控制方法,透過對馬達的“像素級” 控制,可以實現很多應用,因為可以做“力控”,FOC 是很多機器人驅動單元的基礎部件,例如:

MIT Mini Cheetah 四腳機器人

又例如,因為可以做到力矩的精確控制,我們可以用FOC 驅動器配合無刷馬達來實現各種力回饋裝置,這就好像iPhone 的Haptic Engine一樣,可以模擬出各種以假亂真的物理效果:

羅技的力回饋方向盤

最後順便提一下,我最近也在設計一個FOC 向量驅動器,熟悉我的同學應該知道我做東西的風格就是–唯小不破,因此這次也是準備設計一個超迷你的高性能FOC 驅動器。硬體已經基本完成了,電路設計如下圖,分為上下疊板設計,將邏輯單元和功率單元分開:

邏輯控制板

功率輸出板

最後組裝起來是這樣的:

同時我也為驅動器設計了一個外殼(畢竟顏值就是正義啊~):

關於這個驅動器的具體參數和功能呢,等我硬體加工了再來更新~

2020.9.5 更新,FOC 驅動器做好啦~

Permalink study/motor-paper/2024-10-08-01/index.txt · Last modified: 2024/10/08 11:50 by jethro

oeffentlich