google-site-verification: google3bd66dd162ef54c7.html
fc2ブログ

Arduinoでプラレールを動かす、走行性能を測定

◆まえがき
プラレールいじりも 前回の記事の速度のPID制御 で一段落したので、途中で取得したデーターを整理して特性などを再確認してみたいと思います。

プラレール
これは3両運転の状態です。

◆誘導電圧とモーター回転数の関係
モーターの通電を短時間止め、その間に回転子から発生する誘導電圧を測定することでモーターの回転数を推定しています。そのためには誘導電圧と回転数の関係を把握しておく必要があるので、実際に測定を行いました。結果は以下の通りです。

・誘導電圧に対するモーター回転数(グラフ-1)
誘導電圧に対するモーター回転数
誘導電圧の値をオシロで測定し、その時のモーターの回転数を 自作のストロボ回転計 で測定しました。モーターの回転数はギアボックスの後ろ側にモーターのシャフトが出ているので、そこに目印を貼り付けて測定しました。

グラフは僅かなオフセットがあるものの綺麗な直線になっていました。言わばタコジェネみたいなものなので当然です。

このグラフの傾きが電圧に対する回転数の感度になります。そこで、プログラムでは、

#define K1 37.83 // adc測定値からrpmの値に換算する定数。誘導電圧感度=7748rpm/1Vだったので、7748*5.0/1024=37.83

とやって、ADコンバーターの1LSBに相当する回転数(rpm)の換算係数(K1)の値として使用しています。

◆ラップタイム
12レールオーバルコースを使い、速度(rpm値)に対する周回のラップタイムを測定しました。Xにポストした測定の様子。
12レールオーバルコース:直線レール4本、曲線レール8本で構成した楕円形コースで一周の距離は 216 x ( 4 + 8 x π/4)= 2220.5mm


・設定回転数とラップタイム(グラフ-2)

設定rpmに対するオーバルコースラップタイム
可変抵抗で回転数(rpmの値)を設定して走行させた時のラップタイムです。2両と3両の状態で測定を行っていますが、グラフはほとんど一致していて速度に差は無かったことが判ります。速度をフィードバック制御しているのだから、こうでなくては困ります。

以上、大雑把に見るとうまく行っている感じですがもう少し詳しくデーターを見て行きます。

・回転数設定値と走行速度の関係
コース1周の距離は2220.5mmなのでグラフ-2のラップタイムから走行速度を計算すると以下のグラフになります。
表示回転数に対する速度実測値
直線なのですが、オフセットがあって少し上にズレています。

プログラムの中でADCの値(V0)に対し,以下の式で実際の速度の値を指定するようにしているのが影響となって現れたのだと思います。
 setVal = v0 * 0.17 + 10.0; // 制御可能な範囲になるように調整(制御パラメーターをシリアルプロッタで見て確認すると良い)

小さな値を指定してもモーターは回転しないので、この式にあるようなオフセットを入れたのだと記憶しています。でも、今になって考えると、余計なことはしない方が良かったかも知れません。

・設定値1rpm当たりの速度
回転数に対する1rpm当たりの速度
オフセットがあるので、rpmの値に対する感度は一定では無くなってしまいました。

◆まとめ
設定値(rpmの値)に対する実際の車両の運転スピードを詳しく調べてみました。2両と3両の違いではありますが、負荷が変わっても運転速度は影響を受けておらず、PID制御による速度フィードバックの効果が確認出来ました。

rpmの設定値に対する実際の速度の傾きが原点を通らないのが少し気になりますが、とりあえず実害は無いのでこのままにしておこうかと思います。

これで特性の測定も終わったので、一連のプラレールの速度制御の実験は一旦終了としたいと思います。回路をブレッドボードからプリント基板に移して小型化し、車体の中に収める作業が残っていますが、どうせやるならリモコン制御化なども同時にやってしまいたい気もします。そんなことで、もう少し考えてから進めたいと思います。

Arduino でプラレールを動かす、誘導電圧検出による速度のPID制御

