RPU-10でサーボ通信(ロングパケット)の速度

作成日: 2012年10月28日 | 投稿者:みっちー

シリーズ化しつつありますが、20個サーボへのロングパケットも実測で速度を測ってみました。

//----------------------------------------------------------------------------------------
// 20個サーボの制御
// サーボの通信速度をLEDのポートを利用して実測します。
//
// 環境 RPU-10、GDL V2.00
// 説明 ビルドされた本プログラムをRPU-10へ転送後、パソコン側で「SIMPLE TERM」(GDLに
// 同梱)などを使って通信速度115200bpsで通信ポートを開いてください。その後RPU-10
// を再起動するとプログラムがスタートします。
//
// AUTHORED BY Micchy@DreamDrive!!
//----------------------------------------------------------------------------------------
#include <avr/pgmspace.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include <stdio.h>
#include <avr/boot.h>
#include <avr/wdt.h>
#include <sv.h>
#include <rs.h>
#include <../ATmega128/rs0_printf_P.c> // URART0用フォーマット(ROM用)
// 定数定義
#define SERVO_MAX 20 // 制御対象サーボ数
// 通信バッファ
unsigned char GRaucTBuff[256]; // RS485通信用バッファ
SRV_PACKET GOAL_svPacket[SERVO_MAX+1]; // サーボの目標値(G-ROBOTSのIDが1始まりなので+1
//
// サーボ動作管理
// 要求された時間、角度により、分割した角度指示をサーボに行います。
//
void sendAngles( void ){
 unsigned char ucID;
 SRV_PACKET asvrPacket[SERVO_MAX];

 for( ucID = 0; ucID < SERVO_MAX; ucID++ ){
 asvrPacket[ucID].id = ucID + 1;
 asvrPacket[ucID].angle =GOAL_svPacket[ucID+1].angle;
 asvrPacket[ucID].time = 0;
 }
 SV_TxPacket( GRaucTBuff, 0, 0x00, 0x1E, 5, 20, (unsigned char*)asvrPacket, 100 );
}
//
// メインルーチン
//
int main( void ){
 unsigned char ucID; // サーボID
RPU_InitConsole( br115200 ); // RPU-10ライブラリの初期化
 SV_Init( br115200 ); // サーボ制御ライブラリの初期化
 sei(); // 割り込み処理開始
// 1秒待つ(よく知らないけど必要らしい)
 RPU_ResetTimerCounter();
 while( RPU_GetTimerCounter10() < 100 );
// 起動メッセージの表示
 rs0_puts_P( PSTR( "サーボ20個通信テストn" ));
// サーボトルクオン
 for( ucID = 0; ucID < SERVO_MAX; ucID++ ){
 SV_TorqueOnOff( GRaucTBuff, ucID+1, 1 );
 }
// 全サーボホームポジション(0)設定
 for( ucID = 0; ucID < SERVO_MAX; ucID++ ){
 GOAL_svPacket[ucID+1].angle=0;
 }

 while( 1 ){

 LED_ON; //LED点灯
 sendAngles(); //角度送信
LED_OFF; //LED消灯
 sendAngles(); //角度送信
 }
return 1;
}

IMG_1977

こちらは10msec弱といったところでしょうか。
115200bpsで(100+α)byte送っているので、 かなりアバウトですがだいたい計算は合いますね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

アーカイブ

広告

Top