KRS-3301用サーボ ポジション指定プログラム
はじめに
※使用条件が極めて厳しい事が判明しております。こちら↓を推奨致します。KRS-3301用サーボ ポジション指定プログラム改|あるちざんラボ (note.com)
近藤科学さんのシリアルサーボのポジション指定は115200bpsにて3BYTEです。
時間にして0.26ms程度なので、MD-1などのラジコンサーボ仕様のモーターコントローラの制御間隔10~20msに対して充分に短い時間です。
ArduinoのソフトウェアシリアルにはパリティEVEN指定ができないので、オリジナルで送信専用ソフトウェアシリアルとICS仕様のサーボポジション指定のプログラムを作る事を思いつきました。
KRS-3301が、この記事で”Option Flags”の”シリアル専用”、”スレーブ”に設定されているのが前提です。
https://note.com/electric_mecha60/n/naa3d23d00cbe
KRS-3301用
digitalWrite()で信号レベルを、delayMicroseconds()で時間を制御してシリアル通信を確立します。
ハードウェアシリアルでの通信をオシロスコープにて観測し、delayMicroseconds()の時間調整を詰めます。
最後にKRS-3301を接続して長時間ランニングさせて、ポジション指定に失敗しないことを確認しました。
手持ちはKRS-3301のみて、他のサーボモーターでの確認ができていないので ”KRS-3301用” としました。
プログラム
オシロスコープでの波形観測では、ハードウェアシリアルの1bitの長さが全くブレがないのに対して、ソフトウェアシリアルはブレがあります。
ポジション指定のミスが許されないアプリケーションはハードウェアシリアルを使用しましょう!
ソースリストのICS_TX()は、IDとポジションを指定した時のICS仕様データを生成する関数です。
SoftSerial_TX()は115200bps、スタートビット1bit、データ8bit、パリティEVEN、ストップビット1bitのソフトウェアシリアル送信関数です。
※マイコンの性能と標準関数の処理速度に依存するのでATmega328 16MHz専用です。
いつもサポートありがとうございます!いただいたサポートは新しい記事の糧となります。 製作記事は部品購入が必要ですので大変助かります!