楊春雷,宋玉龍,張 騰,楊姍姍
(1.西北工業大學 電子信息學院,陜西 西安 710129;2.西北工業大學 計算機學院,陜西 西安 710129;3.西北工業大學 自動化學院,陜西 西安 710129)
移動機器人主要有輪式、履帶式、腿式、蛇形式、跳躍式和復合式。輪式機器人具有機構簡單、驅動和控制相對方便、機動靈活等優點,被大量應用于工業、農業、反恐防爆、家庭、空間探測等領域[1]。本系統用兩個直流電機驅動4個輪子,用差動的方式實現機器人各種直線、曲線運動。在各類機電系統中,直流電機具有良好的起動、制動和調速性能。最常用的直流調速技術是脈寬調制(Pulse Width Modulation,PWM)直流調速技術,它具有調速精度高、響應速度快、調速范圍寬和耗損低等特點[2]。本系統選用具有6個PWM通道的Atmega168單片機作為處理器,使用兩個定時器的快速PWM模式對電機進行速度控制。
Atmega168是ATMEL公司的一款高性能、低功耗的8位AVR微控制器[3],采用先進的精簡指令集架構。Atmega168有3個定時/計數器:8位的定時/計數器 0、16位的定時/計數器1以及8位的定時/計數器3。每個定時器有2個PWM通道,因此共有6個PWM通道,它們對應的PWM波輸出引腳分別為 PD6(OC0A)、PD5(OC0B)、PB1(OC1A)、PB2(OC1B)、PB3(OC2A)、PD3(OC2B)。
圖1所示為Atmega168最小系統的原理圖,包括電源電路、復位電路和晶振電路。圖中復位電路制造出兩個復位信號,其中信號用于單片機,RST信號用于ISP下載。
圖2所示為電機的雙H橋驅動電路原理圖,下面對重要部分作說明:
1)H橋電路 驅動電路采用功率 MOSFET(Metal-Oxide-Semiconductor Field Effect Transistor)構成 H 橋驅動電路。如圖2所示,當PWM1A為高電平、PWM1B為低電平時,NMOS管U9和PMOS管U7導通,另外兩個截止,電機反轉;當PWM1A為低電平、PWM1B為高電平時,NMOS管 U9和PMOS管U7截止,另外兩個導通,電機正轉。PWM2A和PWM2B同上。

圖1 Atmega168最小系統Fig.1 Atmega168 Minimum System
2)二極管D1~D8 因為電機線圈在電路開閉瞬間產生的反向電動勢通過會高過電源,這樣對MOSFET和電路會有很大的影響甚至燒毀電機,為避免這種情況發生,通常需要在MOSFET兩端并聯二極管[4]。

圖2 雙H橋驅動電路Fig.2 Dual H bridge drive circuit
為了使機器人有較大的驅動能力,必須在設計PCB時注意電機相關電源線的線寬,要有能力經過較大電流。然而由于MOS管引腳焊盤間距的限制,線寬不可能太大,為此采用焊盤布線。如圖3右邊H橋驅動電路部分所示,與MOS管源極、漏極相連的大電流線均是由焊盤拉制成的,可以通過在焊接時增加錫量來提升過大電流的能力。這樣制出的電路板可以承受10 A以上驅動電流。
1)開發環境構建
文中選用AVR Studio 4+WinAVR構建開發環境。AVR Studio 4是官方的開發環境,可使用匯編語言進行開發,使用其他語言需第三方軟件協助,集軟硬件仿真、調試、編程下載于一體。它是唯一的調試器。WinAVR是基于GCC編譯器的開源軟件,補充AVR Studio 4的不足,用于C語言開發。

圖3 驅動控制電路PCB圖[5]Fig.3 Drive and control circuit PCB
2)修改 Makefile
WinAVR基于GCC,因此就免不了使用makefile來實現自動編譯,打開一個已有的Makefile進行修改即可。將MCU改為Atmega168,F_CPU改為12MHz(電路板上使用晶振的頻率),SRC改為工程中C源文件的名字 (如SRC=file1.c file2.c file3.c)。另存為新的Makefile文件并放在工程文件夾中。
圖4所示為定時/計數器 0的控制寄存器 TCCR0A、TCCR0B 的位定義。其中 COM0A1、COM0A0、COM0B1、COM0B0為比較輸出模式(Compare Output Mode)位,決定了在計數器TCNT0與輸出比較寄存器OCR0A、OCR0B值相同時,引腳OC0A、OC0B 輸出電平的高低;WGM02、WGM01、WGM00 為波形發生模式(Waveform Generation Mode)位,決定定時/計數器 0 工作模式;CS02、CS01、CS00 為時鐘選擇 (Clock Select)位,決定定時/計數器0所用時鐘對主時鐘的分頻比;FOC0A、FOC0B為引腳OC0A、OC0B強制輸出,此處不用。
定時/計數器有 4種工作模式:普通模式、CTC(Clear Timer on Compare Match)模式、快速PWM模式、相位修正PWM模式。模式的設置方法如圖表1所示。本系統采用模式3,計數最大值為0xFF的快速PWM模式。

