PWM式鉄道模型コントローラーを作る

 前回は常点灯コントローラーを作りましたがやはり実車に近づいたコントローラーがほしいということでツーハンドル常点灯コントローラーを作ります。特にモチーフにした車両はありません。

ハードウェアの作成

今回は単純な回路にしました。回路の構成と回路図は以下の通りです。

回路構成

回路図

回路図

 増幅素子はトランジスターアレイのFT5754Mを使用しました。フライバックダイオードが入っていて回路の簡略化に繋がるのと最大3Aを流すことができる魅力があったため選択しました。そのため、ic内の4回路中1回路しか使えず空きピンが多くなってしまっています。また、トランジスターだけでの増幅は比較的多くの熱を発生させます。常用する場合はヒートシンクを使うなど放熱対策を行ってください。

 電源は家に転がってた12V1Aのacアダプターを使用しました。はっきりいってモーターでノイズがのるのでArdiunoのある5V系統以外にノイズ対策を行っていません。Ardiunoに必要な5Vに落とすのに使ったのは電源レギュレーターの7805です。かなりのオーバースペックなのでもっと廉価で低スペックなものを使用しても大丈夫です。Ardiunoでの処理に大きな電力を必要としないはずなので放熱対策はしていません。

コントロール部分はロータリースイッチとボリュームで行っています。ロータリースイッチの各接点の電圧値で加速度を変更できます。

 保護回路はヒューズ以外にとくに設けていません。市販のパワーパックのようにショートしたらボタンひとつで復帰できるようにすることも考えましたが、そもそも使用頻度が低い上、回路が非常に複雑になってしまうため見送ることに。ちなみにポリスイッチを使っても良いのですが、ドリフトがあり、使いづらいため結局ヒューズにしました。

組み立て

 当たり前ですが背の低い部品から取り付けるのが常識です。ただ、今回はランドが非常にとれやすい安い紙エポキシ基盤を使用したため半田付けに失敗したときにすぐにやり直せるようarduinoのicソケットとトランジスターアレイを先につけました。

続いて回路図通りに部品を取り付けていきます。完成しました。完成したら正しい波形が出てるかハンディオシロでチェック。

完成です。裏と表の写真を載せておきます。さすがにジャンプ線だと電力に耐えきれなさそうなのでこのあと交換しておきました。

ソフトウェアの作成

プログラムはarduino ideで記述しました。arduinoを組み込んだ後にビルドする場合は絶対に主電源を切ってからパソコンに接続してください。できればArduinoを取り外してからビルドしたほうが良いです。これを怠ると最悪、パソコンが壊れます。

単純にボリュームの回転角を加速度と比例させた

単純に作成したプログラムです。

int acceleration_plus = 18;//正の加速度を設定
int acceleration_minus = 20;//負の加速度を設定

int read_volt_plus;//マスコンの電圧読み取り
int read_volt_minus;//ブレーキの電圧読み取り
int PWM_write = 20 ;

void setup(){
    pinMode(5,OUTPUT);
    pinMode(7,OUTPUT);
}
void loop(){
    read_volt_plus = analogRead(1);
    read_volt_minus = analogRead(2);
    if (read_volt_minus >= 20){
        read_volt_plus = 0;
    }//ブレーキをかけているときはマスコンを無効にする
    PWM_write = PWM_write + read_volt_plus/acceleration_plus;
    PWM_write = PWM_write - read_volt_minus/acceleration_minus;
    if (PWM_write > 255){
        PWM_write = 255;
    }//pwmの上限を100%に設定(255を越えて処理が反転しないようにするため)
    if (PWM_write < 20){
        PWM_write = 20;
    }//pwmの下限を20/255%に設定(常点灯用)
    analogWrite(3,PWM_write);//pwm出力
    if(PWM_write == 255){
        digitalWrite(7,HIGH);
        }else{
        digitalWrite(7,LOW);
    }
    if(PWM_write == 20){
        digitalWrite(5,HIGH);
        }else{
        digitalWrite(5,LOW);
    }
    delay(100);//更新間隔を100msにする
}

リアリティーを求めて追及した

加速度とボリュームの回転角を比例させるだけでもリアリティーが上がりますが、P1だけでも最大速度まで加速してしまうというカオスな点が発生してしまいます。ですから現在の速度を加味して加速度を設定する必要があります。マスコンはロータリースイッチを使用しているので加速度の関数を4つ作ります。データを探していると電車の起動加速力についての記事があったので参考にしました。その記事を元に加速度と速度の関係をグラフにすると以下のとおりになります。

 スケール速度を考えずにArdiunoのPWMがMAX(255)のときに実車で122km/hがでると仮定するとP4のとき以下の式が成り立ちます(arduinoでは高精度の計算を行えないためあくまで近似値の出力です。尚、数式内の数字はarduino の出力です。)。

  • (0<x<=80) y=5
  • (80<x<=255) y=-x/40+7

 この式を元に0.75VのP3,0.5VのP2,0.25VのP1のそれぞれの式を作成し、プログラムにいれてやります。

 作ってから気づきましたがそもそもデューティー比と速度が比例していない可能性が高いです。模型内の列車をスケール速度で走られたいのであればモーターなどのデータをとって作成してみてください‼️

ケースの作成

 ぶっちゃけやらなくても良いのでサクッといきます。マスコンは丸棒で再現。ブレーキハンドルはKATOのパワーパックのものを流用。ケースとして使ったMDFボードが分厚くネジがはまらないので基本的にホットボンドで接着。ディジタルの速度計的なものがほしい場合はその都度Ardiunoに必要なプログラムを組み込んでください。アナログ速度計?電圧計がほしいのであればArdiunoの別のピンでanalogWriteで書き込みその出力をコンデンサで平滑して電圧計を繋げてみてください。

電源とレールへの出力は汎用性のあるDCジャックで作成

反転用トグルスイッチ、場所を間違えた気がする……

完成

やはりPWM周波数が可聴域で方弦波のためキーンという音がモーターからなっていて気になります。停車時だけですし、運転に集中すれば気にならない程度の音量なので我慢することにします。しかし、市販のコントローラーでそうした現象は起こっていないようなのでちゃんとした原因究明が必要です。

使用した部品

使用した部品を表にまとめます。

部品名 使用箇所 価格(参考) 販売店
Ardiuno nano 1 マイコン 500円 Aliexpress
Ac アダプター(12V 0.5A以上) 1 電源 600円 Amazonとか
7805 1 電源 40円 秋月電子
FT5754M 1 信号増幅   秋月電子
抵抗1kΩ 1 信号増幅 1円  
ボリューム10kΩB 1 ブレーキ 40円 秋月電子
ロータリースイッチ 1 マスコン 150円 秋月電子
抵抗75kΩ 2 マスコン 2円  
抵抗25kΩ 2 マスコン 2円  
抵抗10kΩ 2 マスコン 2円  
DCジャック2.1mm 2 コネクター 50円  
LED 2   10円  
MDF 1/2 ケース 54円 DAISO
    合計 1451円  

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です