HOME >> 鉄道模型工学 > 測定項目の追加 電源供給ラインとスリップ率不良の改善
走行する動力車から有線通信によってデータを収集しようとするプロジェクトも、それなりの目途が立ってきたが、まだ大きな課題が残っている。 それは電源供給ラインの電圧降下とスリップ率不良現象の問題である。 その改善を進めてきたが、改善なのか改悪なのかの狭間に落ち込み、四苦八苦したがやっと解決方法が見出せた。
.
■ 電源供給ラインの問題
電源供給ラインにおいて、電圧降下の問題が発生している。 レール面の電圧と、電圧測定点での電圧差が、無視できる値とは言い難い結果となっていた。 100 〜200mA の時に 0.15volt の電圧降下が発生しているということは、約1Ωの抵抗が有ったという事であり、抵抗としては僅かであるが測定の目的からすると影響度合いは無視できないと判断する。 この供給電圧の測定誤差については、問題点を整理しておこう。
まず最初に発想したのは、測定ゲートの近くに設置した測定点から電圧を計測し、レールの極性変化をブリッジダイオードで極性をそろえて測定する方法である。 でもこのアイディアはブリッジダイオードのカタログを見て、すぐに諦めざるを得なかった。 ブリッジダイオードDIP型DI1510 の例では、100mA 時には 0.8volt の電圧降下が発生している。 電圧降下量が分かっているのなら、電流値から修正できるとも考えられるが、電圧降下の防止対策には相反する要素であるので、このアイディアを破棄した。
■ 電源供給ラインの回路の改善
設定してきた線路の走行状態を分析していた結果、ゲート1の線路とゲート2の線路を直接接続しても問題の無いパターンが有ることに気が付いた。 そのアイディアを煮詰めて下記のようなパターンを採用することにした。
.
分岐ポイントの近くに新たにギャップを2ヶ所設置し、右半分の線路をすべて接続する。 勿論リバース線には従来のギャップは設定したままである。 このような配線にすると、ゲート1とゲート2の線路をダイレクトに接続出来るので、ゲート1とゲート2の極性が反対になる問題は解消されるのである。 課題3への対応。
次に、レール電圧の測定には、左の図のように測定点AとBを設け、ここの電圧を直接測定するのである。 そして、レール電圧としては、(A−B)を計算しその絶対値を計算するのである。 すると、レールの電圧極性が変化しても、対応出来るのである。 課題2への対応。
また、測定点とレールの間は、抵抗の少ない太い電線で配線しておけば、その間の電圧降下は少ないはずである。 課題1への対応。
幸いにもArduino のアナログ入力端子はまだ残っているのでこれらのアイディア採用することにした。 電圧測定点AとBは、電圧が12ボルトまで測定できるようにするために、今まで使用して電圧測定(検知)部と同様に、10KΩと5.1KΩの抵抗を使用して分圧する回路として、Arduino のA4とA5 ポートに入力させる。 また、メインシールド上にあった測定状態を示す3個のLEDをサブシールドに移動させることにした。 サブシールドをメインシールドの上に重ねるので、LEDが見えなくなっていたからである。
サブシールドとレールへの配線具合を下に示す。
配線が集中する測定点 A と B の部分は、専用の端子を作ってまとめてネジ止めした。 下の写真。 この端子は、ジャンク箱の中から探してきたものであり、形状を見てその本体がピンと来られる方は鉄道模型のプロですね。 KATO製の固定線路用ジョイント (品番:24-810) のジョイントを切り取った後のフレームの部分です。 リン青銅製の部品で、フレキシブルレールのジョイントに使っているため、その通電性と強さは保証されていると考えています。
そして、これらの端子を A と B 点毎に5本づつひとまとめにして、右上の写真の様にように測定台にネジ止めしています。
// Measure-3 2016/2/5 // avol_pin 4 と bvol_pin 5 を追加する。 (省略) //********右旋回 登り坂 ゲート1 ************** slit1 = digitalRead(SLIT1_PIN) ; slit2 = digitalRead(SLIT2_PIN) ; if (slit1 == HIGH && slit2 == HIGH){
// ゲート信号OK
//準備 vol = 0; mvol = 0; avol = 0; bvol = 0; cur = 0; n = 0; mcount = 0; digitalWrite(LEDG_PIN, HIGH); //入口スリット while (slit1 == HIGH) {
// 入口スロットの通過を待つ slit1 = digitalRead(SLIT1_PIN) ; digitalWrite(LEDG_PIN, HIGH); } t1 = millis(); // 入口スロットの通過時刻 attachInterrupt(0,m_count,FALLING);
// 割り込みを有効 digitalWrite(LEDY_PIN, HIGH); //出口スリット while (slit2 == HIGH) {
// 出口スロットの通過を待つ。
// この間に電圧と電流を測定する voltage = analogRead(vol_pin); current = analogRead(cur_pin); mvoltage = analogRead(mvol_pin); avoltage = analogRead(avol_pin); bvoltage = analogRead(bvol_pin); vol = vol + voltage; mvol = mvol + mvoltage; avol = avol + avoltage; bvol = bvol + bvoltage; cur = cur + current; n = n + 1; slit2 = digitalRead(SLIT2_PIN); } t2 = millis(); // 出口スロットの通過時刻 detachInterrupt(0); // 割り込みを無効にする angle = analogRead(angle_pin);
//傾斜台の角度を読む cancel = digitalRead(BASE_PIN) ; if (cancel == LOW){ angle = 9999; } //出力処理 tt = t2 - t1; String buf = String(vol)+","+String(cur)+","
+String(avol)+"," +String(bvol)+","
+String(mvol)+","+String(mcount)+","+String(n)
+","+String(tt)+","+String(angle)+",U,"+ ",E"; Serial.println(buf); digitalWrite(LEDY_PIN, LOW); delay(500); } else { digitalWrite(LEDR_PIN, HIGH); //ゲート不良の信号 delay(500); digitalWrite(LEDR_PIN, LOW); }
//** **右旋回 下り坂 ゲート2******* *
( 省略)
************ 電源供給ラインの改善 (2016/2/10) を再編集 ********
新しく作成した回路は以前と同様の構成であるが、抵抗値などのバラツキを考慮して、実測値による校正を実施した。 供給電源として安定化電源を使用し、測定点AとBはひとまとめしてB点に接続し、電圧測定の基準となるテスタのプラス端子をB点に接続してのをせつぞくし、テスタのマイナス端子はサブシールドのGND部に接続する。 線路上には動力車を走らせずに電流が流れない状態にし、、Arduino で読み取った電圧の指示値とテスタの電圧の関係をグラフ化した。
測定点AとBは同じ電圧であるが、アナログ入力値は僅かではあるが異なっている事が分かる。 また、安定化電源に表示された数値やモニタに表示された数値とテスタの数値も、1/100〜2/100ボルト程度は異なっていたが、今回はテスターの数値を基準とした。 一番信用できそうだったからである。 このグラフの直線近似式を換算式に採用する。
■ スケッチの修正
アナログ入力の設定と、測定点AとBの電圧測定、および書き出しを上に示す様に追加修正した。 スケッチ名: Measure-3 を参照。 車両が測定ゲートインすると、従来の電圧と電流、およびモータ端子電圧に加え、測定点 A と B の電圧も測定して、測定値を何度も累積しながらゲートアウトを待つ。 即ちゲート通過中は連続して測定し続けているのである。 ゲートを通過する時間 tt と繰り返し測定した回数 n も出力しているのは、従来通りである。
これらの処理を、右旋回と左旋回、およびゲート1と2 の四つの場合に分けて、ゲートインするセンサとゲートアウトするセンサをそれに合わせて記述しているが、処理する内容は同じである。
************ 回路定数の校正とテスト走行 (2016/2/14) を再編集 ********
■ スリップ率不良の現象
次に、テスト走行中に気付いた不具合についての対策を報告する。
まず、不良の状態を整理しておこう。 計算されたスリップ率のデータについて右のグラフに示すが、以前の測定データを黄色の点で、今回のテストデータを青色の点でプロットしている。
以前のデータよりもバラバラとなっており、測定は平坦路単機走行時の状態を測定しているので、動輪がスリップしているとは考えららない。 即ち測定がおかしい事は明らかである。
計算の元となったモータ回転のパルスのデータを見たのが隣のグラフである。 明らかにパルス数が多くなっている。 測定間隔が 108mm のゲート間を通過するときのモータ回転パルスをスリップ率ゼロの場合として計算すると、
パルス数 = 2×108×i /πD 2: 回転マーキングによる一回転当たりのパルス数 i :ギヤ比 D :動輪直径 mm
で求められるので、通過速度に関係なく一定値となる。 今回の場合は、179.0 回のパルスがスリップ率ゼロとなる。 パルス測定なので、測定タイミングのずれにより前後の数パルスは誤差になるが、先回の測定データは正確に測定している事を証明しているものの、今回のデータは明らかに問題があることは明白である。
■ 改善案の模索
問題はパルスの測定回路とみて、パルス波形の観察を行った。 その結果、波形は矩形波と言い難い崩れた波形であったので、ノイズなど影響などでダブルカウントが発生していたと推定した。 そして、パルスカウント方式の変更や、NAND素子、あるいはオペアンプなど色々なテストを実施して暗中模索の状態であった。
そのような中で、我がサイトを見てくださっているユーザーの方から貴重なアドバイスを頂いた。 それは、目から鱗の状態であり、さっそく実験を実施した。 アドバイスは 「 トランジスタをエミッタフォロアで使用すると、ゲインは1倍です。 コレクタから出力を取れば改善されると思います。」との内容でした。 そうなんだ、トランジスタ回路でもプルダウン方式をなんとなく使っていたので、気にも留めていなかったが、これによって今までの現象を理解する事が出来た。 アドバイスを頂いたMJ さんに感謝、感謝である。 そしてエミッタフォロアなる用語も始めて教わった。 お恥ずかしい限りである・・・・・!
修正後の回路を下左に示す。 中央は修正前の回路で、右のオシロ画面はそれぞれの場合の波形を並べて記載した。
センサからの電圧の低い山形のパルスでも、このプルアップ回路によって波形整形すれば、綺麗に整形された矩形波として処理されていることが確認された。 そしてノイズの影響を受けにくくなったことも納得である。
************ パルス波形の観察(2016/2/15) と 回転数検出部のプリアンプ回路について(2016/2/17) を再編集 ********
■ 修正された回路
こうして完成した回路図を下に示す。
尚、Arduino のD2 端子にはセンサからのパルス信号の他に、カウンター IC からの入力も選択できる回路となっているが、四苦八苦した時の残骸が残っているだ。