近藤科学のB3Mモータにmbedからコマンドを送信して、電流制御しています。
現在の電流値を見ようとデータの読み込みコマンドを送信するのですが、データが戻って来ず電流値を見ることができません。
対処法を教えてください。以下がデータ読み込み用関数の中身です。
C++
1short read_data(unsigned char ID, char addr, char length){ //ID:サーボID addr:メモリアドレス length:データ長さ(byte) 2 short get_data; 3 4 char data[7] = {}; 5 6 data[0] = 0x07; 7 data[1] = 0x03; 8 data[2] = 0x00; 9 data[3] = ID; 10 data[4] = addr; 11 data[5] = length; 12 data[6] = 0; 13 for(int i = 0; i < data[0]-1; i++) 14 data[6] += data[i]; 15 16 EnPin = 1; //データ送信 17 //BufferedSerial::write(data, 7); 18 for(int i = 0; i < 7; i++){ 19 Servo.putc(data[i]); 20 } 21 wait_us(600); 22 23 EnPin = 0; //データ受信 24 wait_us(1100); 25 char re[10] = {}; 26 for(int i = 0; i < 5+length; i++) 27 { 28 re[i] = Servo.getc(); 29 } 30 31 for(int i = 0; i < length; i++){ 32 get_data |= re[4+i] << (i*8); 33 } 34 35 return get_data; 36} 37
##mbedとRS485USBとのピン接続
mbedピン | RS485USBピン |
---|---|
Vout | Vcc |
GND | GND |
p13 | D |
p14 | R |
p12 | EN |
サーボは動かせてますか?
(READだけできないのか、何もできてないのか)
トルク制御でモータは動作しています。
ただデータの読み込み有りと無しでは多少発生トルクが異なっているように感じました。
readの部分でメインループが止まっており、ループが繰り返されていない状態です。
* データ読み込み用関数に実際どのような引数を与えて実行してますか
* 読めないのは電流値だけですか
サーボのIDが0、現在の電流値が保存されているアドレス0x48、データの長さが2バイトなので引数は(0x00, 0x48, 0x02)としています。
試しに電流値の他にもデータの読み込みをできるか試しましたが、できませんでした。
Servo.getc();が何回走ってますか?
シリアルでpcに出すなりしてみてください
あとEnPinがちゃんと電圧動いてるかの確認とハードの回路図(接続図)をざっくりと
Servo.getc()の部分が動いていないようでした。
またEnPinでは電圧が加わっていたので、そこは問題がないかと思います。
回答3件
あなたの回答
tips
プレビュー