胡天林,李繼芳,羅錦才,謝路生,陳志偉
(廈門大學 航空航天學院,福建 廈門 361005)
廈門大學自2004 年秋季開始推行第三學期制,鼓勵理工科專業(yè)在五周的集中時段內,開展通識類實踐課程。移動機器人實訓課程為其中內容之一,定位是讓學生系統(tǒng)地了解移動機器人的基礎知識。對應的實訓平臺涉及電源、傳感器、電機驅動、編程語言、控制算法等方面,開放性好,具有豐富的軟硬件接口。學生可以通過工程儀表進行電信號的測量,驗證控制效果,從而實現(xiàn)知行合一。平臺強調“系統(tǒng)”意識,刻意降低了編程語言可能導致的門檻[1]。采用開源的Arduino 作為控制平臺[2],學生可以在各種開源社區(qū)分享與交流創(chuàng)意。
移動機器人實訓平臺的系統(tǒng)構成如圖1 所示。主控系統(tǒng)是Arduino UNO,芯片采用Mega328P,其數(shù)字I/O 有0—13 等14 路通道,模擬I/O 有A0—A5等 6 路通道。傳感器包括編碼器、紅外光電、超聲波、攝像頭、慣性傳感器MPU6050 等。人機交互通過按鍵、OLED 顯示屏等實現(xiàn)。由于Arduino UNO的管腳資源有限,在方案設計時將按鍵與電阻串聯(lián),再將多個按鍵電阻組合進行并聯(lián),由模擬I/O 獲得各按鍵所對應的模擬值,從而有效地擴展了鍵盤。舵機使機器人轉向,可以直接通過脈寬調制(PWM)信號控制。電機驅動器采用全橋集成電路A4950,其工作電壓可達40 V,峰值電流范圍是–3.5~3.5 A。電機采用直流有刷電機,額定電壓12 V、額定功率15 W、額定轉矩2.6 kg·cm,帶減速箱的空載轉速是330 r/min。系統(tǒng)配置了電源管理系統(tǒng),為各模塊提供穩(wěn)定的電源,并具有低壓、過流報警功能。在機械結構上,機器人底盤采用4 輪結構,包括后端2 個動力輪和前端2 個可操縱輪[3],可操縱輪由舵機控制實現(xiàn)轉向。
圖1 實訓平臺系統(tǒng)框圖
系統(tǒng)由18650 型鋰離子電池供電。每節(jié)電池的標稱電壓值是3.7 V,將3 節(jié)電池串聯(lián),總電壓范圍為10.5~12 V,串聯(lián)后的電壓可直接提供給電機驅動器。電池的電壓會因負載的變化而波動,也會隨著使用而降低。但控制芯片等的電源要求穩(wěn)定可靠,因此要進行直流-直流(DC-DC)轉換。在圖 2 中,通過LM2596-ADJ 實現(xiàn)電池電壓到6 V 的DC-DC 轉換[4-7]。LM2596-ADJ 是開關式電壓調節(jié)器。當LM2596-ADJ(以下稱U2)的內部開關管導通時,工作電壓(圖2中的BAT_12V)由腳1 通過導通的開關管,從腳2 給電感H2 與電容C8 充電,也給負載供電。此時,H2 和C8儲能,D2 截止。當U2 內部開關管截止時,腳2 不再輸出,但電感的磁場能會轉換成電能,H2 維持負載的電流,再經過D2 形成回路,此時D2 是導通的;在 H2 放電有電流回路的同時,C8 也在放電。負載和電容的電位將略下降,經過R10 和R11 的分壓后,經U2 的腳4 反饋,與基準電壓比較。當?shù)陀诨鶞孰妷簳r,U2 內部開關管再次導通,開始下一個循環(huán)。在電路中設計有T3 測試點,供調試觀測用。
圖2 DC-DC 6 V 電路原理
根據(jù)LM2596-ADJ 的手冊,圖2 中的Vout與R10、R11的關系如式(1)所示。VREF為1.23 V。因此只要調節(jié)電位器R10,便可以得到6 V 的工作電源。
小型移動機器人多采用直流有刷電機或無刷電機。有刷電機的磁極不動、線圈旋轉。有刷電機要持續(xù)轉動,需要線圈電流及時換相,而這是由跟隨電機轉動的換相器與電刷的接觸切換來完成的。
電動機轉速n的表達式[8]為
式中:n為轉速,單位為r/min;U為電樞端電壓,單位為V;I為電樞電流,單位為A;R為電樞電路總電阻,單位為Ω;Φ 為每極磁通量,單位為Wb;K為電動機結構參數(shù)。
根據(jù)式(2),改變U將改變電機的轉速。本教學平臺將基于此模型進行電機的調速控制。
PWM 指的是微處理器通過對脈沖寬度的控制,實現(xiàn)模擬量的輸出。圖3(a)是PWM 控制的單管電路模型,Us是電源電壓,UM是加載到電機上的等效電壓,Ui是控制信號。圖3(b)示意了Ui和UM的控制原理。t1和t2分別為控制信號高電平和低電平的時間,T是周期。圖3 是半橋電路,僅用于表述控制原理。實際的驅動器A4950 是全橋電路。
圖3 PWM 控制原理圖
式(3)中,α是占空比,體現(xiàn)了高電平時間占整個周期的時間比例??梢酝茖С鯱M的表達式如式(4)所示??梢钥闯觯斂刂菩盘柕闹芷诖_定時,調節(jié)占空比α即可改變控制電壓,從而實現(xiàn)調速。
一般來說,控制器的I/O 管腳僅產生控制信號,驅動功率有限,不足以直接驅動電機,因此常通過功率管或集成電路來驅動電機。本文選用全橋電路A4950[9]。A4950 的LSS 端可以選擇接電源地,也可以接大功率的小電阻,通過電流采樣可以實現(xiàn)功率監(jiān)測,也可以進一步做電流環(huán)控制。表1 是A4950 的控制邏輯真值表。其中,H 表示高電平;L 表示低電平;Z 表示高阻抗。IN1 和IN2 是A4950 的輸入;OUT1和OUT2 是A4950 的輸出,加載在電機的電源工作端。控制器產生的脈寬調制信號加載至IN1 和IN2 等2 個管腳,即可實現(xiàn)電機的方向和速度控制。
表1 A4950 控制邏輯真值表
在進行印制電路板(PCB)設計時,可以在A4950芯片的下方覆銅,并設置過孔以加快散熱。
實際的電機工作過程遠比節(jié)3 要復雜。如果要準確控速,就要實時采樣電機的轉速,與期望速度對比,通過閉環(huán)控制實時改變占空比。
調速首先要測速,大多使用編碼器。編碼器是一種將角位移或者角速度轉換成一連串數(shù)字脈沖電信號的旋轉式傳感器[10-12]。編碼器內部有碼盤。在碼盤圓板上等分地開通若干個小孔,兩邊分別裝配有光源和光敏元件。碼盤隨工作軸旋轉,光源發(fā)射的光或通過小孔或被擋住,光敏元件可檢測出對應信號,再經過整形放大,可以輸出脈沖信號。脈沖數(shù)反映了轉過的角度,脈沖的頻率表征了角速度。為了判斷轉向,一般會至少輸出兩組存在一定相位差的A 和B相信號。
圖4示意了增量式編碼器A、B相與正反轉的關系。在圖4(a)中,A 相滯后B 相,假設為正轉;圖4(b)中,A 相超前B 相,假設為反轉。正轉與反轉是相對的。
圖4 A、B 相時序與正反轉的對應關系
根據(jù)圖4 的時序圖,可以得到表2 的脈沖計數(shù)方式。
表2 A、B 相的信號與脈沖計數(shù)方式
Arduino 可通過函數(shù)attachPinChangeInterrupt(pin,Function,Mode) 實現(xiàn)計數(shù)。其中pin 指的是管腳編號;Function 是中斷函數(shù)的名稱;Mode 是中斷觸發(fā)模式,共有LOW(低電平觸發(fā))、CHANGE(電平變化即觸發(fā))、RISING(上升沿觸發(fā))、FALLING(下降沿觸發(fā))4 種方式。例如,attachPinChangeInterrupt(L_M_Encoder,Read_L_M_Encoder(),CHANGE),表示當管腳L_M_ Encoder 的電平發(fā)生變化(上升沿或者下降沿)時,調用Read_L_M_Encoder()函數(shù)。在Read_L_M_Encoder()的函數(shù)中,應根據(jù)表2,進一步判斷B 相的電平狀態(tài),由此決定脈沖計數(shù)的方式。脈沖計數(shù)值的符號反映了正反轉。
式(5)是數(shù)字型位置式PID 算法。該算法在具體實現(xiàn)時需累加 ()e j,會占用較多的存儲單元,且不便于編寫程序。
將式(5)減去式(6),得到增量式PID 算式(7)。可以看出,該算法具有遞推使用、編程簡單、占用存儲少、計算快等優(yōu)點[13]。
比較式(7)和(5),可以發(fā)現(xiàn),增量式算法(式(7))中Kp的作用變成了微分,類似位置式算法(式(5))的Kd;增量式算法(式(7))中的Ki的作用是比例,類似位置式算法(式(5))的Kp。后面的分析中要注意。
根據(jù)式(7),可以建立關于PWM 占空比給定值的增量式公式。擬用PD 控制,代碼實現(xiàn)如圖5 所示。其中,Pwm_Value 是經PD 計算后的關于PWM 占空比的給定值;Error 和Last_Error 分別是關于速度的設定值與實際值的本次偏差和上次偏差;Speed_Kp 與Speed_Ki 是PID 算子。在程序的末尾,對PWM 占空比設定值作了限幅。通過定時器MsTimer2,以5 ms為周期,進行速度的采樣和PID 算法控制。為了評價控制效果,在下位機中,通過Serial.print()函數(shù)發(fā)送采樣的速度實際值。通過MATLAB 對數(shù)據(jù)做均值濾波處理,控制效果如圖6 所示。
圖5 PWM 占空比給定值增量公式的代碼實現(xiàn)
由圖6 中可以看出,當Kp=0 和Ki=3.0 時,響應一直在震蕩;加入微分抑制即將Kp調整為4.5,在2到3 個波后,響應基本穩(wěn)定在可接受的靜差內,穩(wěn)態(tài)誤差控制在5%內。
圖6 觀測PID 控制效果
舵機由減速器、輸出軸、電機、電位器、控制器、驅動器等組成。電機與減速器通過齒輪連接,輸出軸連接減速器與舵面負載??刂破魍ㄟ^安裝在輸出軸上的電位器反饋舵機的位置信號,形成舵機系統(tǒng)閉環(huán)。舵機是一種角度的位置伺服機構[14]。舵機的輸入信號一般是周期固定為20 ms 的PWM 信號,高電平時間為0.5~2.5 ms,即占空比為2.5%~12.5%,基本上線性對應了從0~180°的旋轉角度范圍。Arduino 提供了舵機系統(tǒng)函數(shù)attach(int pin,int min,int max)和write(int value)。前者函數(shù)主要用于設定控制舵機的信號管腳。參數(shù)pin 傳遞引腳編號,對于Arduino UNO,只能選擇9 或者10 號管腳;參數(shù)min 傳遞最小脈沖寬度;參數(shù)max 傳遞最大脈沖寬度。參數(shù)min 和max起限幅作用。該函數(shù)返回值是引腳編號,如果失敗則返回0。后者函數(shù)用于設置舵機的旋轉角度。圖7 是示波器對控制信號的測試波形,可以看出對應90°時,實測脈寬為1.50 ms,信號頻率是50 Hz。在實際使用中,由于舵機電位器的線性度可能不好或者比例電路有誤差,需要根據(jù)實際情況進行控制脈寬的調整。
圖7 示波器對控制信號的測試波形
本文設計了一種于Arduino 的移動機器人實訓平臺,包括電源、驅動、傳感器、編程語言、算法控制等各個基礎知識模塊。針對每一模塊都可以圍繞需求、方案、原理、實現(xiàn)、測試等開展教學?;谠撈脚_,可設計24 學時的基礎課程和48 學時的進階課程。教學課程內容全面,通過豐富的軟硬件接口,可靈活增加各種傳感器或者執(zhí)行器;教學方式有趣,有效地調動了學生的學習熱情。