◆まえがき
プラレールいじりの話の続きです。前回は単純なON/OFFとPWM制御を行い、Arduino からモーターパワーを調整する機能の動作確認を行いました。今回の記事ではこれを発展させ、モーターの電機子誘導電圧を測定することで回転速度を検出し、PID制御により指定した速度で走行できるようにしてみます。

・走行している様子
坂を登る
一定の速度になるようにパワーを自動調整しているので、急な坂でも平坦路と同じスピードで上ります。

◆回路図(クリックで別窓に拡大図を表示)
回路図
・前回よりかなり複雑なものになっています。

・モーターの駆動(Q3)に前回はバイポーラトランジスタ(2SA2042)を使ったのですが、電圧ロスが大きかったので P-MOS FET(2SJ334) に変更しました。

・Q3の変更に伴い、負のゲート駆動電圧が必要になったので、DCDCコンバーターの LXピンの電圧変化を利用したチャージポンプ方式(C54からC55までの回路)で-5Vを作っています。

・なお、モーターの制御に N-MOS FETを使ってでローサイドスイッチにすればゲート電圧は+5Vで済むのでこんな面倒なことしなくても済みます。ただ、その場合の誘導電圧は+1.5V側が基準になるため、その検出が厄介になります。

・LED1(赤色)は速度が設定値より速すぎ(+10%)の場合、LED2(黄色)は遅すぎ(-10%)の場合に点灯します。実際の運転状態では、この二つのLEDが間欠的に交互に点滅します。ちなみに、パワーや速度の値はリアルタイムでOLEDに表示しているのですが、移動する車体に付いているので値を読むのは大変です。その点、このLEDは制御の状態を反映して点滅するので、ある程度は運転状況が推定出来て便利です。

・全体
実験車両

・ブレッドボード
ブレッドボード
ぎっしりと部品が載っていてほぼ限界です。なお、最終的にはプリント基板にして車両の中に収める予定(たぶん)です。

◆プログラム
20240229_PlaRailConstSpeedControllerV50.ino (BOM付きUTF8)

PIDによるフィードバック制御でモーターのパワーを調整し一定速度を保つようになっています(CSモード)。なお、速度制御無しのパワー一定モード(CPモード)も有ります。
以前作った   ミニグラインダー用コントローラーのプログラムを流用し、LED点灯機能の追加と制御用の定数などを調整しています。

◆動かし方
車両の電源(兼ギア操作)スイッチをONにすると、開始画面を表示した後で運転の操作が可能になります。

可変抵抗を操作すると運転速度(モーター回転速度)を設定。
Run/Stop スイッチを押す毎に、運転/停止を切り替え。
CS/CPボタンを押毎に運転モードを定速(ConstantSpeed)/定パワー(Constant Power) に切り替えます。

詳しい画面や設定については、前記したミニグラインダーの記事を参照ください。

◆駆動波形
以前書いたミニグラインダーの記事と同じような波形ですが、プラレールの場合の波形を以下に示します。

・全体波形
駆動波形、全体
上の波形はタイミングインデックス信号(D13ピン)。下はモーター電圧(Q3のDrain)です。

40ms周期で約2msだけPWM出力をOFFにする期間を設けており、この間にモーターの誘導電圧の検出を行っています。

モーター電圧が1Vくらいしか無いのは、主にFETでのドロップが大きいためのようです。もっとON抵抗が低いFETに交換したいのですが、手持ちがありません。

・誘導電圧測定部拡大
駆動波形、拡大

誘導電圧検出期間の拡大図です。この波形では誘導電圧は0.25〜0.5の範囲で発生しています。

波形がばたついているのは、電圧測定期間の間に回転子の位置関係が変わるためだと思います。そこで、検出期間の間に高速で何度も測定を行い、結果を平均化することで変動の影響を出来るだけ抑えています。更に、ソフト側では過去8周期分の値の移動平均を求めることでアベレージングを行っています。

◆動いている様子
上り坂でも同じ速度で走行しています。

◆まとめ
以前作ったミニルーターの制御ソフトを少し修正するだけで出来たので、比較的簡単に作ることが出来ました。

単純にパワーを絞って低速運転すると、急な坂を登れなかったり、下り坂ではジェットコースターのように滑り落ちてしまってリアリティに欠ける動きになると思います。しかし、この記事のように速度のフィードバック制御をやっていればそのようなことは起きにくくなります。まあそうは言っても、動輪がスリップするような急坂はもちろん登れません。

