張雨辰,孫琛,林奎,秦生輝
(北方工業大學,北京100000)
四旋翼機器人是一種靈巧的、電動的、可以垂直起降的,能夠遙控或自主飛行并執行任務的一種空中機器人。四旋翼機器人具有4個螺旋槳并呈十字形交叉結構,相隔的螺旋槳為一組,兩組的旋轉方向不同,相鄰兩個螺旋槳旋轉方向不同來抵消水平反扭力矩,保證自身不發生自旋。與其它空中機器人相比,其靈活性體現在只通過改變螺旋槳的速度就可以執行飛行任務。
本課題采用msp430g2553作為主要控制系統,通過使用C語言編寫程序,使用S-BUS協議實現對飛機的通信。選用msp430微控制器作為控制系統是因為該系列控制器已經廣泛用于家用電器和工業控制之中,而且價格便宜,易于購買和自主設計。微控制器系統降低了外圍硬件設備的投資,省去了遙控器等設備的麻煩,無論是日常生活還是工業生產也都會隨之更加的方便。
Futaba S-BUS通信協議是一種用來控制舵機的串口通信協議。最多可以包含16個舵機的數據,它是由經典的RS232串口通信協議發展過來的,邏輯取反。它的長度為25字節,每字節包括1位起始位0,8位數據位,1位奇偶校驗位(若8為數據位中有奇數個1,則奇偶校驗位取1,若有偶數個1則奇偶校驗位取0),2位結束位11。信號周期為14毫秒,其中前3毫秒是數據,后11毫秒是延時,置低電平。用來發送數據的3毫秒中,共發送25*(1+8+1+2)=300位數據,也就是說,每位數據(高或低電平)持續10微秒的時間。
該協議有25個字節。其中第一個字節是起始字節,然后是22個包含數據的字節,最后是一個標志字節和結束字節。起始字節中的8位數據位為11110000b,即完整起始字節為011110000011b。標志字節可根據不同飛控自行設定,用于承載除了舵機數據以外的數據。結束字節中的數據位為00000000b。
協議中有22個包含數據的字節,每個字節數據位為8位,22*8=16*11,也就是說每個舵機的數據長度為11位。實際傳輸時需要把16個舵機數據填入22個包含數據的字節中,填入方式為第一個字節的8位和第二個字節的前3位為第一舵機,其中第一字節8位中的最高位為舵機的最低位,第二字節的從最高位數第三位為舵機的最高位。第二個字節的后5位和第三個字節的前6位為第二舵機,以此類推。
程序主要由發送數據和接受數據2個模塊組成。流程如下所示:

圖1 發送數據

圖2 接收數據
MSP430單片機不能對字節進行操作,因此將待發送或接收數據的每一位依次和要使用的I/O口進行與操作,從而實現信號的發送與接收。具體做法是根據配置的波特率,使用時鐘定時改變管腳電平的高低,達到發送二進制數據的目的。因為S-BUS的邏輯電平是反的,所以高電平為0,低電平為1。
發送數據時,程序首先發送一個起始字節0xF0,然后按S-BUS的規則將每個通道拆分成各個數據字節(在本文使用的程序中通過改變IO口的電平模擬數據位的發送)。發送數據字節流程如下:

圖3 發送數據字節流程
程序首先發送一個起始位(高電平),然后將通道1的低8位放到第一個數據字節,將通道1的高3位放到第二個數據字節的低3位,以此類推計算出每個數據字節并發送。當每一個數據字節中的數據位發送完后,計算偶校驗位并發送,最后發送停止位(低電平)。之后程序繼續發送下一個數據字節,直到22個數據字節發送完成。
數據字節全部發送完成后,程序將發送標志字節flags,最后發送結束字節0x00。flags的內容為:flags=bit7=ch17=digital channel(0x80)

接收數據時,程序先收到一個起始字節,據此判斷新的一幀開始。然后將收到的22個數據字節解析出來。一種方法是,根據發送時的計算方式,反過來將每個字節通過左移或右移運算之后,相應位上按位與1,達到解析的目的。由于通道數較少,故可以用這樣一種較為取巧的方式。如果偶校驗位錯誤,則請求重新發送這一字節。之后將解析出的16個通道的數據傳遞給飛控,查看標志位的內容,最后接收到結束字節,一幀結束,等待接收下一幀。
以第一、第二個通道為例,當接收到第一個和第二個數據字節時,將第一個數據字節右移3位后,按位與00011111111,將結果存入buffer_1,第二個數據字節左移8位后,按位與11100000000,將結果存入buffer_2,再讓buffer_1按位與buffer_2即可得到第一個通道的數據。同理,將第二個數據字節右移6位后,按位與00000011111,將結果存入buffer_3,第三個數據字節左移2位后,按位與11111100000,將結果存入buffer_4,再讓buffer_3按位與buffer_4即可得到第二個通道的數據。
本文對S-BUS協議的環境設置以及具體的數據結構進行了說明,并給出了S-BUS在MSP430上的實現。本系統進一步完善的話,可以將解析通道的部分用一個更好的算法替代本文的移位算法??梢钥吹絊-BUS是一種簡單的四旋翼通信協議,同時16個通道也較好地滿足了四旋翼飛行器對信號傳輸的需求。