1. 問題的提出
在設(shè)計(jì)機(jī)器人結(jié)構(gòu)時(shí),我們常常會用到舵機(jī),作為旭日x3派“首百嘗鮮”活動的試用者,本次實(shí)驗(yàn)我準(zhǔn)備用旭日x3派控制一臺舵機(jī),為了方便讀者了解實(shí)驗(yàn)的設(shè)計(jì)意圖,下面先提出幾個(gè)基本問題以供討論:
(1)什么是舵機(jī)?舵機(jī)是一種能夠按照指定角度轉(zhuǎn)動的電動執(zhí)行器。
(2)舵機(jī)的結(jié)構(gòu)?舵機(jī)一般由馬達(dá)、減速齒輪組、電位器和控制電路組成。
(3)怎樣控制舵機(jī)動作?給舵機(jī)提供一個(gè)特定的PWM信號,舵機(jī)就可以旋轉(zhuǎn)到指定的位置。
(4)怎樣用旭日x3派遠(yuǎn)程控制一臺舵機(jī)?旭日x3派本身有兩個(gè)PWM脈沖信號端口(32、33),受限于供電電流,一般不建議直接控制舵機(jī),所以我們需要借助MCU驅(qū)動舵機(jī)運(yùn)動,而旭日派的任務(wù)就是給MCU發(fā)送指令,通常我們想到的就是通過串口(旭日派UART3的14、15端口)發(fā)送指令,僅僅為了串口硬線連接而把旭日派與MCU“綁定”到一起,倒不如通過無線串口通訊方便實(shí)用,所以本文準(zhǔn)備探索通過無線串口通信控制一臺舵機(jī)。
(5)有沒有具體方案?如果采用普通舵機(jī),還要考慮MCU的編程,為了簡化起見,采用UART串行總線舵機(jī),只需要向舵機(jī)控制板發(fā)送指令,舵機(jī)就會按照指定角度旋轉(zhuǎn),這樣就大大簡化了編程。對于無線串口部分,我們采用無線發(fā)送接收模塊實(shí)現(xiàn)。
2. 總體方案
具體方案如下圖所示,筆記本電腦通過wifi(SSH無線網(wǎng)絡(luò)ip地址)連接并登陸旭日x3派,實(shí)現(xiàn)筆記本端到旭日派端的無線連接,旭日x3派與串口控制板采用無線串口收發(fā)器,實(shí)現(xiàn)旭日派與MCU控制板之間無線傳遞“信息”。
3. 控制編程
下面借鑒了官方python例程,并做了修改:
#!/usr/bin/env python3# coding = utf-8import sysimport osimport timeimport serialimport serial.tools.list_portsdef serialTest(): print("List of enabled UART:") os.system('ls /dev/tty[a-zA-Z]*') uart_dev= '/dev/ttyS3' #定義串口端口 baudrate = 115200 #波特率 val = 1500 #舵機(jī)初始位置(0位) incr = 100 #舵機(jī)轉(zhuǎn)位遞增(減)步長 try: ser = serial.Serial(uart_dev, int(baudrate), timeout=1) # 1s timeout except Exception as e: print("open serial failed!\n") print(ser) print("Starting demo now! Press CTRL+C to exit") while True: #舵機(jī)一秒轉(zhuǎn)位一次,到達(dá)限位后反轉(zhuǎn),往復(fù)轉(zhuǎn)動 if val >= 2500: #高限位 incr = -incr if val <= 0: #低限位 incr = -incr val += incr val1 = str(val) #轉(zhuǎn)換成字符串 if val <= 1000: test_data = '#000P'+'0'+val1+'T1000!' #當(dāng)val<1000時(shí),前位自動補(bǔ)0,即:若val=500,則字符串為“0500”,實(shí)際發(fā)送字符串為:#000P0500T1000! else: test_data = '#000P'+val1+'T1000!' write_num = ser.write(test_data.encode('UTF-8')) #發(fā)送到串口 print(test_data) time.sleep(1) ser.close() return 0if __name__ == '__main__': if serialTest() != 0: print("Serial test failed!") else: print("Serial test success!")
4. 運(yùn)行效果
在筆記本端運(yùn)行MobaXterm,運(yùn)行python程序,效果如圖所示:
5. 挖坑時(shí)間
請旭友們幫幫忙,我的這篇文章里有一處錯誤和一處疑惑,幫我解答一下唄!
(1)電機(jī)轉(zhuǎn)動到某個(gè)限位時(shí),會停幾秒,為什么?代碼有哪里需要改進(jìn)?
(2)筆記本不需要用串口線連接旭日x3派,開機(jī)直接用充電寶給旭日派插電,Ubuntu要做什么設(shè)置,MobaXterm又要采用什么連接方式?
本文轉(zhuǎn)自地平線開發(fā)者社區(qū)原作者:David988
原鏈接:https://developer.horizon.ai/forumDetail/106482341031035906
-
單片機(jī)
+關(guān)注
關(guān)注
6030文章
44499瀏覽量
632168
發(fā)布評論請先 登錄
相關(guān)推薦
評論