圖4 定時/計數器0控制寄存器Fig.4 Timer/Counter 0 Control Register

表1 定時/計數器0工作模式設置Tab.1 Timer/Counter 0 work mode settings
圖2中H橋驅動電路中,PWM1A若為高電平,PWM1B則必須為低電平,否則反之。故PWM1A與PWM1B波形應是互相反相的。PWM2A、PWM2B也是如此。對于快速PWM模式,通過比較輸出模式位的設置可以得到反轉和非反轉兩個正好互相反相的PWM波信號。

圖5 電機驅動程序流程Fig.5 Motor drive program flow
如圖5所示為電機驅動程序的流程。程序中使用了兩個 8位定時器(定時器 0和定時器 2),通過 PD6(OC0A)、PD5(OC0B)、PB3 (OC2A)、PD3 (OC2B)4個引腳輸出信號PWM1A、PWM1B、PWM2A和PWM2B。下面對流程中各個步驟進行詳細說明:
1)端口初始化:
將端口方向寄存器 DDRx(Data Direction Register)中對應引腳 PD6(OC0A)、PD5(OC0B)、PB3(OC2A)、PD3(OC2B)的比特位設為1,從而使這些引腳處于輸出模式。
2)定時器0、2初始化:
定時器0、2的設置方法是一樣的,下面僅對定時器0的設置作詳細說明:
①WGM02、WGM021、WGM00 取 011, 即快速 PWM 模式,計數器最大值為0xff。
②COM0A1、COM0A0取10,為非反轉模式,即當計數器TCNT0的值與輸出比較寄存器OCR0A的值相同匹配時,OC0A引腳輸出低電平,當計數器TCNT0計數值溢出回到0時,OC0A引腳輸出高電平。
③COM0B1、COM0B0取11,為反轉模式,即當計數器TCNT0的值與輸出比較寄存器OCR0B的值相同匹配時,OC0B引腳輸出高電平,當計數器TCNT0計數值溢出回到0時,OC0B引腳輸出低電平。可以看出,當OCR0B的值與OCR0A設成一樣時,OC0B的輸出波形正好與OC0A的反相。
④時鐘選擇位CS02、CS01、CS00取001,則定時/計數器使用的時鐘頻率沒有經過主時鐘預分頻,即等于晶振主時鐘頻率。
⑤計數寄存器初值TCNT0設為0x00,則計數器從0加計數到255,溢出后又直接從0加計數到255,如此往復。
⑥輸出比較寄存器OCR0A=OCR0B=100,當TCNT0計數值等于100時,則引腳OC0A、OC0B輸出電平發生改變。此數值決定了直流電機的轉速,在整個機器人程序系統中,當由機器人的策略子程序給出合適的值。
3)死循環:
一般單片機程序都要主函數執行死循環,以避免程序執行到不可預知的地方。
選擇AVR Studio的菜單欄Project|Configuration Options即可打開工程設置,確保Create Hex File前的復選框被選中,然后編譯上述C程序,若無錯誤即可生成.hex文件用于下載。
將ISP下載線與單片機端和計算機端都連接好,打開一款AVR下載軟件,在下載之前要設置一下熔絲位。新的Atmega168單片機時鐘源選擇熔絲位是配置在 “校準的內部RC振蕩器”狀態的,改成“外部8 mHz以上石英晶振”狀態[6]。然后即可將.hex文件下載到單片機Flash中。
本文從硬件和軟件兩方面詳細講述了輪式機器人直流電機驅動板整個系統的開發原理和過程。其中,硬件部分介紹了驅動電路的設計原理圖,并給出了支持電機大電流、大功率運轉條件下PCB的畫法。軟件部分首先介紹了AVR單片機開發環境的構建以及新建工程所需的配置,然后詳述了用2個定時器的快速PWM模式產生4路PWM信號的方法,最后說明了ISP下載所需配置和下載方法。使用6節強力鎳氫電池,系統實際運行可達到15 A的驅動電流,達到預期目的。
[1]朱磊磊,陳軍.輪式移動機器人研究綜述[J].機床與液壓,2009,37(8):242-247.ZHU Lei-lei,CHEN Jun.Wheeled mobile robot research[J].Machine Tool&Hydraulics,2009,37(8):242-247.
[2]張立勛,沈錦華,路敦民,等.AVR單片機實現的直流電機PWM調速控制器[J].機械與電子,2004,4:29-32.ZHANG Li-xun, SHEN Jin-hua, Lu Dun-min, et al.Pulse width modulation speed controller of DC motor based on AVR Microcontroller[J].Machinery and Electronics,2004,4:29-32.
[3]Atmel Corporation.8-bit AVR Microcontroller with 8K Bytes In-System Programmable Flash:ATmega48、ATmega88、ATmega168[M].USA:Atmel Corporation,2004.
[4]陳萬米,張冰,朱明,等.智能足球機器人系統[M].北京:清華大學出版社,2009.
[5]談世哲.PROTEL DXP2004電路設計基礎與典型范例[M].北京:電子工業出版社,2007.
[6]江海波,王卓然,耿德根,等.深入淺出AVR—從Atmega48/88/168開始[M].北京:中國電力出版社,2008.