HOME >> 鉄道模型実験室 > 動力車のモータ端子電圧と回転数の測定方法を模索

鉄道模型実験室  動力車のモータ端子電圧と回転数の測定方法を模索

■ はじめに

  .

 先の自動列車停止装置の工作中に、気になっている事があった。 それは使用したリレーシールドのうち、秋月から取り寄せたArduino2.1用リレーシールド(品番:DFR0144 右の写真)には、見慣れない端子が付いていた。 XBeeモジュール用の端子である。

 自動列車停止装置の工作が無事完成したので、気になっていたこの件を調べてみた。 そもそも、「XBee」とは何ぞやと思ってネットで調べてみると、無線通信用のユニットである事が判った。 そして、注目したのがその大きさとアナログ値が通信出来る事であった。

 もしかして、念願の測定が出来るのではと閃いたのである。 以前実施していた「動力車の調査」の中で、走行中の動力車のモータ端子電圧か、あるいはモータ回転数のどちらかでも計測出来ればと、解析の精度が向上するのですが・・・・・・・・・との理由でその調査を中断していました。 その解決方法になるのではないかと思いついたのです。

      無線を使って、走行中の車両から、データを飛ばす!

 XBeeモジュールは、その幅が25mm程度であり、やや大きいもののNゲージに搭載可能である。アンテナの出っ張りは曲げれば良い。 入力ポートはアナログとデジタルの両方がいっぱいある! これは使ってみる価値がありそうである。

 なお、「動力車の調査」で課題となっていた項目については、「動力車の調査 目次」をご覧ください。

 

■ 測定システムのアイディア

 まず、どんな方法で使えるか検討してみよう。 頭に描いたイメージをメモ書きや絵にしてメモって置く事が大切である。

  .

 イメージを下手くそな絵にしたのが左のイラストである。 測定対象の動力車と重り車両の間に、計測機器を搭載した測定車両を連結し、そこにXBeeモジュールを取り付けてデータを送信する。

 測定したかったモータ端子間の電圧は、端子部に差し込んだ電極をウレタン線で引っ張って処理回路に導き、その電圧(アナログ量)をXBeeモジュールのA/D変換を介してデータを送信すれば良さそうである。

 モータ回転数は、「モータの速度特性の測定」で実施した反射式センサーでも可能であるがサイズが大きいので、モータの鉄心に反応する(と予想して)磁気センサー、即ちホールICを使用するとコンパクトになりそうである。

 これらのセンサを取り付けるには、動力車の車体が邪魔になるかも知れないが、軽い車体は取り外しても性能に影響しないだろうと考えて、丸裸の状態で測定しても問題は少ないと判断する。 また、センサと処理回路は細いウレタン線を使用すれば、連結部での屈曲に悪さをしないと思われる。

 測定車に搭載されたXBeeモジュールから送信されたデータは、測定台に設置された親局であるもうひとつのXBeeモジュールで受け取り、シールドを介してArduino に転送する。  そして、今まで実施してきた方法で、供給電圧、電流、ゲート通過時間、傾斜台の角度のデータと共に、パソコンに送信すれば、データ処理が可能の様である。

 

 データとして欲しいのはレールからモータ端子までの電圧降下量であるが、電圧値の校正誤差や雑音によるバラツキなどにより、本当に正確に測定できるのか不安である。 そこで、測定車両の台車を集電子付き台車にして、その集電子間の電圧も測定するとどうであろうか。 勿論、集電子には電圧測定用の電極以外は何も接続しない状態とする。 レールと車輪の間やピボット軸受部の電圧降下については、電流が流れないので、ゼロでは無いだろうか? 即ち、車輪の両側の集電子間の電圧は、そのままレール電圧とイコールになるのでは? そして、同じ条件でデータを飛ばすのでその誤差の発生具合も似てくると思われる。 とにかく、測定車の集電子間の電圧も測定しておくことにしよう。

 また、測定処理回路やXBeeモジュールの電源は、レールから取る事が出来るが、電圧がいろいろ変化するし、電流の測定値に影響する。 このため、電源として単三か単四を2個搭載することにする。 XBeeモジュールは3ボルトでも動くようである。

 

 ここで、欲を出してカプラー部に小型の荷重センサーを取り付ければ走行中の牽引力も測定できるのではないかと思い付いた。 既存のレイアウトを走行させて、その間に動力車の特性を測定してしまう・・・・・・・・・。 小型荷重センサーの実現性の問題もあるが、動力車の重量による勾配抵抗分をどう処理するかの問題があり、このアイディアはあえなくボツになってしまった。 平坦路だけなら問題無いが、勾配路であれば自分自身の重量によってモータからの駆動力を増減させてしまい、動力特性は測定出来ないのである。 確かにカプラーに掛る力は測定出来るが、カプラーに掛る力だけが動輪が発揮する牽引力とは限らないのである。

 

