HOME >> 鉄道模型工作室 >  マイコン式の運転操作台を作ろう 制御ロジック

鉄道模型工作室  マイコン式の運転操作台を作ろう 制御ロジック

 マイコンを使った運転操作台を作ってみようと思い立ち、さっそく手を動かしました。 まず、制御ロジックの骨格を固めることにしよう。

 

■ 制御ロジックについて

 鉄道模型の操作方法として、ここでは線路に給電する電力を、PWM制御によって直流12ボルトの電圧を制御する方式とします。

 制御ロジックにおいては、操作入力としては力行レベルブレーキレベルをノッチ数としてダイヤルで入力するものとし、出力はPWMのデューティ値とします。 この他に、走らせる動力車のモデルによって動力特性が異なるため、車種別の選択ダイヤルを設けて入力させ、そのモデルにあったデューティ値を出力させます。 さらに、常灯レベルを調整するダイヤルも設けて最小デューティ値を調整できるようにしましょう。

 制御全体として、メインループにて下記のようなフローを実行する。

  1. 各操作レバーの状態を読み込む。
  2. この時の車速を計算する。 即ち、力行運転時か、惰行運転時か、あるいはブレーキ操作時を判断して、それに応じた車速を計算する。
  3. 計算された車速をもとに、車種別モデルに応じたデューティ値を計算する。
  4. 常灯レベルに応じてデューティ値を修正する。
  5. デューティ値を出力する。
  6. マスコンノッチ数、ブレーキノッチ数、そして車速をディスプレイに表示する。
  7. ループ時間調整のための遅延時間

 これによって、運転途中での操作レバーの状態変化を読み取り、それに応じた対応が反映されるようにします。 また、このループのサイクル時間は 0.2〜0.5秒程度と考えており、そのサイクル毎に車速を計算し直して逐次出力していくフロートします。

 

■ 速度設定の考え方

 制御モードとして、力行運転時、惰行運転時、そして制動運転時にあった制御モードを検討しましょう。

◆ 力行運転時の制御

 実際の電車の様に、運転台を操作して模型電車を走らせるためには、まず力行運転時に操作するマスコンの操作を具体化する必要があります。 以前に買い込んでいた書物を紐解き、マスコンは何を制御しているのかから復習しました。

 電車は一定電圧の架線から電力を取り込み、複数のモータや抵抗器のつなぎ方を代える制御をしています。 そしてモータは模型用と異なって、直巻き型のモータですのでそのトルクと速度の特性が異なっています。 低速では大きなトルクを出すものの速度が高くなるとトルクは低下していくものの、マグネッとモータのようにゼロにはなりません。 そして、電車の走行抵抗とバランスする状態になる速度になると一定速度で走行することになります。

 ノッチを上げて行くとこの一定になる速度が高くなるのですが、最初から大きなノッチにすると低速時には過大な電流が流れるために、電流制限が掛かるようになっているそうです。 従って、小さなノッチから発車して加速して行き、最後はめざす速度になるノッチで運転すると解釈しました。 書物からの知識ですので違っているかも知れませんが、とにかく、だんだん加速して行き、ある速度になるとその状態を維持する操作が、このマスコンの機能と言うことにしました。

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

  .

 

 それでは、どうやってプログラム上で実現させるかを考える事にしましょう。 単純に考えて、ノッチの指定は最後に収束する最高速度を指定するものと考えて、その時の車速と最高速度の差に応じて加速具合を計算させて行けば良いのではないかと考えました。

 難しい数式を使って経過時間と車速の関係を計算する方法もあると思いますが、マイコンの計算ループに応じて次のような単純な計算をさせることにしました。

   一つのループでの加算速度を儼とすると  儼=α(VmーV)
    その時の車速Vの計算は、            V=V+儼

 この計算をメインループを回しながら計算させるのです。 ちなみにEXCELにて試しに計算してグラフ化したものを右に示します。

 イは Vm = 120 Km/h、ロは Vm = 100 Km/h、 ハは Vm = 80 Km/h、 ニは Vm = 60 Km/h、 とし、係数のαは α= 0.1 として計算したものです。 また、ホとヘは、Vm = 120 Km/h としαを 0.15と0.2 として計算しました。

 さらにトでは、計算途中で Vm の値を変更した場合を示します。

 実際の電車のような加速曲線とマッチしているのかどうかは分かりませんが、それらしく加速している状態を示していると判断して、このロジックを使用することにします。 また、最高速度に達するのは30〜40ループ目であり、横軸の時間系はループ処理の最後に遅延時間を設定して調整すれば良いでしょう。 

 

