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

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

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

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

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

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

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


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

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

5. ABZ模塊
略
三.小結(jié)
本次主要給大家介紹了一下FPGA FOC驅(qū)動編碼器模塊的所有內(nèi)容,和設(shè)計(jì)過程。在后續(xù)新型號的編碼器添加進(jìn)來的話,可以以最小的代價完成這項(xiàng)工作。
-
FPGA
+關(guān)注
關(guān)注
1660文章
22394瀏覽量
635478 -
編碼器
+關(guān)注
關(guān)注
45文章
3943瀏覽量
142439 -
FOC
+關(guān)注
關(guān)注
21文章
384瀏覽量
46139
原文標(biāo)題:FPGA FOC編碼器(庫)模塊詳解
文章出處:【微信號:FPGA研究院,微信公眾號:FPGA研究院】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
FOC電機(jī)驅(qū)動磁編碼器怎么校準(zhǔn)?
怎樣使用Simple FOC庫運(yùn)行編碼器呢
RS連續(xù)編碼器的FPGA設(shè)計(jì)與實(shí)現(xiàn)
基于正余弦編碼器反饋處理的FPGA在伺服驅(qū)動中的應(yīng)用
基于FPGA增量式編碼器的接口設(shè)計(jì)
基于FPGA的圓光柵編碼器數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)
LDPC碼編碼器的FPGA實(shí)現(xiàn)
高精度增量式編碼器與基于DSP和FPGA編碼器信號測量模塊
基于FPGA+DSP的海德漢編碼器結(jié)構(gòu)及設(shè)計(jì)
基于FPGA的EnDat接口編碼器數(shù)據(jù)采集設(shè)計(jì)
旋轉(zhuǎn)編碼器測量_旋轉(zhuǎn)編碼器安裝方式
FPGA FOC驅(qū)動編碼器模塊介紹
評論