■無線通信のXBeeを勉強する

 まず、無線通信のXBeeでどこまで出来るか知っておく必要があり、教科書を購入して勉強することにした。 教科書は「XBeeで作るワイヤレスセンサーネットワーク」オーム社、\3,200.- である。 少し専門的であり、初心者には少し読み応えるがあるが、飛ばし読みしながらキバッテ読むことにした。

 その結果、XBeeモジュールの使い方が少し理解出来たようである。


 void loop(){
  if (Serial.available() > 21){
    if (Serial.read() == 0x7E){
      for (int i = 0 ; i < 18 ; i ++){
        byte discard = Serial.read() ;
      }
      int analogHigh = Serial.read() ;
      int analogLow = Serial.read() ;
      analogValue = analogLow +
 (analogHigh * 256) ;     }   }  }

 と言った事を理解した。 そして、 シリアル通信によって送信されたデータを、Arduino 側から取り出す場合のスケッチは、右上の様なスケッチを書けばよいとのことであるが、何やら呪文のようである。 それぞれの命令文には意味があり、初心者にも理解出来るように解説してあったので、自分なりに細工が出来そうである。 でも、ひつつのアナログデータ (上記のスケッチの例では、analogValue という変数で取りこんでいる) を取り込むためだけに、これだけの処理が必要であり、その処理時間を考えると測定ループの中に組み込めるかが心配である。 これはシリアル通信での制約と判断する。 Arduino のアナログ入力を読むように、単に  voltage = analogRead(vol_pin) の一行だけの命令では済まないと理解する。

 コンピュータが実際にはどれだけの処理タイムを必要とするのか解らないが、トラブルシューティングの中に、「待ち時間なしでデータを送り続けている場合には、受信側でデータが受け切れていない場合もあるので、10msec の待ち時間を設けてみよ」とのアドバイスもあるので、この処理タイムの問題を考慮して置く必要がある。

 このため、自動測定システムで実施している処理時間の状態を確認して置くことにしよう。

 

  .

■ 処理時間の検討

 現在実施している自動測定の処理内容は、本工作実験室の、動力特性の測定の自動化 > 牽引力特性の測定 にて説明しています。 スケッチの内容等はこちらを参照ください。

 まず、測定ゲートの通過時間をチェックしておこう。 IN とOUT のゲート間隔は108mm である。 これより模型のスケール速度と通過時間が計算出来るが、右にその結果をグラフ化して示す。

 100Km/h で走行させると 0.6sec で通過する。 もし、200Km/h で走行させた場合には、0.3sec の間に測定処理をする必要がある。

 この測定手順を簡単なタイムチャートにすると左の図に示すようになる。 ゲートIN とゲートOUTのタイムスタンプより、通過時間を計算しているが、その間に電圧値と電流値を何度も読み取って、その回数をカウントしている。 (スケッチ参照)

 その測定回数はパソコンに送信されているので、測定データのEXCELの欄から読み取れる。 その一例を下に示す。

  .

 そして、処理時間をこの回数で割ると、ひとつのループの処理時間が判明する。 上記の「牽引力特性の測定」内に示すEXCELの表示において、tt/n の欄がその計算結果である。 これより、 平均で 0.2321msec であり、全てのデータで一定している。 1msec の間におよそ4回もループをまわしていることになる。 さすがに早いね。

 電圧と電流は、モータの特性による変動が大きいので、多数の測定回数で平均化しているのであるが、1000 回以上も有れば充分と考えられる。 このため、その処理時間には、まだ余裕があると判断している。

 次に、このゲート間を走行した時のモータ回転数を計算しておこう。 回転速度ではなくて、トータルで何回転したかを示すものである。 動輪がレール上で滑らないとする、即ちスリップ率をゼロと仮定すると、動輪回転数 ndは、

    nd = L / πD      : L = ゲート間隔 = 108 mm

