GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
近藤科学のICSシリアルサーボの制御ができました。
・使用サーボ: 近藤科学 KRS-3301 ICS・ボーレート: 115200・接続ポート: Serial1 (1線UART設定)・ID: あらかじめICS USB Adapterで設定
去年のルネサスナイト11で発表した自作ライブラリに、1線UART設定のための1行を追加したのみです。
#ifdef GRROSE serial->direction(HALFDUPLEX);#endif
https://github.com/lipoyang/ICSlib
近藤科学からもArduino用ライブラリが公開されていますが、おそらく同様の変更で対応できるかと思います。
情報ありがとうございます。なんか動かないなと思ってましたが、
Serial1.begin(115200, SERIAL_8E1);
ですよね。スケッチサンプルに書いてなかったので、Serial1やSerial2ではライブラリ側で勝手にやってくれるのかなと思ってしまいました。
ちなみに、625000bpsや1.25Mbpsでは動かないですよね。
PicoScopeの安いオシロで、ボーレートvs波形を見てみました。1.25Mbpsまでは行けそうですが、3Mbpsは誤差がでかいためチューニングが必要そうです。3万円のB3Mが・・・。
波形は、PMOD側Serial5と、バッファをかんでいるSerial1です。プログラムは以下です。ボーレートのみ変更していってます。
#include <Arduino.h>void setup(){ Serial1.begin(3000000); Serial5.begin(3000000);}void loop(){ Serial1.write(0x55); Serial5.write(0x55); delay(3);}
●Serial5 115200bps
●Serial1 115200bps
●Serial5 625kbps
●Serial1 625kbps
●Serial5 1250000
●Serial1 1250000
それほど誤差はなさそうだが、立ち上がりの遅さが目立ってきている。
●Serial5 3000000
3.8MHzぐらいになってしまっている。Serial1も同様
1.25Mbpsで受信もできるかどうか、FTDIのUSBシリアル変換でループさせて確認しましたが、受信も問題内容でした。
Serial(USB) → Serial1 (配線)→ FTDI
FTDI (配線)→ Serial1 → Serial(USB)
#include <Arduino.h>void setup(){ Serial.begin(9600); Serial1.begin(1250000);}void loop(){ if(Serial1.available()){ Serial.write(Serial1.read()); } if(Serial.available()){ Serial1.write(Serial.read()); }}
近藤科学ICS USB Adapterの代替
サーボのID書換はICS USB Adapterが必要ですが、これをGR-ROSEにやらせてみました。
[動作確認の内容]
・PC側ソフトウェア:KXR ICS Manager
・使用サーボ: 近藤科学 KRS-3301 ICS
・ボーレート: 115200
・接続ポート: Serial1 (1線UART設定)
[スケッチ]
// IcsAdapter // GR-ROSEに近藤科学ICS USB Adapterの代わりをさせる// Serialで受信したデータをSerial1に出力し、// Serial1で受信したデータをSerialに出力// 2018/09/19 ICSサーボのID書換えが出来ることを確認済// 参考:japan.renesasrulz.com/.../ics
/* GR-ROSE Sketch template V0.01 */#include <Arduino.h>extern "C" {#include "FreeRTOS.h"#include "task.h"}
void loop2(void *pvParameters);
void setup() { // LEDs pinMode(PIN_LED0, OUTPUT); pinMode(PIN_LED1, OUTPUT);
// serial output to USB Serial.begin(115200);
//サーボモータの通信初期設定 Serial1.begin(115200, SERIAL_8E1); Serial1.direction(HALFDUPLEX);
// loop2 task creation for sensing xTaskCreate(loop2, "LOOP2", 512, NULL, 2, NULL);
}
void loop() { if(Serial.available()) { char c = Serial.read(); Serial1.write(c); } if(Serial1.available()) { char c = Serial1.read(); Serial.write(c); }}
void loop2(void *pvParameters) { while (1) { digitalWrite(PIN_LED1, !digitalRead(PIN_LED1)); vTaskDelay(500); }}
GR-ROSEで、近藤科学KXR-L2のサンプルモーション相当の動きができました。
ついでにスマホアプリからWiFiでコントロールできるようにしました。(ESP8266のファームは書き換えています。)
話題それますが、近藤科学さんで、安売りしているKRS-3301でも、シリアルサーボとして使えますか?
あと、ボーレートの設定は、最終的には、ライブラリ側で、差異を吸収するんでしょうか?