HOME >> 鉄道模型実験室 > 小型のターンテーブル式実験装置 新たな挑戦ー電流制御方式
小型のターンテーブル式実験装置を作りました。そして、低速域のスリップ領域においても牽引力が測定出来るように改善しましたが、制動領域でデータ飛びが発生してしまい、その対策に四苦八苦しています。今回は電流制御方式を検討しました。
■ データ飛びの要因は?
.
制動側のデータ飛は、傾斜台方式と強制回転されているターンテーブル方式の違いと判断しています。そして、ターンテーブル方式の場合、動輪側の特性(測定したい動力車の牽引特性)に対して、線路側の特性(ターンテーブルの駆動特性)を角度をつけて交わるようにすれば解決するのです。しかし、クランク状の線図を待つ動力車の牽引特性の場合は、一筋縄では行かないのです。
即ち、直交する二つの特性を持つ測定方法を、測定装置側に用意する必要があるという事です。
課題であった駆動側のスリップ領域の測定方法は、ターンテーブルの駆動モータを回転数制御することで解決しました。しかし、制動側のS字特性部には、この方法では対応できないのです。そこで、抵抗制御方式を実施しましたが、データ飛びが発生している状態です。動輪側と線路側の特性の交わり角度が小さいのです。
***********************************
そこで、モータの回転数制御に対してトルク制御、即ちトルクと比例するモータの電流を制御してやればよい事に気が付きました。
そこで、今回はその電流制御方式に挑戦することにしました。
■ 電流制御方式の検討
まず、今までの知見をもとに、全体の回路図を描いてみた。各制御方式を切換て使用することにし、電流制御部分は、Arduino を使うことにした。 電流検知部は今までの測定用回路を参考として、同じ仕様で取り込んでいる。
// Every_motor1-3 // 2024.10.13 // Arduino Nano Every を使用する。 // PWM周波数を15.7kHzにする。 #define VOL A1 #define SHUNT A2 #define MOTOR 3 int vol; int shunt; int motor; void setup() { pinMode(VOL,INPUT); pinMode(SHUNT,INPUT); pinMode(MOTOR,OUTPUT); TCA0.SINGLE.CTRLA = 0b0101; //PWM周波数の変更 Serial.begin(9600); analogWrite(MOTOR,0); motor = 100; } void loop() { vol = analogRead(VOL)/10+50; delay(100); shunt = analogRead(SHUNT)/4; delay(100); motor = motor - (shunt-vol)/5; if (motor > 200){ motor = 200; } analogWrite(MOTOR,motor); Serial.println(motor); delay(2000); }
今回の実験は、まず電流制御部分をブレッドボード上で構成し、その機能と動作を検討することにした。組みあがった回路を下に示す。
主な構成部品の仕様を下に示す。
そして、ストック品のモータを持ち出し、テスト回路を組んでチューニングを実施した。
● チューニングの実施
記述したスケッチの最終内容を右にしめす。何度か修正して Ver が3となっている。
当初は、半固定抵抗からの電圧値とオペアンプの出力値をA/D変換した値と、PWM出力値の指定範囲を合わせるような、簡単な調整だけを実施した、単純なフィードバック構成であった。
その結果は全然調整できず、モータが停止したままだったり、暴走してしまったりの状態であった。そこで、オシロやテスタでの観察結果から、調整範囲が狭い事が分かり、その範囲に入るようにと調整したものである。
また、状態が安定せず、制御状態がフラフラするようなハンチング状態でもあったので、フィードバックゲインを小さくしたり、遅延定数を変えたりなどの調整を実施し、何とか安定した制御状態に設定することが出来た。
この時の様子を下に示す。
制御指令値としての vol は、A/D変換値が0〜1023までの整数値であるものの、PWM出力値としての analogWrite の値は0〜255までなので、通常は1/4とするところなのだるが、修正後の式としては、
vol = analogRead(VOL)/10+50
とした。 一方、シャント抵抗から取り込んだ電圧値をオペアンプで増幅した shunt は、
shunt = analogRead(SHUNT)/4
として計算し、この二つの差をフィードバックしてモータへの出力指令値であるPWM出力として、
motor = motor - (shunt-vol)/5
を計算して出力している。目標電流値と実際の電流値の差をフィードバックしているのであるが、そのゲインを1/5に落としてフードバックさせている。理由はハンチング防止であるが、値としてはいい加減なのである・・・・・・・・・。たまたま良かったので、結果良しとしている。
テスト結果は上々であったので、実際のモータ駆動部に適応させてみた。
■ 電流制御でのテスト結果
とにかく、機能していることが確認できたので、ターンテーブルの駆動モータを動かせて、テスト車両の測定を実施してみた。下の写真。
測定データを左に示す。問題のS字特性部分をチェックしたのですが、
まったくもって、期待外れであった。
******************************
データを見てガックリとしてしまった。データ飛びが改善されていないのである。
なんで?
どこが間違っているの?
測定方法とか、調整方法が悪いのか、いろいろさわってみたが、改善出来なかったの、少し観点を変えてチェックしてみることにした。
■ 各要素の状態を観察しよう
各部の電圧などをチェックして問題点を探ることにした。このために、テスタの端子との接続が容易なようにジャンパ線を使って接続点を作った。
テーブルには車両を載せないフリー状態にし、半固定抵抗を変化させて各部の電圧などを測定した。
これらのデータを色々なグラフに加工したが、注目したグラフを下に示す。
● 最初に、入出力の関係とスケッチの計算状態を観察する。
半固定抵抗の出力電圧VOLに対するオペアンプ出力電圧SHUNT、および、PWM出力用計算値motorの関係を見た。
これらのグラフより、入力指令値VOLに対して出力状態は綺麗な線形関係にあることがを判る。
● 次に、制御出力である電流値について観察した。
電流値mAは、シャント抵抗の電圧をテスターで読み取り(mV)、シャント抵抗(Rs = 0.22Ω)より計算したものである。
この電流値も入力指令に対して綺麗な線形関係にあることが判る。
**************************************************
上記の観察結果より、制御は正常に機能していることが分かったのだが、ここでふと疑問が湧いてきた。
ターンテーブルは空回りしているので、負荷はゼロでは無いのか?
それなのに、何故電流が増減しているの?
これって、駆動部の摩擦トルクを忘れていないのか・・・・・・・・?
● ターンテーブルを駆動するための必要なトルク(=電流値)を求めてみよう。
半固定抵抗の出力電圧VOLを変化させ、その時のターンテーブルの回転数と電流値を求める。車速データはメインの測定回路を使って計測し、その時のシャント電圧値より電流値を計算した。
ターンテーブルはフリー回転しているので、電流値、即ちモータの発生トルクは、駆動機構内部の負荷に対応していることが分かる。
やっぱりだね・・・・・・・・・。
沈黙・・・・・・・・・・・。
************************************
指令値を変化させると電流値は変化するが、それに合わせて回転数も変化してしまうのだ。
本来、欲しい機能として、電流値はボリューム調整で可変可能である一方、回転数は負荷の状態に応じて変化してほしいのである。一番上のイラスト図を参照。
■ まとめ
先行きに暗雲が立ち込めて来た。駆動機構の摩擦トルクを打ち消す制御は出来るのだろうかと不安が沸き上がってきた。
そこで、「小型のターンテーブル式実験装置を作ろう 実験開始」(2024/9/19)の実験その2で実施した時と同じ方法にて、電流制御方式の特性を調べてみることにします。果たして特性の傾斜具合がどれだけ水平になっているのか判明するであろう。
**************************************************************
あまり期待していないが、とりあえずこの方式の最終判断を決める実験となるだ。次回報告です。
2024/10/17