ともかく、この制御は低速運転する車両に向いていると思います。この実験を行うために新幹線のプラレール(の中古)を買って来たのですが、新幹線ではなくて例えば登山電車のように、ゆっくり走る車両の方が雰囲気が出て良かった感じです。

もう少し改善したい箇所がいくつかあるので、機会があれば回路とソフトを修正したいと考えています。でもその前に、現在の状態での走行特性などのデーターを取っておこうと思います。

Arduino でプラレールを動かす、ON/OFFとPWM制御編


◆まえがき
このところソフトばかりいじっていたので、物理的に動く物を触りたくなってきました。ということで、前からやってみたかったプラレールのモーターを Arduino で制御、というのを実際に試してみました。

◆素材
新しく買うのは勿体無いので、ハードオフで中古を買ってきました。
ハードオフで買ってきたプラレール
プラレールのジャンク箱で、車両は一両で100円、レールは5本で100円という価格。そこで、新幹線1編成(3両)と曲線レール8本に直線レール2本で合計税込みで550円で手に入りました。遊びの素材としては美味しいです。

◆ギアボックスの改造
モーターを外部制御するためには回路を外部からON/OFF出来るようにする必要があります。そのために、ギアボックスを分解して電源の配線を外部に引き出しました。

・ギアボックス分解
プラレールのギアボックス
調べたら、旧動力屋根スイッチ2速というタイプらしいのですが、部品の数が想像以上に多かったです。分解や組み立て方法はネットに解説記事があるのでそちらを参照ください。

モーターの配線は鉄の薄板を打ち抜いた物で作られていました。このスイッチとモーター間の配線を切断し、この間を電線で引き出して外部から制御できるようにします。

この引き出した配線は電池のプラス側で、電池のマイナス側はギアボックス内の配線でモーターに直結された状態のままで使います。つまりモータの制御はハイサイドスイッチングで行うことになります。

・改造後
配線を引き出す
モーターに並列に入れるダイオードもこの時点ではんだ付けしておきます。出来るだけノイズの発生源に近い場所に取り付けるのがセオリーです。モーター電流は最大で1A近く流れるので少し太い電線を使っています。

◆回路図
Arduinoでプラレールのモーターを廻す-回路図
電源はプラレールのオリジナル通り、単2電池一本で供給するようになっています。
Q1のPNPトランジスタでモーターの電流をON/OFFします。
Arduino の5V電源はQ1の昇圧コンバータで1.5Vを昇圧して作りました。
Arduino のポートから直接Q1を駆動することもたぶん可能だと思います。ただ、モーターの回路で失敗すると、高電圧がマイコンのポートにかかってチップを壊す恐れがあります。そんなことで、間にQ2を挟んでおいた方が安心です。回路図ではデジトラになっていますが 2N7000 でOKです。
注:この回路では、Q1にバイポーラトランジスタを使っているため、電圧のロスが0.3V程度発生します。パワーFETを使いたいところですが、ゲート電圧を作る回路が厄介です。ローサイドスイッチにすればそこは解決出来ますが別の問題が発生するので悩ましいところです。

◆ON/OFF制御
一定周期でモーターのON/OFFを繰り返します。Lチカと同じです。
・プログラム 20240226_PlaRailTest_OnOff.ino

・動画
2両目にブレッドボードを載せて走らせている様子です。

◆PWMで加減速
徐々にパワーアップ、パワーダウンを繰り返します。Arduino の anlaogWrite でやれば簡単に出来ます。
・プログラム 20240226_PlaRailTest_PWM.ino

・動画

◆まとめ
ここまでは入門編で、回路やプログラムは簡単に出来ました。プラレールのギアボックスの改造が一番大変だと思います。ともかく、実際にメカが動く物は楽しいです。

次回はもっと複雑にして、モーターの回転速度をフィードバック制御することで車両の速度を一定に保つことにチャレンジたいと思います。
カレンダー
03 | 2024/04 | 05
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 - - - -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。
記事の内容のご利用は読者の自己責任でお願いします。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード