以下文章來源于FPGA之旅,作者電擊小子
一. 簡介
在使用有感FOC算法的時候,離不開使用編碼器來獲取電機角度,編碼器的種類非常多,常見的有AS5600、AS5047P和MT6835等等,它們的驅動方式可以分為IIC、SPI、ABZ和HALL,其中最簡單的就是ABZ方式了,因為它對于任意編碼器來說,驅動方式都是一樣的,只需要將脈沖對應的角度分辨率修改一下即可,而IIC和SPI則會根據不同的芯片,內部寄存器地址和位寬的不一樣,驅動上會存在一些差異,針對這種驅動方式,如何能夠在更換芯片后,對原工程的改動量最小,代碼開發量最小,這正是本篇文章所要介紹的內容。
二. 編碼器模塊介紹
在多路FOC驅動板上,一共是支持了兩種編碼器和兩種角度獲取方式,分別是AS5047P和MT6835,SPI和ABZ。AS5047P的精度是14bit,MT6835的精度是21bit,它們的價格差不多,大家可以根據自己的需求進行選擇,個人感覺精度越高的編碼器調試起來越難(達到編碼器精度所對應的效果),不知道大家是否有同樣的感覺。
整個編碼器模塊的結構如下圖所示,輸入端為ABZ、SPI的引腳信號,則為角度、速度等信息。ABZ模塊、SPI驅動模塊和角度..檢測模塊為固定模塊,更換編碼器后也不需要進行修改,而AS5047P_SPI模塊和MT6835_SPI模塊則需要根據外接編碼器類型進行選擇。

這樣一來換新編碼器的時候,只需要很小的開發工作就可以完成新編碼器的驅動了。另外這三個角度獲取模塊通過generate條件編譯控制,根據外部parameter參數即可選擇對應的模塊生效。

SPI驅動模塊
SPI驅動模塊的端口信號如下圖所示,CPOL、CPHA控制SPI的模式,SCLK_DIV控制SPI的通信速率,DATA_WIDTH控制單次SPI通信的數據位寬,這樣基本可以滿足所有通過SPI的方式來獲取角度的編碼器了。

2. AS5047P_SPI模塊
AS5047p讀角度信息的過程可以通過數據手冊來獲取,一共需要發起兩次的SPI傳輸,上一次發起的SPI回讀數據會在下一次SPI傳輸時輸出,過程如下圖所示。

角度獲取有兩個寄存器可以讀,分別是0x3FFF和0x3FFE,本次使用的是0x3FFF寄存器,然后NOP指令什么也不操作,最開始設計的時候也沒有考慮那么多,直接先發送一個0x3FFF,然后發送一個NOP,這樣就可以獲取到角度信息了,剛開始用的時候,基本沒有什么問題。

但是在后面繼續用的時候,就出現了非常嚴重的bug,AS5047P會一直讀到錯誤的數據,需要斷電一下編碼器才行。通過debug發現是回傳數據的EF位拉高了,導致無法獲取到正確的數據,而該狀態信息是無法自行清除的,所以只要EF拉高了,在后續的通信過程中會一直拉高,導致角度獲取異常。
通過數據手冊可以看到,通過讀ERRFL可以將錯誤狀態信息給清除,那么我們可以將第二階段的NOP指令換成ERRFL指令就可以了,這樣即使在通信的過程中出現了問題,也會在下一次角度獲取的時候,可以正常通信。

AS5047P的SPI精度為14bit,所以將獲取到的原始數據轉化為角度信息還需要將其乘上1440(擴大65536)即可。
3. MT6835_SPI模塊
MT6835的角度獲取過程會比AS5047P的先對而已簡單許多,只需要一次SPI傳輸即可,傳輸過程如下圖所示,在獲取到數據之后,按照手冊給的信息拼接成完整的角度。MT6835獲取到的原始數據數據為21bit,將其轉為角度需要乘上11.25即可。


4.角度、速度、位置檢測模塊
角度信息在輸入進模塊的時候就已經是角度了,直接將信息輸入即可。
速度信息采用單位時間內角度變化量進行求解,單位時間的選擇不宜過大也不宜過小,本設計采用的是100us,角度輸入的單位是°,直接計算出來的話是°/s,速度一般采用RPM轉每分鐘作為衡量單位,因此需要進行單位的轉換,轉換過程如下圖所示。
10000為100us的倒數。
speed_angle_gap_sum為角度間隔總和
0.000015為每一個speed_angle_gap_sum代表的角度值, 轉換方式為 1/(360*65536)
最后將角度信息擴大100倍進行輸出

位置控制由兩個信號進行控制,一個是使能信號,當該信號使能后,模塊才會累加角度間隔,避免在切換到位置控制的時候,目標角度和實際角度誤差過大的問題。另外一個就是設置當前位置為初始位置,也就是將位置信息置零。

5. ABZ模塊
略
三.小結
本次主要給大家介紹了一下FPGA FOC驅動編碼器模塊的所有內容,和設計過程。在后續新型號的編碼器添加進來的話,可以以最小的代價完成這項工作。
-
FPGA
+關注
關注
1652文章
22258瀏覽量
629427 -
編碼器
+關注
關注
45文章
3896瀏覽量
141276 -
FOC
+關注
關注
21文章
368瀏覽量
45798
原文標題:FPGA FOC編碼器(庫)模塊詳解
文章出處:【微信號:FPGA研究院,微信公眾號:FPGA研究院】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
RS連續編碼器的FPGA設計與實現
基于正余弦編碼器反饋處理的FPGA在伺服驅動中的應用
基于FPGA增量式編碼器的接口設計
基于FPGA的圓光柵編碼器數據采集系統設計
基于FPGA+DSP的海德漢編碼器結構及設計
基于FPGA的EnDat接口編碼器數據采集設計

FPGA FOC驅動編碼器模塊介紹
評論