◆ 惰行運転時の場合

 惰行運転時の運転手の操作は、マスコンと制動レバーをゼロ位置にしていると考え、この時を惰行運転状態を判断します。 そして、一定の割合で時間とともに速度を落として行く事にします。 即ち、一定値βによって、

     V = V - β

として計算しながらループを回せばよいでしょう。

 

◆ 制動操作時の場合

 ブレーキレバーを操作している場合、ノッチ数に応じたブレーキ力が作用したものと考えると、それに比例した一定値で速度を減速させて行きます。 すなわち、ノッチ数に応じて車速Vを減算させてればOKです。

 

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

 これらの計算において、車速Vは正の整数として計算しますので、例外処理はその都度配慮する事にします。

 

■ デューティ値の計算

  .

 まず、モデル毎の速度特性を調査しておく必要があります。 幸いに、コツコツと実施して来た多くの測定結果がありますので、これを活用することにします。

 例えば「新ATSに挑戦 多くの列車を走らせよう」(2019/2/11)に掲載している特性一覧表を参考にしました。 このページでは蒸気機関車と電気機関車をまとめていますが、小型動力車に対しても作成途中のファイルが有りましたので、このリストを活用します。

 今回必要なデータは、供給電圧と車速のデータです。 そのデータを使ってモデル毎にグラフ化したものを右に示します。 ここでも色別に層別していますが、低速側と高速側の分類を追加しています。 同じ 5volt の電圧でも下は 40Km/h から上は 160Km/h と幅広く分布しています。 これでは、速度を単純なひとつの式で電圧に置き換えるのは全く意味が無いので、何種類かの計算式を求めて換算式を求めることにします。

 まず、右のグラフのように色別で分けたグループにて、平均的な近似式を求めました。 その線図を下左に示します。 車速ゼロの値と勾配については少し修正して統一感のあるデータにしています。 また、右のグラフの中の特殊モデルは除外しています。

 このデータを活用してX軸とY軸を逆にしたグラフを下右にしめします。

   

 このグラフより、走行させようとする車速から、モデル毎に必要な供給電圧を求めることができます。 そして、0ボルトを0%に、12ボルトを100%として換算すれば求めるデューティ比が計算できます。 ただし、analogWrite() としてスケッチで記述する場合には、0〜255 の値を使用しますので、12ボルトを 255 として計算する必要があります。 即ち、車速をV、デューティ値を Dt とすると、モデル毎に

  1. Dt = 1.59V + 30
  2. Dt = 1.23V + 30
  3. Dt = 0.94V + 30
  4. Dt = 0.72V + 30
  5. Dt = 0.60V + 30
  6. Dt = 0.47V + 30

となりました。 実際には車両を走らせながらチューニングすることが必要でしょう。

 

■ ネタの先出

 屁理屈ばかりでは面白くないので、現在の作業状態を先出しましょう。

 今は、ブレッドボードを使った回路を組み、おおよそのスケッチを書き込んで不具合点を抽出しています。 まだまだ調整が必要ですが、大まかの制御は出来ています。 しかし、簡単なミスをあちこちで起こしており、ボケが始まった後期高齢者の悲哀を味わっていますが、なんとか頑張って完成させたいと思っています。

 

ページトップへ戻る .


 2021/4/17 作成