機器人技術處于工業(yè) 4.0、人工智能和邊緣革命的前沿。讓我們看看如何創(chuàng)建 FPGA 控制的機器人手臂。

機器人技術與人工智能和機器學習一起處于工業(yè) 4.0 和邊緣革命的最前沿。
因此,我認為創(chuàng)建一個基礎機器人手臂項目會很有趣,我們可以回過頭來添加幾個功能,例如:

此示例將使用一個機器人手臂,該機器人手臂在 Zynq SoC 的控制六個伺服系統。可以使用簡單的軟件界面或使用兩個操縱桿進行直接控制。
我們需要做的第一件事是弄清楚如何控制伺服位置。伺服電機是最簡單的驅動電機之一,也是機器人技術的理想選擇,因為只要我們保持相同的驅動信號,它們就能保持相對位置。

那么伺服的驅動信號是什么呢?我們使用的同類伺服系統中的大多數都使用 60Hz PWM 波形。在 60Hz 波形的 16.66 ms 周期中,信號將在 0.5 ms 到 2.5 ms 之間為高電平。信號的持續(xù)時間將驅動伺服器在 0 到 180 度之間運動。
0.5 ms 脈沖驅動 0 度位置,而 2.5 ms 脈沖將驅動 180 度位置。因此,可以通過將信號驅動為 1.5 ms 脈沖來維持 90 度。
因此,增加或減少脈沖13.9 us寬度會使舵機移動 1 度。

接下來要解決的是如何生成驅動信號,PWM 擴展板(上圖)使用四個 8 位寄存器來驅動每個 PWM 信號。
on 寄存器定義信號變高的計數,off 寄存器定義信號變低的計數。
因此,我們可以將開啟時間設置為 0,然后定義關閉信號的計數,以獲得所需的信號寬度。

一旦完成了PL設計,我們就可以構建設計并將其導出到軟件。
我們將在軟件中開發(fā)大部分應用程序。由于我們希望在多種模式下使用它,并在將來進行升級時使用它,因此我們需要一種模塊化方法。
因此,為每個關節(jié)開發(fā)了一個可以根據需要調用和使用的函數。每個關節(jié)都能夠接收無符號的 8 位值,然后將該 8 位值與 90 度 (1.5 ms) 脈沖寬度相加或相減,以獲得所需的角度。
我這樣做有幾個原因:
因此,我們需要確保操縱桿和手臂之間的運動對齊。
兩個操縱桿中,第一個連接到 JA,第二個連接到 JB(JA和JB是PMOD接口,就是普通的GPIO)。
JA 當沿 X 方向移動時,將向前或向后移動手臂;當沿 Y 方向移動時,它將上下移動手臂。


JB 在 X 方向移動時會旋轉手腕,在 Y 方向移動時會上下移動手腕。


每個移動函數的代碼都非常相似,并且可以在后面提供的代碼找到,但是,下面提供了向上向下函數以供參考
void?up_dwn(u8?YData){
?SendBuffer[0]?=?0x0A;
?SendBuffer[1]?=?0x00;
?XIic_Send(iic.BaseAddress,IIC_SLAVE_ADDR,(u8?*)&SendBuffer,?sizeof(SendBuffer),XIIC_STOP);
?SendBuffer[0]?=?0x0B;
?SendBuffer[1]?=?0x00;
?XIic_Send(iic.BaseAddress,IIC_SLAVE_ADDR,(u8?*)&SendBuffer,?sizeof(SendBuffer),XIIC_STOP);
?SendBuffer[0]?=?0x0C;
?u16?signal;
?if(?YData?128?){
??signal?=?122?+?(YData?*?1.91);
?}
?else?if?(YData?==?128){
??signal?=?369;
?}
?else{
??signal?=?369?+?((YData?-?128)?*?1.91);
?}
?u8?cent_l_off,?cent_h_off;
?cent_l_off?=?(u8)signal;
?cent_h_off?=?(u8)?(signal>>8);
?SendBuffer[1]?=?cent_l_off;
?XIic_Send(iic.BaseAddress,IIC_SLAVE_ADDR,(u8?*)&SendBuffer,?sizeof(SendBuffer),XIIC_STOP);
?SendBuffer[0]?=?0x0D;
?SendBuffer[1]?=?cent_h_off;
?XIic_Send(iic.BaseAddress,IIC_SLAVE_ADDR,(u8?*)&SendBuffer,?sizeof(SendBuffer),XIIC_STOP);
?}?
軟件應用程序結構的其余部分是:
當然,如果我們希望在命令中進行硬編碼來執(zhí)行重復任務,我們也可以。
一旦 Vivado 構建和初始軟件可用,下一步就是確保軟件能夠正確移動伺服系統。
當移動操縱桿時,可以使用示波器測量 PWM 信號。
隨著操縱桿的移動,脈沖寬度逐漸從 0.5 ms 變?yōu)?2.5 ms。

!! https://github.com/ATaylorCEngFIET/Hackster
!! https://github.com/ATaylorCEngFIET/Hackster/tree/master/Hexapod_servo
往期精選?
?
?

FPGA技術江湖廣發(fā)江湖帖
無廣告純凈模式,給技術交流一片凈土,從初學小白到行業(yè)精英業(yè)界大佬等,從軍工領域到民用企業(yè)等,從通信、圖像處理到人工智能等各個方向應有盡有,QQ微信雙選,FPGA技術江湖打造最純凈最專業(yè)的技術交流學習平臺。
FPGA技術江湖微信交流群

加群主微信,備注姓名+學校/公司+專業(yè)/崗位進群
FPGA技術江湖QQ交流群

備注姓名+學校/公司+專業(yè)/崗位進群
