加入星計劃,您可以享受以下權益:

  • 創(chuàng)作內容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 一、常見的一些基本概念
    • 二、初探CW32的四足機器人控制
    • 三、展望與未來
  • 相關推薦
申請入駐 產業(yè)圖譜

【CW32開發(fā)】初探四足機器人

2024/09/23
939
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

機器人是一種自動執(zhí)行任務的機器,它可以模擬人類或其它生物的某些功能,并按照預設的程序或通過人工智能技術來執(zhí)行任務。

一、常見的一些基本概念

01定義:

機器人是具有感知、決策和執(zhí)行功能的自動化設備。它可以接受外部信息,進行處理,并據(jù)此執(zhí)行一定的動作。

02組成:

感知系統(tǒng):如攝像頭、傳感器等,用于接收外部信息。

控制系統(tǒng):如電腦、單片機等,用于處理信息和做出決策。

執(zhí)行系統(tǒng):如機械臂、驅動器等,用于執(zhí)行具體的動作。

03分類:

工業(yè)機器人:用于制造業(yè),如焊接、組裝、搬運等。

服務機器人:用于服務業(yè),如醫(yī)療、清潔、娛樂等。

特種機器人:用于特殊環(huán)境,如深海探測、空間探測等。

04關鍵技術:

驅動技術:包括電動、液壓、氣動等驅動方式。

感知技術:包括視覺、觸覺、聽覺等多種感知方式。

導航與定位技術:如GPS、激光導航、慣性導航等。

05人工智能:

使機器人具備自主學習、推理和決策的能力。

06應用領域:

機器人廣泛應用于制造業(yè)、醫(yī)療、家政、軍事、農業(yè)、教育等多個領域。

二、初探CW32的四足機器人控制

(用于玩和學習)

本項目使用8自由度舵機控制的四足機器人。主要用于愛好者學習參考??蓪崿F(xiàn)基本控制姿態(tài):前進、左轉、右轉、打滑、伸展、站立、躺平、擺手。有興趣的朋友,也可以增加新步態(tài)控制。

01、?硬件組成

(1)主控原理圖

 

其中MCU核心板,選用CW32F030C8T6核心板。

主要使用CW32F030C8T6以下產品特性:

內核:ARM? Cortex?-M0+??--??最高主頻 64MHz

工作溫度:-40℃ 至 105℃;工作電壓:1.65V 至 5.5V

存儲容量

最大 64K 字節(jié) FLASH,數(shù)據(jù)保持 25 年 @85℃

最大 8K 字節(jié) RAM,支持奇偶校驗

128 字節(jié) OTP 存儲器

時鐘管理

4 ~ 32MHz 晶體振蕩器

32kHz 低速晶體振蕩器

內置 48MHz RC 振蕩器

內置 32kHz RC 振蕩器

內置 10kHz RC 振蕩器

內置 150kHz RC 振蕩器

內置 PLL 鎖相環(huán)

時鐘監(jiān)測系統(tǒng)

允許獨立關斷各外設時鐘

定時器

16位高級控制定時器,支持6路捕獲/比較通道和3對互補PWM輸出,死區(qū)時間和靈活的同步功能

四組 16 位通用定時器

三組 16 位基本定時器

窗口看門狗定時器

獨立看門狗定時器

通信接口

三路低功耗 UART,支持小數(shù)波特率

兩路 SPI 接口 12Mbit/s

兩路 I2C 接口 1Mbit/s

IR 調制器

(2)藍牙模塊

DX-BT04-E藍牙模塊:采用BK3432芯片,支持SPP V3.0+BLE V4.2藍牙協(xié)議。支持AT指令,用戶可根據(jù)需要更改串口波特率、設備名稱等參數(shù)。具有成本低、功耗低、接收靈敏高等優(yōu)點。

DX-BT04-E模塊與單片機連線?:

GND GND
5V 5V
TXD PA10
RXD PA9

藍牙APP安卓手機APP,可掃描下載。

IOS測試APP,請在蘋果商城下載DX-SMART。

使用時,打開手機藍牙助手應用DX-SMART,設置UUID為BT16模塊,搜索藍牙設備連接BT04-E設備。

正常通訊界面如下:

溫馨提示:使用其它藍牙模塊時,注意2個問題:

1. 波特率設置時,藍牙模塊需與單片機相符。

2. 如果搜索不到設備,或Service失敗時,需指定正確的UUID,方可通訊。

(3)舵機控制

舵機是運動控制的主要執(zhí)行機構。價格便宜,隨處可見。值得注意的是,就是因為便宜,堵轉過載時容易損壞。

本項目實驗時,也是隨機找了幾個舵機,沒有作區(qū)分使用。

SG90舵機目前在高檔遙控玩具,如航模、包括飛機模型、潛艇模型、遙控機器人中已經使用得比較普遍。

SG90舵機上有三根線,分別是GND(棕色線)、VCC(紅色線?接5V)和SIG(黃色線),也就是地線、電源線和信號線。

