1. 程式人生 > >從零開始做手機雲臺/穩定器

從零開始做手機雲臺/穩定器

最近完成手機雲臺/穩定器的產品化,特意記錄整個手機雲臺的開發過程

一. 電機驅動篇

硬體描述: 直流無刷電機,7對極,控制板mcu為stm32f0。

驅動方式: FOC 控制,驅動板取樣兩路電流,並配置有編碼器。

網上針對FOC的控制文章較多,做起來也不難,在這裡主要記錄驅動編寫的過程及關鍵點。

1. 首先是編碼器的問題,手頭的AS5600 編碼器,採用SPI介面,1k HZ的頻率讀取物理角度,在驅動電機過程發現及其不穩定,有噪音,轉動速度越快越不穩定。經過分析資料,終於找到原因:驅動過程相位角在變化,而1KHZ的更新速率(PWM更新頻率是30K)無法及時跟隨到最新的位置。 解決辦法:插值,根據物理角度變化速度計算最新相位角。

3. 力矩控制問題,基本流程是,根據取樣電流,通過Clarke變化和Park變換(記得是電流變換,不是電壓變換),計算得出當前的磁鏈和力矩(絕對值沒意義,相對值才有意義)。這時候可以使用pid反饋控制,計算輸出 電壓和磁鏈。然後再經過反Park變換和反Clarke變換就可以得出三相輸出電壓,然後轉PWM波即可。整個過程的關鍵是PID控制引數的選擇,一般都直接採用PI控制即可。引數調整需要實踐慢慢實驗。

處理好以上幾個問題,電機驅動基本上就完成了。反正我沒遇到其他大問題,至於說電氣角度的校準之類的問題都是小問題。順便說下,之前也試過不用編碼器,直接使用兩個線性霍爾感測器計算物理角度。遇到幾個麻煩問題:1.安裝精確度要求高,兩個感測器必須垂直90度,誤差不能超過該4度,否則力矩明顯減少。2. 需要做溫度補償。 3. 磁環位置和強度要求配合。總之效果不怎麼好,由於時間關係沒有繼續採用這種方案做,後面再投入一些時間研究下。

二. 雲臺座標系篇

根絕雲臺的結構以及控制情況,整個雲臺包含三個座標系:

a. 參考座標系(地球座標系),手機根據陀螺儀計算出來的尤拉角就屬於該座標系。

b. 機體座標系, 陀螺儀感測器輸出的角速度屬於該座標系。

c. 電機座標系,電機物理角度及控制力矩屬於該座標系。

各座標系之間的關係公式推導:

1. 尤拉角座標系旋轉矩陣

2. 尤拉角變化率與機體座標系的角速度關係

這裡有個地方要注意,由於尤拉角俯仰的範圍是正負90度,在俯仰接近90度時橫滾值會完全不準。但云臺的俯仰姿態大於90度的情況很多,所以解決的辦法是在計算尤拉的時候把橫滾和俯仰調換位置。在這種情況下,該公式就不適合了,根據座標對映法,推匯出的公式是:

經過matlab模擬,可以使用,注意:該公式只適合Roll在正負60度區間,俯仰可以正負180度。

3. 機體座標系到電機座標系

基於以上公式,可以完成雲臺的所有座標系轉換。

三. 控制篇

全部控制採用PID 控制,控制環境主要包括:

1. PID 速度環

姿態err = 目標姿態 - 當前姿態

目標速度_e = 姿態err×Kp

整個速度環PID引數,積分和微分引數設定為0即可。

2. PID力矩控制環

目標速度 _b = 參考座標系轉機體座標系(目標速度 _e)

速度Err_b = 目標速度 _b - 陀螺儀角速度

速度Err_m = 機體座標系轉電機座標系(速度Err_b)

輸出力矩 = PID(速度Err_m)

3. 橫拍豎拍模式

豎拍模式,即手機豎直拍攝,但橫滾電機角度到達限定值,雲臺就直接切換為豎拍模式,在豎拍模式下,手機實際姿態是:橫滾90度(或負90度),俯仰正負45度。

4. 航向跟隨模式

實現方式很簡單:

a. 確定手柄姿態(是否手電筒模式),確定控制航向是原航向電機還是橫滾電機

b. 計算電機當前位置與目標位置err, 目標航向 = 當前航向 + err*KP

四. 通訊篇

1. 三軸間通訊

三軸間通訊結構圖:

俯仰為主機,橫滾和航向為從機,通訊速率為1M,主機沒500us 發起一次通訊。主機發送控制命令,從機將電機位置,控制板狀態等資訊作為返回。