RoBoard魔人的機器人日誌

2011/10/7

[教學] 如何控制Bioloid AX-12馬達

上一個星期已經告訴過各位AX-12是如何傳輸的

那現在要控制其實已經差不遠了

首先必須要有一條com3轉接AX-12的轉接線
然後就可以開始撰寫程式部分了

首先要先將專案屬性先設定好

組態先選擇為Release (因為Debug會出現問題)

要把組態結構 -> C/C++ -> 一般 其中的 "其他Include目錄" 將他指定到RoBoIO-bin-v1.8-winxp\Include

然後組態結構 -> 連結器 -> 一般 中的 "其他程式庫目錄"  將他指定RoBoIO-bin-v1.8-winxp\Lib\VC2008

最後將組態結構 -> 連結器 -> 輸入 中的 "其他相依性" 內容輸入RoBoIO.lib

這樣設定好  就可以使用RoBoard的Lib了













首先程式碼

必須要有的是設定RB的型號
 roboio_SetRBVer(RB_100); 
Or
roboio_SetRBVer(RB_110);

之後就是做com3的設定了

首先至少要有2個array

一個是傳出 一個是傳入

將初值都設定好了之後

先做com3 Init的動作

然後設定Data Formate
com3_SetFormat(bytesize, stopbit, parity);
bytesize是每筆資料共有幾個bits
stopbit為停止位元
parity則是設定檢查碼的方式

接著設定Baud

Baud是用來讓RoBoard和馬達之間有一個共同的速度傳輸

否則收發速度不同則會導致資料錯亂

接著就可以開始設計一整個程式碼了

當中會用到的有
com3_ServoTRX(cmd, csize, buf, size);
cmd為傳出給馬達的資料陣列
csize為cmd的size
buf是用來儲存馬達回傳的值  通常若有錯誤訊息可以在這找到
size為buf的size

然後在程式的末端

記得打上com3_Close();

將com3關閉






#include "stdio.h"
#include "conio.h"
#include "roboard.h"

int main(void)
{
 unsigned char c;
 unsigned char cmd1[11] = {0xff, 0xff, 0x01, 0x07, 0x03, 0x1e, 0x00, 0x02, 0x00, 0x02, 0x00};
 unsigned char cmd2[11] = {0xff, 0xff, 0x03, 0x07, 0x03, 0x1e, 0x00, 0x02, 0x00, 0x02, 0x00};
 unsigned char buf[6] = {0};
 int num1, num2;

 num1 = num2 = 0x200;
 roboio_SetRBVer(RB_110);

 if(com3_Init(COM_HDUPLEX) == false)
 {
  printf("Init COM3 fail\n");
  return 1;
 }

 com3_SetFormat(COM_BYTESIZE8, COM_STOPBIT1, COM_NOPARITY);
 com3_SetBaud(COMBAUD_115200BPS);

 while((c = _getch()) != 27)
 {
  switch(c)
  {
  case 'a': case 'A':
   num1 += 0x05;
   break;
  case 'z': case 'Z':
   num1 -= 0x05;
   break;
  case 's': case 'S':
   num2 += 0x05;
   break;
  case 'x': case 'X':
   num2 -= 0x05;
   break;
  default:
   break;
  }
  
  switch(c)
  {
  case 'a': case 'A': case 'z': case 'Z':
   if(num1 < 0) num1 = 0x0000;
   if(num1 > 0x3ff) num1 = 0x3ff;
   cmd1[7] = (unsigned char) ((num1 >> 8) & 0xff);
   cmd1[6] = num1 & 0xff;
   cmd1[10] = ~(cmd1[2] + cmd1[3] + cmd1[4] + cmd1[5] + cmd1[6] + cmd1[7] + cmd1[8] + cmd1[9]);
   com3_ServoTRX(cmd1, 11, buf, 6);
   break;
  case 's': case 'S': case 'x': case 'X':
   if(num2 < 0) num2 = 0x0000;
   if(num2 > 0x3ff) num2 = 0x3ff;
   cmd2[7] = (unsigned char) ((num2 >> 8) & 0xff);
   cmd2[6] = num2 & 0xff;
   cmd2[10] = ~(cmd2[2] + cmd2[3] + cmd2[4] + cmd2[5] + cmd2[6] + cmd2[7] + cmd2[8] + cmd2[9]);
   com3_ServoTRX(cmd2, 11, buf, 6);
   break;
  default:
   cmd1[10] = ~(cmd1[2] + cmd1[3] + cmd1[4] + cmd1[5] + cmd1[6] + cmd1[7] + cmd1[8] + cmd1[9]);
   cmd2[10] = ~(cmd2[2] + cmd2[3] + cmd2[4] + cmd2[5] + cmd2[6] + cmd2[7] + cmd2[8] + cmd2[9]);
   com3_ServoTRX(cmd1, 11, buf, 6);
   com3_ServoTRX(cmd2, 11, buf, 6);
   break;
  }
 }

 com3_Close();
 return 0;
}
Share:

0 留言:

張貼留言

技術提供:Blogger.

追蹤者