節(jié)電機(jī)伺服控制實(shí)戰(zhàn):基于國(guó)產(chǎn)芯片的RMCS V1.0系統(tǒng)設(shè)計(jì))
關(guān)節(jié)電機(jī)控制這東西我算是被“逼上梁山”才真正啃下來(lái)的。當(dāng)時(shí)項(xiàng)目上需要給一臺(tái)六軸機(jī)械臂換裝新的關(guān)節(jié)模組進(jìn)口伺服驅(qū)動(dòng)器的交期跟不上接口協(xié)議和控制器還對(duì)不上來(lái)回折騰了兩周最后只能自己動(dòng)手。與其繼續(xù)被上游方案卡脖子不如把系統(tǒng)級(jí)自研這條路走通——RMCS V1.0 就是這么立項(xiàng)的。RMCS 全稱(chēng)是 Robotic Motor Control System一套面向關(guān)節(jié)電機(jī)主要是無(wú)框力矩電機(jī)加絕對(duì)值編碼器的嵌入式伺服驅(qū)動(dòng)系統(tǒng)。V1.0 的意義不在于它是第一個(gè)能轉(zhuǎn)的版本而在于它把“國(guó)產(chǎn)芯片、自研伺服算法、工業(yè)級(jí)硬件”完整串成了一條閉環(huán)鏈路從芯片選型、驅(qū)動(dòng)板設(shè)計(jì)、FOC 算法到臺(tái)架驗(yàn)證全部跑通。這篇文章會(huì)把 RMCS V1.0 的完整思路記錄下來(lái)為什么用國(guó)產(chǎn)芯片、關(guān)節(jié)電機(jī)相比普通電機(jī)難在哪、三環(huán)控制的每個(gè)環(huán)節(jié)怎么落地、關(guān)鍵參數(shù)怎么算、實(shí)測(cè)中踩了哪些坑。不管你是做機(jī)器人、自動(dòng)化設(shè)備還是單純對(duì)伺服控制感興趣的工程師這里面的大部分內(nèi)容都可以直接拿去做參考。1. 項(xiàng)目緣起為什么必須做系統(tǒng)級(jí)關(guān)節(jié)電機(jī)方案1.1 關(guān)節(jié)電機(jī)控制的真正痛點(diǎn)先明確一個(gè)概念關(guān)節(jié)電機(jī)不是普通的直流電機(jī)。它通常指機(jī)器人關(guān)節(jié)部位使用的無(wú)框力矩電機(jī)或者帶減速器的伺服電機(jī)組合。這類(lèi)電機(jī)的特點(diǎn)是外形扁平、中空過(guò)線、極對(duì)數(shù)多、轉(zhuǎn)矩密度高往往還要內(nèi)嵌絕對(duì)值編碼器。很多人一開(kāi)始覺(jué)得調(diào)速不就是一個(gè) PID 閉環(huán)嗎實(shí)際做下來(lái)完全不是那么回事。關(guān)節(jié)電機(jī)的負(fù)載是動(dòng)態(tài)變化的機(jī)械臂運(yùn)動(dòng)過(guò)程中重力力矩、慣性力矩、摩擦力矩都在實(shí)時(shí)變化而且減速器本身存在齒隙、柔性變形和摩擦非線性。普通電機(jī)驅(qū)動(dòng)器只需要讓轉(zhuǎn)速跟隨指令關(guān)節(jié)驅(qū)動(dòng)器則必須做到力矩精確可控、位置軌跡跟隨、阻抗柔順這是完全不同的控制深度。這里補(bǔ)一個(gè)我踩過(guò)的認(rèn)知誤區(qū)最早我覺(jué)得電機(jī)控制的核心是算法把 FOC 寫(xiě)對(duì)了就成了一大半。實(shí)際做下來(lái)發(fā)現(xiàn)硬件平臺(tái)和系統(tǒng)集成占的坑遠(yuǎn)比算法多。算法是透明的只要你愿意啃總能弄明白但硬件上的噪聲、地干擾、編碼器時(shí)序、功率管發(fā)熱這些問(wèn)題每一個(gè)都能讓算法優(yōu)勢(shì)化為烏有。RMCS 立項(xiàng)時(shí)我就定了一個(gè)原則必須從系統(tǒng)層面考慮問(wèn)題而不是只盯著算法規(guī)格。1.2 從“能轉(zhuǎn)”到“系統(tǒng)級(jí)可控”的差距我理解的“系統(tǒng)級(jí)”是指不只盯著芯片本身而是把主控芯片、功率驅(qū)動(dòng)、電流采樣、編碼器接口、通信總線、保護(hù)邏輯、上位控制策略當(dāng)作一個(gè)整體來(lái)設(shè)計(jì)。V1.0 立項(xiàng)時(shí)我們給自己列了幾個(gè)硬指標(biāo)48V 直流供電峰值電流 20A連續(xù)電流 10A電流環(huán)帶寬不低于 2kHz速度環(huán)帶寬不低于 100Hz位置環(huán)帶寬不低于 10Hz支持 17 位絕對(duì)值編碼器通信周期 1ms 以?xún)?nèi)整機(jī)工作溫度 -20℃~70℃具備過(guò)流、過(guò)溫、欠壓、堵轉(zhuǎn)保護(hù)板卡尺寸約束在 70mm×55mm×18mm 以?xún)?nèi)滿足關(guān)節(jié)模組內(nèi)置需求這些指標(biāo)單拆開(kāi)看都不算激進(jìn)但組合在一起對(duì)硬件設(shè)計(jì)和軟件實(shí)現(xiàn)的要求就上來(lái)了。尤其是體積和發(fā)熱的矛盾20A 峰值電流的功率級(jí)要在 18mm 高度的板卡里布局熱設(shè)計(jì)和 EMC 都比普通伺服驅(qū)動(dòng)器難一個(gè)量級(jí)。所謂“軍工級(jí)”或者說(shuō)“高可靠工業(yè)級(jí)”的要求在這些指標(biāo)里體現(xiàn)得很具體寬溫工作范圍意味著功率器件和編碼器都要有足夠裕量高可靠意味著保護(hù)邏輯必須冗余不能只靠單一機(jī)制長(zhǎng)壽命意味著器件選型不能只看參數(shù)還要看長(zhǎng)期老化特性。這些不是一句口號(hào)而是要落實(shí)到每一個(gè)元器件、每一行保護(hù)代碼上的。1.3 國(guó)產(chǎn)芯片選型的現(xiàn)實(shí)考量選國(guó)產(chǎn)芯片不是拍腦袋的決定。當(dāng)時(shí)的現(xiàn)實(shí)是進(jìn)口 MCU 交期長(zhǎng)、價(jià)格波動(dòng)大部分型號(hào)存在供貨不確定性。我們?cè)u(píng)估了國(guó)產(chǎn)的幾個(gè)主流系列——GD32、APM32、HC32、N32以及部分面向電機(jī)控制的專(zhuān)用芯片最終選擇基于 Cortex-M4 內(nèi)核的國(guó)產(chǎn) MCU 作為主控。選它的理由很直接生態(tài)成熟Keil 和 IAR 直接開(kāi)發(fā)不需要額外學(xué)工具鏈片上資源夠用多路 ADC、高級(jí)定時(shí)器帶互補(bǔ) PWM 輸出和死區(qū)插入、CAN 控制器、SPI 都是標(biāo)配算力滿足 FOC 需求168MHz 主頻帶 FPU跑 20kHz 的電流環(huán)完全夠用部分型號(hào)的 ADC 支持多通道同步采樣這對(duì)電流環(huán)來(lái)說(shuō)很關(guān)鍵我個(gè)人的建議是做類(lèi)似方案不要一上來(lái)就追求最貴最強(qiáng)的芯片。關(guān)節(jié)電機(jī)控制的核心瓶頸往往不在算力而在采樣精度、實(shí)時(shí)性和外設(shè)匹配度。先把芯片的 ADC 觸發(fā)方式、定時(shí)器剎車(chē)功能、DMA 協(xié)作機(jī)制這些細(xì)節(jié)摸透比單純堆主頻和內(nèi)存有用得多。2. 三環(huán)控制架構(gòu)與系統(tǒng)級(jí)拆解2.1 關(guān)節(jié)電機(jī)伺服控制的經(jīng)典三層結(jié)構(gòu)伺服系統(tǒng)的控制回路分為電流環(huán)、速度環(huán)、位置環(huán)三層由內(nèi)到外依次嵌套。這個(gè)結(jié)構(gòu)是所有伺服驅(qū)動(dòng)器的基礎(chǔ)。電流環(huán)在最內(nèi)層直接控制電機(jī)的轉(zhuǎn)矩電流q 軸電流和勵(lì)磁電流d 軸電流響應(yīng)速度最快帶寬最高。速度環(huán)在中間根據(jù)速度指令和編碼器反饋計(jì)算目標(biāo)電流。位置環(huán)在最外層根據(jù)位置指令和當(dāng)前位置計(jì)算目標(biāo)速度通常還包含軌跡規(guī)劃。這里有一個(gè)重要的工程原則三環(huán)的帶寬必須拉開(kāi)差距否則環(huán)路之間會(huì)互相干擾。工程上常用的經(jīng)驗(yàn)是相鄰環(huán)路的帶寬相差 5 到 10 倍。比如電流環(huán) 2kHz速度環(huán)大約 100 到 200Hz位置環(huán) 10 到 20Hz。這個(gè)比例不是拍腦袋定的而是環(huán)路相位裕度綜合作用的結(jié)果——內(nèi)環(huán)帶寬不夠外環(huán)的相位裕度就會(huì)被吃掉系統(tǒng)容易振蕩。用生活化的類(lèi)比來(lái)說(shuō)這就像三級(jí)管理電流環(huán)是執(zhí)行層反應(yīng)最快負(fù)責(zé)把具體活兒干利索速度環(huán)是管理層根據(jù)目標(biāo)調(diào)配執(zhí)行層的力度位置環(huán)是決策層只關(guān)心大方向。如果管理層和執(zhí)行層反應(yīng)速度差不多整個(gè)系統(tǒng)就會(huì)亂套。2.2 各環(huán)路的設(shè)計(jì)與實(shí)現(xiàn)要點(diǎn)電流環(huán)是整個(gè)系統(tǒng)的基石。電流環(huán)做不好外面的速度環(huán)和位置環(huán)再精細(xì)也是空中樓閣。電流環(huán)的核心是 FOC磁場(chǎng)定向控制它的本質(zhì)是把三相交流電機(jī)的定子電流分解成兩個(gè)正交分量——d 軸勵(lì)磁和 q 軸轉(zhuǎn)矩讓控制對(duì)象從“交流”變成“直流”然后像控制直流電機(jī)一樣去控制。電流環(huán)的關(guān)鍵參數(shù)在 RMCS V1.0 里是這樣的PWM 頻率 16kHz電流采樣與 PWM 中心對(duì)齊同步觸發(fā)電流環(huán)采用 PI 控制器加前饋死區(qū)時(shí)間補(bǔ)償和母線電壓波動(dòng)補(bǔ)償都做了。這些細(xì)節(jié)單獨(dú)看都不復(fù)雜但組合在一起才能保證電流環(huán)的帶寬和穩(wěn)定性。速度環(huán)和位置環(huán)在關(guān)節(jié)運(yùn)動(dòng)中的特殊點(diǎn)在于不能只做線性 PID。關(guān)節(jié)電機(jī)的負(fù)載特性有很強(qiáng)的非線性尤其是諧波減速器的柔性會(huì)讓系統(tǒng)出現(xiàn)低頻諧振。所以速度環(huán)里要加陷波濾波器位置環(huán)要在軌跡規(guī)劃層面做加速度jerk限制。jerk 這個(gè)概念值得多說(shuō)一句jerk 是加速度的變化率如果 jerk 過(guò)大機(jī)械臂末端就會(huì)抖動(dòng)。我們通常把 jerk 限制在能保證末端振動(dòng)幅度低于某個(gè)閾值這個(gè)閾值需要結(jié)合具體機(jī)械結(jié)構(gòu)的固有頻率來(lái)確定。沒(méi)有做 jerk 限制的軌跡規(guī)劃在高速運(yùn)動(dòng)時(shí)一定會(huì)有肉眼可見(jiàn)的末端顫抖。2.3 系統(tǒng)級(jí)挑戰(zhàn)從芯片到整機(jī)的鏈路系統(tǒng)級(jí)的含義在這個(gè)項(xiàng)目里很具體。芯片只是其中一個(gè)環(huán)節(jié)整個(gè)鏈路里還有功率級(jí)的柵極驅(qū)動(dòng)芯片、MOSFET、采樣電阻這些器件的開(kāi)關(guān)特性、導(dǎo)通電阻、溫漂直接影響電流環(huán)的執(zhí)行質(zhì)量編碼器的通信時(shí)序絕對(duì)值編碼器走 SPI 或者類(lèi) BiSS 協(xié)議時(shí)序稍不對(duì)就會(huì)讀到亂碼位置環(huán)直接崩潰通信總線的實(shí)時(shí)性關(guān)節(jié)電機(jī)在機(jī)械臂里受上位機(jī)集中控制總線周期抖動(dòng)直接反映為軌跡抖動(dòng)保護(hù)邏輯的完整性過(guò)流、過(guò)溫、欠壓這些保護(hù)動(dòng)作必須在微秒級(jí)響應(yīng)這條鏈路里任何一塊短板都會(huì)成為系統(tǒng)瓶頸。國(guó)產(chǎn)芯片本身沒(méi)問(wèn)題但如果功率級(jí)布局不合理、采樣電路噪聲大、編碼器通信不穩(wěn)整個(gè)系統(tǒng)的表現(xiàn)會(huì)被拉得很低。所以“國(guó)產(chǎn)芯片用于高可靠制造場(chǎng)景”這個(gè)命題重點(diǎn)不在芯片本身而在“用國(guó)產(chǎn)芯片做出來(lái)的整個(gè)系統(tǒng)能否達(dá)到高可靠要求”。做系統(tǒng)級(jí)設(shè)計(jì)還有一個(gè)容易被忽略的點(diǎn)故障降級(jí)。真正的工業(yè)系統(tǒng)不會(huì)永遠(yuǎn)正常工作關(guān)鍵是出問(wèn)題時(shí)怎么表現(xiàn)。我們給 RMCS V1.0 定義了幾種降級(jí)模式——過(guò)溫時(shí)先降流不直接停機(jī)通信丟失后進(jìn)入保持狀態(tài)而不是讓電機(jī)自由滑落編碼器異常時(shí)報(bào)錯(cuò)并閉鎖輸出。這種“有尊嚴(yán)地失敗”的能力恰恰是工業(yè)級(jí)系統(tǒng)和實(shí)驗(yàn)室 demo 的最大區(qū)別。作為機(jī)械臂、自動(dòng)化裝備這類(lèi)應(yīng)用如果電機(jī)驅(qū)動(dòng)在異常時(shí)直接失控代價(jià)可能是整個(gè)機(jī)械結(jié)構(gòu)被損壞甚至危及人身安全。因此保護(hù)邏輯和降級(jí)策略的詳細(xì)設(shè)計(jì)在整個(gè)項(xiàng)目里占的分量非常大。3. 硬件方案基于國(guó)產(chǎn)芯片的伺服驅(qū)動(dòng)設(shè)計(jì)3.1 主控芯片選型與外設(shè)資源評(píng)估我們最終選了一款國(guó)產(chǎn) Cortex-M4 內(nèi)核 MCU主頻 168MHz帶 FPU。選型時(shí)最關(guān)注的外設(shè)資源包括高級(jí)定時(shí)器支持互補(bǔ) PWM 輸出、死區(qū)插入、剎車(chē)輸入ADC 支持多通道同步采樣CAN 2.0B 控制器SPI 支持 DMA硬件 CRC選型時(shí)我把外設(shè)的匹配度列了一張表逐個(gè)對(duì)需求需求需要的外設(shè)資源選型關(guān)注點(diǎn)16kHz 三路互補(bǔ) PWM高級(jí)定時(shí)器 死區(qū) 剎車(chē)必須硬件生成不能用 IO 翻轉(zhuǎn)模擬電流同步采樣多通道 ADC 同步觸發(fā)至少 3 通道最好 4 通道用于母線電壓絕對(duì)值編碼器讀取SPI DMA 定時(shí)器超時(shí)通信速率 4MHz 以上時(shí)序可控上位通信CAN收發(fā)器選隔離型號(hào)保護(hù)響應(yīng)硬件比較器 剎車(chē)輸入過(guò)流比較器直接接 PWM 剎車(chē)不走軟件這里必須強(qiáng)調(diào)高級(jí)定時(shí)器的剎車(chē)輸入一定要接硬件過(guò)流保護(hù)。我們的第一版只做了軟件判斷過(guò)流短路測(cè)試時(shí) PWM 來(lái)不及關(guān)斷直接燒了功率管。后來(lái)改成硬件比較器加剎車(chē)輸入保護(hù)動(dòng)作時(shí)間從幾十微秒縮短到 2μs 以?xún)?nèi)。這個(gè)教訓(xùn)值一塊功率板的價(jià)錢(qián)。另外關(guān)于 ADC 采樣有一個(gè)關(guān)鍵點(diǎn)電機(jī)的三相電流是高頻變化的如果三路 ADC 不是同時(shí)采樣計(jì)算出來(lái)的電流矢量就是歪的。所以必須用定時(shí)器觸發(fā) ADC 同步采樣而不是軟件里逐個(gè)讀取。好的 MCU 會(huì)提供兩三個(gè) ADC 模塊配合定時(shí)器的同一觸發(fā)源實(shí)現(xiàn)對(duì)三相電流的同一時(shí)刻采樣這在國(guó)產(chǎn)中高端型號(hào)中并不少見(jiàn)關(guān)鍵是去讀數(shù)據(jù)手冊(cè)確認(rèn)觸發(fā)結(jié)構(gòu)。3.2 功率級(jí)與電流采樣電路設(shè)計(jì)功率級(jí)用了三相全橋結(jié)構(gòu)6 顆 N 溝道 MOSFET。針對(duì) 48V、20A 峰值的工作點(diǎn)MOSFET 選型重點(diǎn)關(guān)注導(dǎo)通電阻和柵極電荷導(dǎo)通電阻影響持續(xù)電流下的發(fā)熱柵極電荷影響開(kāi)關(guān)損耗。我們選的是導(dǎo)通電阻約 7mΩ、柵極電荷約 30nC 的型號(hào)柵極驅(qū)動(dòng)用半橋驅(qū)動(dòng)芯片帶死區(qū)時(shí)間和米勒鉗位功能。電流采樣用了三電阻方案在三相下橋臂分別串聯(lián)毫歐級(jí)采樣電阻阻值 5mΩ功率 2W通過(guò)差分運(yùn)放放大后送入 ADC。采樣時(shí)機(jī)必須和 PWM 中心對(duì)齊在 PWM 載波中心點(diǎn)三相下橋臂全部導(dǎo)通此時(shí)采樣電阻上的電壓能最真實(shí)地反映相電流。這里有一個(gè)我在第一版上犯過(guò)的經(jīng)典錯(cuò)誤把采樣電阻的參考地直接連到了功率地結(jié)果 ADC 讀數(shù)在電機(jī)轉(zhuǎn)動(dòng)時(shí)瘋狂跳變最后查出來(lái)是功率地噪聲灌進(jìn)了模擬參考端。后來(lái)改成模擬地和功率地單點(diǎn)連接采樣值立刻干凈了。做電機(jī)驅(qū)動(dòng)地平面的分割是門(mén)手藝活不能圖省事。功率級(jí)布局還有一個(gè)熱設(shè)計(jì)問(wèn)題。持續(xù) 10A 電流下6 顆 MOSFET 的總功耗大約十幾瓦如果散熱路徑設(shè)計(jì)不好板卡溫度會(huì)迅速上升。我們?cè)?PCB 上給 MOSFET 腳下打了大量過(guò)孔陣列把熱量導(dǎo)到背面的大面積銅箔再通過(guò)導(dǎo)熱墊傳導(dǎo)到鋁合金外殼。這些結(jié)構(gòu)細(xì)節(jié)在項(xiàng)目初期就要定下來(lái)等測(cè)試了再改成本會(huì)翻好幾倍。3.3 編碼器與通信接口配置關(guān)節(jié)電機(jī)用的是 17 位絕對(duì)值編碼器輸出為 SPI 協(xié)議。編碼器接口做了幾個(gè)處理SPI 速率設(shè)為 4MHz使用 DMA 傳輸避免反復(fù)進(jìn)中斷占用 CPU 時(shí)間編碼器供電加了一級(jí) LDO 和濾波電容防止功率級(jí)開(kāi)關(guān)噪聲耦合到編碼器電源通信線上加 100Ω 串聯(lián)電阻限制振鈴實(shí)測(cè) 4MHz 下信號(hào)質(zhì)量很好通信總線用的 CAN 2.0B速率 1Mbps。關(guān)節(jié)模組內(nèi)部空間有限CAN 控制器和收發(fā)器之間加了隔離器件避免功率地干擾通過(guò)總線傳播。總線周期設(shè)定為 1ms每周期下發(fā)位置指令回傳位置、速度和電流狀態(tài)。這里有個(gè)工程細(xì)節(jié)編碼器通信的 SPI 波特率經(jīng)常會(huì)因?yàn)椴季€過(guò)長(zhǎng)和地線噪聲導(dǎo)致讀取出錯(cuò)。如果你在實(shí)驗(yàn)室調(diào)得好好的一到整機(jī)裝配就報(bào)編碼器異常多半是信號(hào)質(zhì)量問(wèn)題。我們?cè)谡麢C(jī)上發(fā)現(xiàn)編碼器線束靠近功率線時(shí)誤碼率明顯上升后來(lái)不僅加了串阻還調(diào)整了線束走向把編碼器線和功率線分開(kāi)走。很多時(shí)候問(wèn)題不是原理性錯(cuò)誤而是工程細(xì)節(jié)上的“小問(wèn)題”。4. 軟件實(shí)現(xiàn)FOC 核心與關(guān)鍵參數(shù)4.1 FOC 的完整實(shí)現(xiàn)鏈路FOC 在軟件上的實(shí)現(xiàn)鏈路可以拆成五步采樣三相電流如果對(duì)稱(chēng)可以只采兩相第三相由基爾霍夫電流定律計(jì)算Clarke 變換把三相靜止坐標(biāo)系變換到兩相靜止坐標(biāo)系αβPark 變換把 αβ 變換到旋轉(zhuǎn)坐標(biāo)系dq旋轉(zhuǎn)角度來(lái)自編碼器估算的電角度在 dq 坐標(biāo)系里分別做 PI 調(diào)節(jié)d 軸目標(biāo)通常為 0q 軸目標(biāo)來(lái)自速度環(huán)輸出反 Park 變換加 SVPWM生成三相互補(bǔ) PWM 占空比整個(gè)鏈路在 16kHz 的 PWM 中斷里執(zhí)行中斷里全部用浮點(diǎn)計(jì)算。168MHz 主頻下完整 FOC 大約占用 12 到 15μs時(shí)序裕量充足。關(guān)于 d 軸電流目標(biāo)為 0這里補(bǔ)充說(shuō)明一下。對(duì)表貼式永磁電機(jī)來(lái)說(shuō)磁阻轉(zhuǎn)矩接近于零d 軸電流只產(chǎn)生損耗和發(fā)熱不產(chǎn)生有效轉(zhuǎn)矩所以目標(biāo)設(shè)定為 0。但對(duì)于內(nèi)置式永磁電機(jī)勵(lì)磁電感小于交軸電感d 軸負(fù)電流可以產(chǎn)生額外的磁阻轉(zhuǎn)矩這時(shí)就要用最大轉(zhuǎn)矩電流比控制d 軸目標(biāo)不再是 0。關(guān)節(jié)電機(jī)大多用表貼式無(wú)框電機(jī)所以 V1.0 里 d 軸就是 0。這個(gè)選擇要和實(shí)際電機(jī)結(jié)構(gòu)對(duì)應(yīng)起來(lái)。另外SVPWM 的實(shí)現(xiàn)要注意母線電壓利用率。SVPWM 相比正弦 SPWM最大線性調(diào)制深度從 0.707 提高到 0.866相當(dāng)于母線電壓利用率提升了約 15%。在 48V 系統(tǒng)里這 15% 意味著電機(jī)能跑到的最高轉(zhuǎn)速明顯更高對(duì)機(jī)械臂關(guān)節(jié)的高速性能很重要。4.2 電角度對(duì)齊最容易翻車(chē)的一步關(guān)節(jié)電機(jī)控制里最容易被忽視、也最容易翻車(chē)的環(huán)節(jié)是電角度對(duì)齊。FOC 里的 Park 變換依賴(lài)當(dāng)前轉(zhuǎn)子電角度而這個(gè)角度不是簡(jiǎn)單讀編碼器就能得到的——編碼器輸出的是機(jī)械角度必須轉(zhuǎn)換成電角度還要保證 dq 軸的初始對(duì)齊關(guān)系正確。電角度等于機(jī)械角度乘以極對(duì)數(shù)這個(gè)公式看似簡(jiǎn)單但機(jī)械角度零點(diǎn)和編碼器零點(diǎn)不一定重合。正確的對(duì)齊做法是給電機(jī)通一個(gè)已知方向的直流矢量比如給 U 相通電、V/W 相短接讓轉(zhuǎn)子轉(zhuǎn)到確定位置然后把這個(gè)位置對(duì)應(yīng)的編碼器值標(biāo)定為電角度零點(diǎn)。我第一臺(tái)樣機(jī)在這里踩了坑沒(méi)做對(duì)齊就直接把編碼器零點(diǎn)當(dāng)成電角度零點(diǎn)結(jié)果電機(jī)上電后沒(méi)有按預(yù)期鎖定反而劇烈抖動(dòng)并過(guò)流報(bào)錯(cuò)。重新做對(duì)齊標(biāo)定之后控制立刻穩(wěn)定了。如果你做類(lèi)似系統(tǒng)一定把電角度對(duì)齊做成獨(dú)立的校準(zhǔn)流程并且保存到非易失存儲(chǔ)里每次上電時(shí)加載校驗(yàn)而不是靠“應(yīng)該差不多”。這里還要提一種更隱蔽的情況如果你使用的是帶減速器的關(guān)節(jié)模組電機(jī)端的編碼器和輸出端之間還有減速比。位置環(huán)拿到的是輸出端位置但電流環(huán)需要的是電機(jī)端電角度。所以軟件架構(gòu)里必須區(qū)分“電機(jī)端角度”和“輸出端位置”兩個(gè)量?jī)烧叩膿Q算關(guān)系是減速比乘以極對(duì)數(shù)。這個(gè)關(guān)系搞錯(cuò)了系統(tǒng)表現(xiàn)出的癥狀就是位置控制看起來(lái)正常但電流反饋在某個(gè)固定位置反復(fù)波動(dòng)。排查起來(lái)非常費(fèi)勁。4.3 環(huán)路參數(shù)整定與關(guān)鍵計(jì)算電流環(huán)的 PI 參數(shù)可以按零極點(diǎn)對(duì)消法做理論估算再用實(shí)測(cè)微調(diào)。以本系統(tǒng)為例相電感約 0.4mH相電阻約 0.25Ω。電流環(huán)期望帶寬設(shè)為 2kHz角頻率約 12560 rad/s。電流環(huán) PI 采用零點(diǎn)對(duì)消電機(jī)的極點(diǎn)積分時(shí)間常數(shù)等于 L/R約 1.6ms。比例增益約為相電感乘以角頻率即 5.02積分增益約為比例增益除以積分時(shí)間常數(shù)即 3137。實(shí)際調(diào)試時(shí)我會(huì)先把理論值乘以 0.5 到 0.7然后再逐步增加觀察電流波形是否出現(xiàn)過(guò)沖和振蕩。不要一上來(lái)就填理論值因?yàn)殡姍C(jī)參數(shù)在運(yùn)行時(shí)會(huì)有變化電感還會(huì)隨電流飽和而下降。在額定電流附近電感可能下降 20% 到 30%這時(shí)候如果 PI 增益是按 0.4mH 算的實(shí)際的電流環(huán)帶寬會(huì)偏高可能引發(fā)振蕩。所以我在整機(jī)測(cè)試時(shí)會(huì)在小電流和大電流兩種工況下分別驗(yàn)證電流環(huán)階躍響應(yīng)取一個(gè)折中值。速度環(huán)和位置環(huán)的整定相對(duì)經(jīng)驗(yàn)化。速度環(huán)用的 PI 加陷波濾波器陷波頻率根據(jù)實(shí)測(cè)速度波形的諧振峰來(lái)確定。位置環(huán)用 P 加前饋前饋?lái)?xiàng)包含速度前饋和加速度前饋這樣軌跡跟蹤誤差才會(huì)小。單純的位置 P 控制在恒定速度跟蹤時(shí)一定有固定滯后誤差加了速度前饋之后這個(gè)誤差能減小一個(gè)數(shù)量級(jí)以上。5. 實(shí)測(cè)數(shù)據(jù)與調(diào)試經(jīng)驗(yàn)5.1 臺(tái)架測(cè)試結(jié)果整機(jī)聯(lián)調(diào)之后在臺(tái)架上做了一輪完整的性能驗(yàn)證。測(cè)試條件48V 供電帶 10:1 行星減速器和 17 位編碼器負(fù)載是模擬機(jī)械臂關(guān)節(jié)的慣性負(fù)載。主要實(shí)測(cè)數(shù)據(jù)如下電流環(huán)階躍響應(yīng)上升時(shí)間約 0.15ms超調(diào)小于 5%帶寬實(shí)測(cè)約 2kHz速度環(huán)階躍響應(yīng)100rpm 階躍下上升時(shí)間約 8ms穩(wěn)態(tài)誤差小于 0.5rpm位置環(huán)定位精度約 0.005°轉(zhuǎn)矩波動(dòng)恒流模式下轉(zhuǎn)速波動(dòng)控制在 ±1% 以?xún)?nèi)額定負(fù)載下電機(jī)溫升約 45K在可接受范圍內(nèi)這里需要說(shuō)明測(cè)試方法。電流環(huán)帶寬的實(shí)測(cè)是通過(guò)上位機(jī)注入不同頻率的電流指令正弦波同時(shí)讀取反饋電流的幅值和相位繪制伯德圖。很多人偷懶只看階躍響應(yīng)但階躍響應(yīng)只能定性判斷帶寬是否足夠定量測(cè)量還是得掃頻。我們用向量網(wǎng)絡(luò)分析儀的思路在固件里實(shí)現(xiàn)了一個(gè)簡(jiǎn)易的掃頻功能10Hz 到 5kHz 范圍內(nèi)掃了幾十個(gè)頻點(diǎn)自動(dòng)記錄幅值比和相位差這樣測(cè)一次只要幾分鐘。這個(gè)工具后來(lái)一直保留在固件里調(diào)試其他電機(jī)時(shí)非常好用。5.2 調(diào)試中的關(guān)鍵現(xiàn)象記錄有幾個(gè)現(xiàn)象在調(diào)試過(guò)程中絕對(duì)不能忽略。第一個(gè)是電機(jī)嘯叫。電流環(huán)參數(shù)偏激進(jìn)或者 PWM 頻率落在人耳敏感區(qū)間時(shí)電機(jī)會(huì)發(fā)出明顯嘯叫。16kHz 的 PWM 本身接近人耳上限但電流環(huán)振蕩時(shí)高頻分量會(huì)造成噪聲放大。解決方法是先降電流環(huán)增益確認(rèn)沒(méi)有振蕩后再逐步加回來(lái)。第二個(gè)是零速抖動(dòng)。位置模式下電機(jī)會(huì)在零速附近出現(xiàn)微小來(lái)回抖動(dòng)機(jī)械臂末端表現(xiàn)為振動(dòng)。原因往往是速度環(huán)靜摩擦補(bǔ)償不夠或者位置環(huán)增益過(guò)高。我們通過(guò)加入基于方向的摩擦力補(bǔ)償加上零速附近的滯回解決了這個(gè)問(wèn)題。這里用到的摩擦補(bǔ)償模型很簡(jiǎn)單根據(jù)速度方向給一個(gè)恒定的前饋力矩方向反轉(zhuǎn)時(shí)前饋跟著反轉(zhuǎn)。關(guān)鍵是摩擦力的幅值要實(shí)測(cè)不能靠估算。我們?cè)陔姍C(jī)不帶動(dòng)負(fù)載的情況下用一段正弦速度指令掃描記錄跟蹤誤差曲線從中提取出靜摩擦和庫(kù)侖摩擦的數(shù)值。第三個(gè)是母線電壓跌落。大電流加速時(shí)母線電壓會(huì)跌落幅度過(guò)大會(huì)影響電流環(huán)調(diào)節(jié)能力。軟件里加了母線電壓前饋補(bǔ)償根據(jù)當(dāng)前母線電壓實(shí)時(shí)修正占空比輸出整體穩(wěn)定性明顯改善。補(bǔ)償?shù)脑硎荢VPWM 輸出的占空比相對(duì)于母線電壓的比例是固定的如果母線電壓跌落 10%同一占空比下輸出的實(shí)際電壓就少了 10%電流環(huán)的增益會(huì)跟著變化。所以采樣母線電壓實(shí)時(shí)修正占空比可以抵消這個(gè)效應(yīng)。5.3 環(huán)境適應(yīng)性驗(yàn)證既然是面向高可靠工作場(chǎng)景的設(shè)計(jì)環(huán)境適應(yīng)性驗(yàn)證必須做。我們?cè)?-20℃ 和 70℃ 兩個(gè)極端溫度下做了跑機(jī)測(cè)試。低溫下的主要問(wèn)題是編碼器信號(hào)邊沿變緩、MOSFET 導(dǎo)通電阻變大。應(yīng)對(duì)措施是加大編碼器驅(qū)動(dòng)能力同時(shí)適當(dāng)降低低溫下的電流環(huán)帶寬避免過(guò)沖。需要注意的是溫度對(duì) MOS 管柵極閾值電壓的影響也很大。在 -20℃ 時(shí)同樣?xùn)艠O電壓下的導(dǎo)通電阻會(huì)變大如果死區(qū)時(shí)間設(shè)置不當(dāng)上下橋臂的開(kāi)關(guān)轉(zhuǎn)換時(shí)間變長(zhǎng)直通風(fēng)險(xiǎn)增加。所以我們?cè)诘蜏販y(cè)試時(shí)專(zhuān)門(mén)用電流探頭監(jiān)測(cè)了開(kāi)關(guān)波形確認(rèn)了死區(qū)裕量足夠。高溫下的主要問(wèn)題是功率管和驅(qū)動(dòng)芯片的溫升。實(shí)測(cè)在連續(xù) 10A 負(fù)載下功率管殼溫從 25℃ 環(huán)境到穩(wěn)定狀態(tài)上升約 40K加上環(huán)境溫度 70℃殼溫超過(guò) 110℃已經(jīng)接近 MOSFET 結(jié)溫裕量的一半。我們?cè)谏嵩O(shè)計(jì)上加了導(dǎo)熱墊和鋁合金外殼傳導(dǎo)散熱同時(shí)軟件里做了降額策略殼溫超過(guò) 85℃ 時(shí)把持續(xù)電流上限從 10A 降到 7A。降額策略雖然會(huì)犧牲峰值性能但換來(lái)了系統(tǒng)長(zhǎng)期運(yùn)行的可靠性。在工業(yè)現(xiàn)場(chǎng)一個(gè)驅(qū)動(dòng)器因?yàn)闊岜Wo(hù)頻繁停機(jī)比性能差一點(diǎn)更讓人崩潰。6. 常見(jiàn)問(wèn)題與排查實(shí)錄6.1 問(wèn)題速查表把這段時(shí)間遇到的高頻問(wèn)題整理成了一張速查表方便后續(xù)項(xiàng)目對(duì)號(hào)入座現(xiàn)象可能原因排查方向解決措施上電后電機(jī)抖動(dòng)并過(guò)流電角度未對(duì)齊或?qū)R錯(cuò)誤重新執(zhí)行電角度標(biāo)定流程做獨(dú)立校準(zhǔn)流程首次上電強(qiáng)制執(zhí)行電機(jī)嘯叫電流環(huán)增益過(guò)高或 PWM 頻率敏感示波器看相電流波形是否振蕩先降增益再加濾波必要時(shí)提高 PWM 頻率電流采樣值跳變采樣地受功率地干擾示波器看采樣點(diǎn)波形模擬地功率地單點(diǎn)連接加 RC 濾波編碼器偶發(fā)亂碼SPI 時(shí)序緊張或信號(hào)振鈴看 SPI 波形過(guò)沖和邊沿加串阻降低 SPI 速率至 2MHzCAN 偶發(fā)丟幀總線負(fù)載過(guò)高或終端電阻缺失查總線波形確認(rèn)終端電阻加 120Ω 終端電阻避免負(fù)載率過(guò)高大電流時(shí)母線電壓跌落母線電容容量不足量母線電壓瞬態(tài)波形增加母線電容加母線電壓前饋高溫降額后性能下降溫度保護(hù)策略過(guò)于保守查看溫度采樣值與降額曲線調(diào)整降額閾值優(yōu)化散熱路徑這個(gè)表里的每一條都是真實(shí)遇到過(guò)的不是從書(shū)里抄來(lái)的。比如編碼器偶發(fā)亂碼那條最初排查時(shí)我怎么都想不通因?yàn)閷?shí)驗(yàn)室臺(tái)架上完全正常。后來(lái)裝到機(jī)械臂整機(jī)上才開(kāi)始報(bào)錯(cuò)最后定位到是編碼器線束在關(guān)節(jié)運(yùn)動(dòng)時(shí)被反復(fù)彎折內(nèi)部屏蔽層破損引入了干擾。所以說(shuō)測(cè)試環(huán)境一定要貼近實(shí)際使用場(chǎng)景實(shí)驗(yàn)室驗(yàn)證通過(guò)不代表現(xiàn)場(chǎng)沒(méi)問(wèn)題。6.2 幾個(gè)典型的排查案例第一個(gè)案例是電流采樣在電機(jī)低速時(shí)出現(xiàn)“假過(guò)流”?,F(xiàn)象是電機(jī)極低速運(yùn)行時(shí)偶爾觸發(fā)過(guò)流保護(hù)但鉗表實(shí)測(cè)電流遠(yuǎn)低于保護(hù)閾值。排查發(fā)現(xiàn)三電阻采樣方案在 PWM 占空比極低時(shí)下橋臂導(dǎo)通時(shí)間太短電流采樣點(diǎn)落在了開(kāi)關(guān)噪聲區(qū)采到的值被噪聲放大了。解決方法是引入最小采樣窗口檢測(cè)當(dāng)下橋臂導(dǎo)通時(shí)間小于設(shè)定值時(shí)改用另外兩相的采樣值推算該相電流或者直接忽略本次采樣用上一周期的值。這是三電阻采樣方案的經(jīng)典問(wèn)題遇到類(lèi)似現(xiàn)象別先懷疑硬件先看采樣時(shí)機(jī)。第二個(gè)案例是位置模式下微小的“爬行”現(xiàn)象。恒速跟蹤測(cè)試中發(fā)現(xiàn)位置反饋出現(xiàn)周期性的微小臺(tái)階速度曲線對(duì)應(yīng)出現(xiàn)毛刺。排查發(fā)現(xiàn)不是編碼器問(wèn)題而是 CAN 總線周期性抖動(dòng)導(dǎo)致上位機(jī)指令到達(dá)時(shí)間不均勻位置環(huán)跟隨指令的“臺(tái)階”被放大了。我們后來(lái)在位置指令進(jìn)入控制環(huán)之前加了一級(jí)指令平滑濾波同時(shí)把 CAN 接收中斷的優(yōu)先級(jí)提到最高問(wèn)題基本消失。這里還要多說(shuō)一句CAN 周期抖動(dòng)在單機(jī)測(cè)試時(shí)通常不明顯因?yàn)樯衔粰C(jī)和控制板就在同一張桌子上總線負(fù)載很低。但到了整機(jī)系統(tǒng)里可能同時(shí)掛著七八個(gè)關(guān)節(jié)節(jié)點(diǎn)總線負(fù)載率一上來(lái)仲裁延遲和幀間隔抖動(dòng)都會(huì)變大。所以設(shè)計(jì)通信周期時(shí)不要卡著總線極限負(fù)載率去算留出 30% 以上的余量否則現(xiàn)場(chǎng)會(huì)出各種詭異問(wèn)題。第三個(gè)案例是高溫老化時(shí) MOSFET 熱失控。檢查發(fā)現(xiàn)是驅(qū)動(dòng)芯片的自舉電容容量偏小高占空比下自舉電壓不足導(dǎo)致上橋臂驅(qū)動(dòng)能力下降MOS 管進(jìn)入線性區(qū)工作發(fā)熱劇增。解決方法是加大自舉電容容量同時(shí)加了一路自舉欠壓檢測(cè)發(fā)現(xiàn)驅(qū)動(dòng)電壓異常時(shí)立即封鎖 PWM。這個(gè)案例提醒我自舉電容這種不起眼的元器件在高功率密度設(shè)計(jì)里往往會(huì)成為致命短板。后來(lái)我在設(shè)計(jì)檢查清單里加入了自舉電容的容值計(jì)算和電壓紋波驗(yàn)證避免類(lèi)似問(wèn)題再次出現(xiàn)。7. 項(xiàng)目心得與后續(xù)規(guī)劃7.1 幾點(diǎn)實(shí)操體會(huì)回看 RMCS V1.0 的整個(gè)開(kāi)發(fā)過(guò)程我最深的體會(huì)是用國(guó)產(chǎn)芯片做系統(tǒng)級(jí)方案難度不在芯片本身而在于把周邊環(huán)境做扎實(shí)。國(guó)產(chǎn)芯片的外設(shè)能力和算力已經(jīng)足夠支撐關(guān)節(jié)電機(jī)控制這類(lèi)實(shí)時(shí)性要求高的應(yīng)用。但在一些細(xì)節(jié)上——ADC 采樣時(shí)序配置、高級(jí)定時(shí)器的剎車(chē)功能、DMA 與中斷的協(xié)作——需要我們更仔細(xì)地讀數(shù)據(jù)手冊(cè)、做實(shí)驗(yàn)驗(yàn)證。數(shù)據(jù)手冊(cè)里那些看起來(lái)不起眼的注釋往往是前人踩過(guò)坑之后的經(jīng)驗(yàn)沉淀。還想強(qiáng)調(diào)的一點(diǎn)是關(guān)節(jié)電機(jī)控制是一個(gè)系統(tǒng)問(wèn)題不是單純調(diào)幾個(gè) PID 參數(shù)就能解決的。它需要硬件、軟件、結(jié)構(gòu)三個(gè)方向同時(shí)發(fā)力。硬件是采樣精度和功率級(jí)的執(zhí)行質(zhì)量軟件是算法和保護(hù)邏輯結(jié)構(gòu)是散熱和抗振。真正把系統(tǒng)級(jí)做扎實(shí)之后你會(huì)發(fā)現(xiàn)很多所謂的“玄學(xué)問(wèn)題”其實(shí)都有明確的物理根源。關(guān)于工程文檔我的體會(huì)也值得分享。V1.0 的硬件原理圖、軟件架構(gòu)和測(cè)試報(bào)告我們?nèi)甲隽税姹竟芾?。每次調(diào)試出現(xiàn)異常第一件事不是改代碼而是先記錄現(xiàn)象和現(xiàn)場(chǎng)數(shù)據(jù)。很多問(wèn)題在記錄過(guò)程中就能看出規(guī)律。比如前面提到的編碼器亂碼就是因?yàn)槲野压收习l(fā)生時(shí)間和機(jī)械臂的關(guān)節(jié)角度關(guān)聯(lián)起來(lái)才發(fā)現(xiàn)是線束彎折的問(wèn)題。沒(méi)有記錄習(xí)慣這種問(wèn)題靠回憶基本無(wú)解。7.2 V1.0 的下一步V1.0 之后下一階段的方向已經(jīng)明確一是把通信升級(jí)到同時(shí)支持 CAN 和 EtherCAT滿足更高實(shí)時(shí)性、更多軸數(shù)的場(chǎng)景二是把力控和柔順控制的接口做好——關(guān)節(jié)電機(jī)的下一個(gè)大趨勢(shì)是拖動(dòng)示教和碰撞檢測(cè)這對(duì)電流環(huán)的力矩精度要求會(huì)更高三是在現(xiàn)有基礎(chǔ)上做小批量試產(chǎn)驗(yàn)證制造一致性。國(guó)產(chǎn)芯片這條路線我判斷會(huì)越走越寬。尤其是在高端制造裝備領(lǐng)域系統(tǒng)級(jí)自研不再是可選項(xiàng)而是必修課。芯片只是起點(diǎn)圍繞芯片建立的整個(gè)系統(tǒng)能力才是最深的護(hù)城河。RMCS V1.0 只是一個(gè)開(kāi)始后面還有 V2.0、V3.0每一步都會(huì)比前一步走得更穩(wěn)。