SG90舵機控制:??一般需要一個20ms 周期的時基脈沖,該脈沖的高電平部分一般為0.5ms~2.5ms 范圍內的角度控制脈沖部分對應0度-180度機械周期的調節(jié)范圍。以180 度角度伺服為例,那么對應的控制關系是這樣的:

0.5ms ---------- 0 度;

1.0ms ---------- 45 度;

1.5ms ---------- 90 度;

2.0ms ---------- 135 度;

2.5ms ---------- 180 度;

值得一提的是:控制精度。本實驗使用的舵機配套的塑料齒。淘寶各賣家沒有提供具體齒數(shù)。

作者認為,這個控制精度在玩具類應用上沒有特別高要求。但需要明白這個角度控制精度為360度/齒數(shù)。

(4)結構安裝

該項目使用8個舵機。編號定義分別為①~⑧。

安裝后的實物圖如下:

引腳定義如下:

在腳角安裝時,舵機的控制角度范圍需要測試并確定。以下圖為例,展示了①-④號舵機的角度限制范圍:

程序中需要對每個舵機的旋轉角度范圍做限制,才可輸出。否則,電機在旋轉時,受死角影響發(fā)生過載易產生損壞。

02、?軟件組成

(1)使用的外設資源

(一)CW32F030內部集成4 個通用定時器(GTIM),每個GTIM 完全獨立且功能完全相同,各包含一個16bit 自動重裝載計數(shù)器并由一個可編程預分頻器驅動。GTIM 支持定時器模式、計數(shù)器模式、觸發(fā)啟動模式和門控模式4 種基本工作模式,每組帶4 路獨立的捕獲/ 比較通道,可以測量輸入信號的脈沖寬度(輸入捕獲)或者產生輸出波形(輸出比較和PWM)。

項目中使用了通用定時器GTIM1GTIM2的PWM輸出功能。

(二)CW32F030的通用異步收發(fā)器(UART) 支持異步全雙工、同步半雙工和單線半雙工模式,支持硬件數(shù)據(jù)流控和多機通信;可編程數(shù)據(jù)幀結構;可以通過小數(shù)波特率發(fā)生器提供寬范圍的波特率選擇。UART 控制器工作在雙時鐘域下,允許在深度休眠模式下進行數(shù)據(jù)的接收,接收完成中斷可以喚醒MCU 回到運行模式。

項目中使用了串口UART3外設資源。

(2)主要實現(xiàn)代碼

主程序

int main(){       Board_Iint();
    USART_SendString(CW_UART3,"Power on!");        fuwei2();      while (1)    {                if(UART_Flag == 1)      {               if(RxDate == 'a')//站立          {             zhanli();          }                    if(RxDate == 'b')// 躺平          {             tangping();          }   
           if(RxDate == 'c')//擺手           {             baishou();           }          if(RxDate == 'd')//搖擺           {              yaobai();             Delay_ms(500);             yaobai();              Delay_ms(500);           }           if(RxDate == 'e')//左轉           {             zhanli();             Delay_ms(1000);             zhanli2();             Delay_ms(1000);             zuozhuan();             Delay_ms(1000);             zuozhuan();           }           if(RxDate == 'f')//打滑           {               dahua();              dahua();           }           if(RxDate == 'g')//前進           {               zhanli();              Delay_ms(200);              qianjin();              Delay_ms(200);              qianjin();              Delay_ms(200);              qianjin();           }           if(RxDate == 'h')//右轉           {              youzhuan();             youzhuan();             youzhuan();           }      UART_Flag=0;        }    }}

藍牙串口中斷:

void UART3_IRQHandler(void)//串口3中斷服務函數(shù){     if (USART_GetITStatus(CW_UART3, USART_IT_RC) != RESET)//如果接受到了消息    {        RxDate = USART_ReceiveData_8bit(CW_UART3);//將寄存器的數(shù)據(jù)轉存在TxRxBuffer        UART_Flag=1;        USART_SendData_8bit(CW_UART3, RxDate);//將收到的消息發(fā)回給串口                USART_ClearITPendingBit(CW_UART3, USART_IT_RC);    }}
 /*復位或躺平姿態(tài)*/void fuwei2 (void){  Servo_SetAngle(90);   Delay_ms(500);  Servo_SetAngle2(90);   Delay_ms(500);    Servo_SetAngle3(90);   Delay_ms(500);  Servo_SetAngle4(90);   Delay_ms(500);  Servo_SetAngle5(90);   Delay_ms(500);  Servo_SetAngle6(90);   Delay_ms(500);  Servo_SetAngle7(90);   Delay_ms(500);  Servo_SetAngle8(90);   Delay_ms(500);  }

舵機角度限制,并輸出控制。

void Servo_SetAngle(float Angle){    if(Angle<10)Angle=10;  if(Angle>135)Angle=135;    PWM_SetCompare1(Angle / 180 * 2000 + 500);}void Servo_SetAngle2(float Angle){    if(Angle<45)Angle=45;  if(Angle>170)Angle=170;  PWM_SetCompare2(Angle / 180 * 2000 + 500);}
void Servo_SetAngle3(float Angle){    if(Angle<45)Angle=45;  PWM_SetCompare3(Angle / 180 * 2000 + 500);}
void Servo_SetAngle4(float Angle){    if(Angle>135)Angle=135;  PWM_SetCompare4(Angle / 180 * 2000 + 500);}
void Servo_SetAngle5(float Angle){    if(Angle<50)Angle=50;  PWM_SetCompare5(Angle / 180 * 2000 + 500);}
void Servo_SetAngle6(float Angle){    if(Angle>130)Angle=130;  PWM_SetCompare6(Angle / 180 * 2000 + 500);}

void Servo_SetAngle7(float Angle){  Angle=180-Angle;    if(Angle>130)Angle=130;  PWM_SetCompare7(Angle / 180 * 2000 + 500);}
void Servo_SetAngle8(float Angle){  Angle=180-Angle;    if(Angle<50)Angle=50;  PWM_SetCompare8(Angle / 180 * 2000 + 500);}

通用定時器GTIM控制初始化。

void GTIM_GPIOInit(void){    GPIO_InitTypeDef GPIO_InitStruct;     __RCC_GPIOB_CLK_ENABLE();    __RCC_GPIOA_CLK_ENABLE();      GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;    GPIO_InitStruct.Pins = GPIO_PIN_0|GPIO_PIN_1;    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;    GPIO_Init(CW_GPIOB, &GPIO_InitStruct);    PB00_AFx_GTIM1CH3();    PB01_AFx_GTIM1CH4();       GPIO_InitStruct.Pins =   GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_6|GPIO_PIN_7;     GPIO_Init(CW_GPIOA, &GPIO_InitStruct);    PA00_AFx_GTIM2CH1();    PA01_AFx_GTIM2CH2();    PA02_AFx_GTIM2CH3();    PA03_AFx_GTIM2CH4();    PA06_AFx_GTIM1CH1();    PA07_AFx_GTIM1CH2();}
void g_tim_init(void){    GTIM_InitTypeDef GTIM_InitStruct ;            __RCC_GTIM1_CLK_ENABLE();   // GTIM1時鐘使能    __RCC_GTIM2_CLK_ENABLE();   // GTIM1時鐘使能    GTIM_GPIOInit();         GTIM_InitStruct.Mode = GTIM_MODE_TIME;      GTIM_InitStruct.OneShotMode = GTIM_COUNT_CONTINUE;    GTIM_InitStruct.Prescaler =GTIM_PRESCALER_DIV64;              GTIM_InitStruct.ReloadValue =20000;   //20MS       GTIM_InitStruct.ToggleOutState = DISABLE;    GTIM_TimeBaseInit(CW_GTIM1, &GTIM_InitStruct);    GTIM_TimeBaseInit(CW_GTIM2, &GTIM_InitStruct);      GTIM_OCInit(CW_GTIM1, GTIM_CHANNEL1, GTIM_OC_OUTPUT_PWM_LOW);    GTIM_OCInit(CW_GTIM1, GTIM_CHANNEL2, GTIM_OC_OUTPUT_PWM_LOW);    GTIM_OCInit(CW_GTIM1, GTIM_CHANNEL3, GTIM_OC_OUTPUT_PWM_LOW);    GTIM_OCInit(CW_GTIM1, GTIM_CHANNEL4, GTIM_OC_OUTPUT_PWM_LOW);    GTIM_OCInit(CW_GTIM2, GTIM_CHANNEL1, GTIM_OC_OUTPUT_PWM_LOW);    GTIM_OCInit(CW_GTIM2, GTIM_CHANNEL2, GTIM_OC_OUTPUT_PWM_LOW);    GTIM_OCInit(CW_GTIM2, GTIM_CHANNEL3, GTIM_OC_OUTPUT_PWM_LOW);    GTIM_OCInit(CW_GTIM2, GTIM_CHANNEL4, GTIM_OC_OUTPUT_PWM_LOW);         GTIM_Cmd(CW_GTIM1, ENABLE);    GTIM_Cmd(CW_GTIM2, ENABLE);    }

三、展望與未來

由于該項目為初探控機器人控制,使用的是現(xiàn)有硬件資源進行組裝調試。后期有機會可以設計一款小巧控制板,裝入結構中心,形成獨立機器人。

另外,姿態(tài)控制算法在本實驗中并未提及,數(shù)學基礎較好的愛好者可作深入研究。

本次項目為作者初次嘗試,如有不足之處,歡迎批評指證。

相關推薦

登錄即可解鎖
  • 海量技術文章
  • 設計資源下載
  • 產業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

以開放、共享、互助為理念,致力于構建武漢芯源半導體CW32系列MCU生態(tài)社區(qū)。無論是嵌入式MCU小自還是想要攻破技術難題的工程師,亦或是需求解決方案的產品經理都可在CW32生態(tài)社區(qū)汲取營養(yǎng)、共同成長。

B站