Position Controll(ext interface) on MCSDK6.x
前言
這邊因為MCSDK6.x版本後可以直接把位置控制生成出來,但這塊目前僅一般Encoder其他都需要修改,但這樣我們應該怎麼修改? 可以就從幾個範例來講解說明,針對I2C or SPI等等介面,基本上會是以ST生成的code去做調配,因此只有2環位置環+電流環
產生基本框架並且修改
因這邊使用MCSDK6.3.1版本基本上6.X以上版本皆是相同
在ST MCSDK上修改設定把Encoder打開
並且在以下要選成位置控制
Code修改邏輯
第一件事要先確認你多少頻率下會生成一個data,因為PWM採樣是在波峰週期如下圖採樣,基本上需要相同時間內完成不然就會產生運算錯誤,如果採樣太慢就要修改採樣頻率,變成不是每個上升周期都在採樣,可以參考下圖(ST初始設定是每個周期都會採樣)
在code方面是在以下位置
這部分是電流環觸發
採樣後UPdate
位置控制所做的計算主要在中頻任務中完成,因此要確保一個週期時間內可以採樣到全部數據並處理完畢(以30KHz為例全部任務就需要再33us完成,這樣Sensor 上報數據也會需要在33us內有data,如果沒有就需要拉長採樣週期去延長時間)
接下來就是針對已生成的位置控制在狀態內針對幾個部分修改1.CAL 2.Alignment
修改Alignment
原始encoder是使用打Id回測去對應目前角度做Alignment
這邊是使用初始給定角度,但這塊都是encoder專用所以不用設定
如果選用的sensor會記憶角度或可以直接設定為0,可以修改這邊使其變為0
以下總會整是Base 在Encoder底下出來的部分,因此其他interFace針對以下函數去修改即可調用原先架構
範例(使用多摩川encoder)
這邊額外寫一個函數去對比原來SetMecAngle(這邊留意只能用16bit的數據空間超過就需要全部自己重寫)
對比原先左邊和右邊概念不同,右邊是原先Encoder所使用方式因此原先部分是會打Id協助定位,但因為sensor本身輸出就是絕對角度,所以直接使用他的角度資訊操作
最重要的也是角度計算,這塊函數是會持續在中品任務中去update數值
其中Super.hElAngle這個是要塞入所使用sensor最重要的角度資訊,這邊需要針對需要特定條件在撰寫過
其他部分就可以沿用原先的code base
限制
這邊只能使用16bit以內數據,並且是2環架構,另外在位置路徑規劃上ST使用是標準的累積方式,因此並非全部都適合如股會出現暴衝等等現象都是路徑規劃沒有匹配