となる。 そしてモータ回転数 nm は、

    nm = i * nd       : i = ギヤ比

となる。

    ∴ nm = i * L / πD 

 この式は、トータルの回転数がギヤ比と動輪直径のみに関係し、車両が通過する時の速度には関係しない事を意味している。 そして、この数値と測定された回転数との比が、スリップ率として計算されるのである。

車両番号 メーカ ギヤ比 動輪径 モータ回転 スリット数 パルス
ED16-3 KATO 19.00 8.3 78.7
5
393
C11-155 KATO 28.00 11.0 87.5
5
438
C50-78 KATO 28.00 11.0 87.5
5
438
ED75-1001 KATO 19.00 7.4 88.3
5
441
EF64-1032 KATO 19.00 7.4 88.3
5
441
EF65-511 KATO 19.00 7.4 88.3
5
441
C62-2 KATO 30.00 11.4 90.5
5
452
C58-127 KATO 26.80 10.1 91.2
5
456
39679 MICRO 24.00 8.3 99.4
5
497
69659 KATO 26.09 8.4 106.8
5
534
C56-125 MICRO 29.54 9.3 109.2
5
546
C56-144 KATO 30.32 9.2 113.3
5
566
C57-195 KATO 37.64 11.4 113.5
5
568
D51-365 KATO 33.23 9.8 116.6
5
583
EF510-1 KATO 26.00 7.4 120.8
5
604
EF66-51 KATO 26.00 7.4 120.8
5
604
C62-2 MICRO 38.77 10.9 122.3
5
611

 今ここで検討してしようとする内容は、ゲート通過時間中にどれくらいのパルスを発生するのか、そしてそのパルスの周波数を知ることである。 そこで、手持ちのモデルの幾つかから、ギヤ比と動輪のデータをピックアップして、計算してみた。

 左のグラフが、ゲート通過時のパルス数を計算したものである。 殆どのモデルが2ポール5スリット型のモータをの様であったので(一部のモデルで未確認)スリット数が5個として計算すると、パルス数が計算出来る。

速度 Km/h 50 100 150 200
通過時間 sec 1.166 0.583 0.389 0.292
ED16-3 2.963 1.482 0.989 0.742
C11-155 2.665 1.332 0.889 0.667
C50-78 2.665 1.332 0.889 0.667
ED75-1001 2.642 1.321 0.881 0.662
EF64-1032 2.642 1.321 0.881 0.662
EF65-511 2.642 1.321 0.881 0.662
C62-2 2.578 1.289 0.860 0.646
C58-127 2.556 1.278 0.853 0.640
39679 2.346 1.173 0.783 0.587
69659 2.184 1.092 0.729 0.547
C56-125 2.136 1.068 0.712 0.535
C56-144 2.058 1.029 0.687 0.515
C57-195 2.055 1.027 0.685 0.515
D51-365 2.001 1.000 0.667 0.501
EF510-1 1.931 0.965 0.644 0.484
EF66-51 1.931 0.965 0.644 0.484
C62-2 1.907 0.954 0.636 0.478

 反射式センサーを使用した場合には、モータ1回転当り1パルス、ホールICであれば5パルス出る(と予想でいているが・・・・・・・・?)と推定できる。

 さらに、ホールICを使用した場合について、1パルスの時間を計算したのが右の表である。 単位は msec である。 これより、パルスカウントには、0.5ms 毎に立ち上がりがくるので、結局は0.2ms 以上の応答性が必要となると判断する。

 

 

 

*******************************

 この事より、パルスを無線で送信するのは無理であると判断すべきであろう。

 また、たとえArduino に取り込めたとしても、そのパルスのカウントは現在の測定処理サイクルの 0.2321msec に含めるとぎりぎりであり、カウントミスが発生する恐れがある。

 反射式センサーを使用するのであれば、タイミング的には対応できかも知れない。 あるいは、パルスに合わせて測定タイミングを調整すれば可能だろうか? でも、大切な電圧・電流の測定を不確実なパルスで混乱させるのは得策ではないような気がする。 この辺はサーベイが必要となって来る。

 

■ 電圧の測定

 モータ端子電圧とレール電圧の測定については、XBeeモジュールのアナログ入力に適した増幅率にオペアンプを使用して調整し、測定車のXBeeモジュールを使ってその値をシリアル通信にて親機のXBeeモジュールに送信し、受信したデータはArduino からパソコンに送信する。

 この場合は、処理時間が掛ると予想するので、測定処理サイクル内での実施は無理と判断する。 そこで測定ゲートを通過後に測定とXBeeモジュール間の送信を10〜50 回程度実施し、Arduino で累積計算してパソコンに送信する方法を考えれば可能な気がする。 XBeeモジュールには、計算や記憶を実施する能力が無いとのことである。

 当初は小型のArduino を車両に搭載することを考えてたが、適切なモデルを見つける事が出来なかった。 世間ではワンチップマイコンなども有るようであるが、小生にはまだチンプンカンプンの領域であるので、現在では手が出せない状態である。 いつかは挑戦してみたい・・・・・・・・・・・!

 

■ 回転数の測定

 ホールICあるいは反射式センサーにてモータの回転数を測定する方法が一番難しそうである。 パルスを無線で送信するのは無理であると判断し、諦める事も出来たが、折角ここまで検討したので他の方法を検討してみた。 送信手段として赤外線を利用しようとするものである。

 パルス毎に赤外線LED を発光させ、固定側でその赤外線パルスを受光してパルスとしてカウントする。 その結果をArduino に取り込みモータの回転数を計測使用という試みである。 回転数センサーから赤外線LED を発光させる回路は難しく無いようであり、赤外線を受光してパルス信号をArduinoに送信するのも出来そうである。 問題はパルスのカウント方法と考えている。

 パルスをカウントするためにメインの処理作業が妨害されては元も子もないので、Arduinoでのパルスカウントの実施例を探して見た。 すると、割り込み処理の方法もあったが、「Freq Counter」という高精度、高解像度の周波数カウンタライブラリが公開されていた。 この方法は、デジタル5ピンを使用して16ビットハードウェアカウンタを使用するとの事である。 カウント中に他のタスクが実施可能かどうか不明であるが、これもサーベイしてみよう。

 他のアイディアとして外部カウンターを使用する方法も検討してみよう。 センサーで検知したパルスをバイナリカウンタで計算し、その結果の信号を利用しようとする方法である。 この方法も未知の分野であるがサーベイする事にする。

 パルスカウンタを使用する場合、指定時間でのパルス数を計測する方法と、逆に指定数になる時間を測定するの二つの方法がある。 前者では数値データの出力が必要となるが、Arduinoにどうやって取り込むのかの課題がある。 後者の方法では、カウント開始のと終了時のタイミングを送信すれば、Arduino 側でそのタイムスタンプを記録し計算すれば、容易に回転速度を計算出来る。 Arduino内部でパルスカウントすれば、前者の方法でパルス数の数値の処理は簡単だろうし、外部カウンタを使う方法では後者のタイムスタンプ方式が容易な気がする。

■ 実際の実験を初めてみよう

 本件は自分にとっては未知な領域なので、頭で考えていても前進しない。 回路図を色々書きながら部品を入手たので実験を始めよう。