小石川の鉄道班のへや

小石川中等教育学校物理研究会鉄道班の公式ブログです。

模型の自動制御はじめました。(加減速編)

自動制御の開発(その2)

どーも、E231-1000番台が大好きな中の人です。

前回、電源が逝ってしまい完成できませんでしたが、調べたらDCジャックの

接触不良でした!トホホ…

というわけで、とりあえず完成させましょう!

 前回と同じように配線して、電源を挿して・・・

よし、動いた!でも、急停車・急発進じゃなあ・・・

というわけで、今回の主な目的は滑らかな加減速です!

それではどうぞ。

1) 制御方式

加減速を滑らかにするには、電圧が描くグラフが1次関数のグラフのようになります。

そこで、電圧を調整する方法を調べます。

調べると、おもに2通りの方法がありました。

<1>抵抗制御

<2>パルス制御

抵抗制御は名の通り、抵抗値を可変させて電圧を調整します。(V=Ω×I)

パルス制御は、一定時間の間に何パーセントの時間の間出力をオンにして、

残りはオフにして、疑似的にアナログ波をつくりだすものらしいです。

今回は、最近の電車で使われているVVVF制御(可変電圧可変周波数制御)に

似ているパルス制御を採用しました。

2) プログラム

Arduinoには、analogWrite関数という関数があり、引数(analogWrite()の()の部分に

入る数字のこと)に出力ピン、デューティ比を記述するらしいです。

(デューティ比は何パーセントの時間出力をオンにするかの数字)

今回は、for文でカウントアップしていき、そのたびにデューティ比もカウントアップ

していくようなプログラムにしました。

3) 回路部

前回とあまり変わっていません。変わったところといえば、Arduinoボードの

出力ピンを変えただけです。(すべてのピンがパルス出力できるわけではない)

よし、実行だ!

できたできた!しかし、「ピー」という音が耳障りだな・・・

調べると、実車はこのノイズを音階にしたりして耳障りではないようにしている

らしいです。(有名なのは京急ドレミファインバーター

ファソラシドレミファソーと歌うことから、歌う電車として親しまれている。

現在は消滅(2100形))

じゃあ、音階を付けよう!

4) 周波数

さっきまでは、可変電圧可変周波数制御の可変電圧のみをいじっていました。

次は、周波数もいじりましょう!

ArduinoのanalogWrite関数では、周波数は設定できません。

そこで、レジスタやらをいじるそうです。うん、分からない。

調べると、ArduinoではOCRnA(nはタイマーの番号)で周波数、

OCRnBでデューティ比をいじるそうです。

てことは、for文でカウントアップした値をOCRnBに書き込み、OCRnAは

デューティ比にあわせ変えるようプログラムを組むのか。

そして書いたプログラムがこちらです。

(抜粋、周波数の設定部分のみ、京急2100形を再現)

・・・

  if(n>=0&&n<PLUS+30)
  PWM(10000);
  else if(n>=30+PLUS&&n<31+PLUS)
  PWM(349);

  else if(n>=31+PLUS&&n<32+PLUS)
  PWM(392);

  else if(n>=32+PLUS&&n<33+PLUS)
  PWM(440);

  else if(n>=33+PLUS&&n<34+PLUS)
  PWM(466);
  else if(n>=34+PLUS&&n<35+PLUS)
  PWM(523);
  else if(n>=35+PLUS&&n<36+PLUS)
  PWM(587);
  else if(n>=36+PLUS&&n<37+PLUS)
  PWM(622);
  else if(n>=37+PLUS&&n<38+PLUS)
  PWM(698);
  else if(n>=38+PLUS&&n<138+PLUS)
  PWM(789);
  else
  PWM(n+121-PLUS);

・・・

void PWM(int frq){
OCR1A=(unsigned int)(1000000/frq);
OCR1B=(unsigned int)(1000000/frq*i);
}

PWMというユーザー定義の関数をつくりました。引数は周波数、戻り値は無しです。

PWM関数内のiというのは、for文でカウントアップするグローバル変数です。

結構周波数の解析と計算が面倒くさかった。

こんな感じでできたのがこちらです。


よし、できた!

とりあえず自動制御はこんなもんでいいかな。

次回は踏切制作をしようかな~と思っています。

最後までお読みいただきありがとうございました!