RaspberryPi3+MONOSTICK から TWE-LITE を操作する : Python による出力制御


今回 TWELITE-DIP を制御するプログラムは、Python3を使います。
正確には「Python3」とシリアル通信ライブラリの「pySerial」を使って「TWELITE-DIP」をコントロールします。

【 基本テスト 】
まずRasPi3のUSBに挿しているMONOSTICKからデータを読取るプログラムを作りデータ確認をしてみます。
プログラムは以下の通りです。(拡大可)


TWELITE-DIPからのデータ受信が出来ました。(生データです。) :データ受信コマンド・フォーマットは前頁を参照してください。
実際使用にあたっては、このデータから必要部分を切り出す必要があります。


【 出力制御プログラム 】
「Python3」で「データ送信コマンド」の( 0x80 )を使って、「デジタル出力」「アナログ出力」「PWM出力」を行います。


モータードライブIC:DRV-8835(PWM制御) 今回はIN/INモードでA,Bはパラ接続とします。


上記IC制御モード(INI/IN制御)



現状検討回路図が下記で、これに近い形でテスト用基板を製作(以前の回路基板を改良)し、RasPi3から制御していきます。(拡大可)



前頁で紹介している様にHOゲージ用新規購入動力車のモーターは、DC5Vで最大回転するので、上記右下のレギュレーター(モーター用10V)基板は、
中央下にある3.3Vレギュレーター基板(DC5Vに切替可能)に変更する為、TPS63000を2枚使う事となります。
従ってサイズの小型化に貢献します。


【 プログラム開発用機材 】

<全景写真>
一番下がRasPi+MONOSTICK、最上段がターゲットTWELITE(LED4個、モーター1個:上記回路図の状態)、センターがTWELITEの予備(2個)


<ターゲットTWELITE>


<親機のRasPi+MONOSTICK>



【 TEST_TWELITEの個体識別番号調査 】
TWELITEには、メーカーが振りあてた個体識別番号があります。32ビットで表現されるので4億2千万個の識別が可能で、更に論理デバイスIDも設定できる
ので、1兆以上の端末の識別が可能で、事実上の無限台数の管理が可能です。
さて今回テスト用として使用するTWELITEの個体識別番号を調べてみます。

このページの「基本テスト」で使用したTWELITEの個体識別番号は「810C3D92」でした。
基本テストで使用したTWELITEに加えて、今回のターゲットTWELITEでテストしてみました。:データ受信コマンド・フォーマットは前頁を参照ください。


結果(Shell)の様に当初のTWELITEの隙間で、ターゲットのTWELITEの個別識別番号が捉えられています。「8102E53F」です。
ターゲットTWELITEの読取り回数が遅いのは、モーターを常に回す等の仕事をしている関係と思われます。


【 基本的な出力制御プログラム 】
TWELITEで送受信する場合、TWELITEのデータフォーマットを作成する基本部分を作成しておく必要があります。(Chksum計算部も含む)
この基本的なデータフォーマットの上に送信データを組みえれたり、受信データはこのデータフォーマットから取り出すことになります。

下記サンプルには、ディジタル出力1番(LED接続)を「1:点灯」のダミーが入っています。ここを修正すれば色々テスト可能です。


例えば「DO1のLチカ」をさせる場合は下記の様になります。
48行以降を修正します。


次にアナログ出力として、モーター制御(PWM)を行います。
下記プログラムで基本的には、モータースピードがアップ・ダウンするのですが、実際は不規則な動きになります。
見てお分かりの様にウエイトが無いので高速にアップダウンしますが、送信時にはデータ送信コマンド・フォーマットを作ってから送信するので
時間を必要とします。したがって結果は間欠データでの動きとなりガクガクとした結果となりました。
アナログデータ数値の範囲は、0~100です。



PWM波形を送信コマンド数値と対比しましょう。
アナログ出力0<PWM0%>

アナログ出力30<PWM30%>

アナログ出力50<PWM50%>

アナログ出力70<PWM70%>

アナログ出力100<PWM100%>

画面からお分かりの通り、モーター端子電圧:3.3V、周期1ms(1kHz)のPWM波です。