SSブログ

コアレスモータ対応鉄道模型用コントローラの開発~その10・PFM&PWM式~ [模型]

2017年6月4日の日記

PFM&PWM controller+D51.jpg 今日はPICで作ります。

前回まで,PFM式のコントローラを作って調整しました。今まではタイマIC555を使ったハードウェア方式でしたが,今日はPICを使ったソフトウェア方式で作ります。

PFM式は非常に性能がよく,鉄道模型に適していると思います。正直言って,作った本人が自分の作ったものにこんなこと言うのは慎むべきだと思うんですが,今までのコントローラとは次元が違う,という感じがします。

もちろん,今まで,iruchanはPWM式をずっと作ってきたわけですが,それは従来のレオスタット式やトランジスタコントローラ式の連続制御タイプのものにくらべてPWM式がスムーズに起動して,鉄道模型に適していると思っていたからですが,PFM式はそれこそ,PWM式に比べてもさらによく,次元が違うレベルという感じがします。

具体的に言えば,新幹線TGVというくらい違います

                                                               もちろん,TGVの方が優れています....(^^;)

ご乗車になった方はおわかりいただけると思いますが,TGVの方がはるかに車内は静かですし,乗心地は新幹線なんて比べものにならないくらい揺れずにスムーズに走っています。iruchanも初めて乗ったとき,"次元が違うな~" と思いました。新幹線なんて,車内の騒音はひどいし,通路を歩くのも大変なくらいですからね.....。

まあ,ある意味,車内の騒音レベルは高い方が酔っ払いやおばはんのグループが大声で騒いだりしていても気にならないのでいいのかもしれませんが........。TGVだとおばはんがうるさくてたまらんだろうな。いや,向こうのおばはんはレディーだから,騒ぐようなことはないかぁ~。車内で酒飲んで騒いだり,大声で世間話をして盛り上がったりなんて,やはり日本はレベル低いな~,と思います......[雨][雨][雨]

と言う次第で,ちょっとPFM式コントローラの特性について調べてみたいと思います。

今まで,コアレスモータ用には高速PWM式を開発してきました。実際,DCモータの教科書なんかにはPWM式のことは詳しく書いてありますし,普通,ブラシ付DCモータはPWMで制御する,というのが常識でしょう。

とはいえ,従来の教科書は自動車や産業用の機械など,ある程度高速で回転し,ギヤで減速するようなモータについて書かれていると思います。

確かに,そのような場合はモータは高速回転していますので,PWMで制御する場合のデューティも80%とか,高いものでしょう。

でも,鉄道模型は考えてみると,ごく低速で起動させ,通常運転時も低めのデューティで運転することが多いと思います。その場合はPWMでは適していないのではないか,と考えています。

もし,産業用の機械なんかで,DCモータを数%のデューティで常時回転させる,なんて設計をしたら上司に叱られるでしょうね。ところが,鉄道模型はこのあたりのデューティの制御が重要なんです。

従来のPWM式はスイッチング周波数を20kHz以上とした場合,出力の素子のスイッチング速度が遅く,低デューティのパルスが出てこなくなり,突然,5%以上のデューティのパルスが出てくる,という特徴があります。そこで,出力素子のドライブ段を挿入して,出力段の高速化を図って1%以下の低デューティのパルスが出るようにしたのを開発してきました。

と言って,やってみるとここまで来るのに結構苦労しました。なかなかPWMだと1%程度のパルスを作るのにも苦労しちゃいます。

ところが,PFM式はパルスの幅は一定で,パルスがoffとなっている期間を調整してデューティをコントロールするので,低いデューティのパルスなんていくらでも作れちゃいます。

と言う次第で,PFM式は非常にコアレスモータを使った模型でも低速から起動するので,起動がスムーズであることがわかります。

でも,それだけじゃなく,前照灯や室内灯などのLEDが点灯してから,モータが回転して模型が走り始めるまでの間に非常に余裕がありますし,起動してから最高速に達するのも非常にスムーズです。

まずはPWM式のデューティについて再度,考えてみます。

simulation 20kHz.jpg従来のPWM式の場合(Spiceシミュレーション)

第4回に載せましたが,iruchanが昔作った従来のPWM式の場合,スイッチング周波数を20kHz以上にすると,低いデューティのパルスが出てこなくなり,▲のグラフの ━ 線のように0%からスムーズにデューティが立ち上がらず,突然,10%くらいからパルスが出力されます。

これでも,従来のコアつきモータの模型の場合は起動時のデューティが30%以上なので問題はなかったのですが,コアレス機は数%のデューティで起動してしまうので,このようなコントローラだとラピッドスタートになっちゃいます。

本当は原点から直線的にデューティが100%に変化していかないといけないのですけどね.....。

もちろん,直接原点からだとちょっとつまみを回しただけで模型が動き出しちゃうので,少し,"遊び" の部分を作ってやりますけど。

今回開発した,高速タイプのPWM式コントローラだと最低デューティは1%以下なので十分,コアレスモータに対応できます。

では,PFM式の場合はどうでしょうか。PFMだとこうなります。

PFM controller 周波数・duty1.jpgPFM式の場合

ちょっと,横軸が変で,さっきの図と左右が逆になってしまい,申し訳ありません。実は,Excel2013で横軸を左右反転することができるのですが,そうするとどうしてもグラフの線が ━ 線しか反転せず,  は反転しませんでしたのであきらめました。Excelのバグじゃないでしょうか?

ただ,今回製作したPFM式はこの図の通り,速度調整のボリウムは抵抗値が大きい方が低速となりますので,普通のPWM式とは逆です。ちなみに,KATOのKC-1も同じですけど。

でも,このグラフを見て納得。PFM式だとデューティの変化がきわめてゆっくりです。

ただ,これだと,最高速あたりで急に加速し,まずいんじゃない? と思われる方もいらっしゃると思いますが,実際,運転してみて,そんな風には感じませんし,むしろ非常にスムーズに加速する,という印象を受けます。実際の電車は速度が上がるほど,加速度は下がってくるので,逆な感じがするんですけどね.....。

おまけに,よくこのグラフを見ていただきたいのですが,横軸は対数軸になっています。

横軸が対数軸でこんなにカーブが緩やか,ということは,もし,横軸が直線だったらもっと緩慢な曲線になるわけです。

PFM controller 周波数・duty2.jpgPFM式の場合(X軸はリニア)

これじゃ,デューティ100%のあたりがよくわからないので,ひとつ上のグラフでは対数軸にしました。

よく,PWM式のコントローラを作る際に,調整用のボリウムをBカーブじゃなく,Aカーブで作る方がいらっしゃいますが,このような効果を狙ったものでしょう。

ボリウムは何種類もありますが,大きく分けてAカーブとBカーブの2種類があります。

Aカーブは対数曲線になっていて,小さな抵抗値の間は緩慢で,大きくなるほど急激に変化するようになっています。

これは,本来は音量調整に使うもので,人間の耳の特性に合わせてこんなカーブになっています。ですから,アンプやラジオなどの音量調整にはAカーブのものを使います。ここにBカーブのものを使うと小さな音量のところが調整がやりにくくなっちゃいます。

もっとも,普通の電圧調整用なら直線の方がやりやすいので,直線状に変化するものがBカーブです。

ほかに,Cカーブやバランス調整に用いるM-Nカーブというものもありますが,今では入手が困難です。

そこで,鉄道模型は低速が重要だからと,Aカーブのボリウムを使いたいのですが,PWM式だと先述の理由の通り,低いデューティのパルスは出てこないので,あまり意味がありません。と言う次第で,iruchanは今まで,鉄道模型のコントローラはいつもBカーブを使っています。

ところが,PFM式はAカーブのように変化します。

ただ,実を言うと,Aカーブだと対数軸の場合は直線になるはずなので,PFM式はAカーブ以上に緩慢に変化する,と言うわけです。

これならスムーズに速度が変化しますね[晴れ]

また,最大抵抗値(速度で言うと,一番低速の位置)を見ていただくと0になっていません。

PFM式は絶対にデューティが0%にはなりません。

だから,速度調整のつまみを一番左に回した状態でも必ずパルスが出ていて,前照灯&室内灯が点灯します。

これもPFM式の特長です。

ある意味,停車中にもずっと前照灯が点いちゃうわけなので,どうしても消したい場合はコントローラをoffするしかないのは問題なんですけどね.....。

でも,そういう場合は単にスイッチを1個,追加するだけでOKですので,問題ないと思います。

次に,周波数についてみてみると,右側の第2主軸に周波数が表示されます。

残念ながら,今まで書いてきましたとおり,周波数はPWM式の場合は一定ですが,PFM式は大きく変化します。

20kHzからスタートすると,最終的には2MHzくらいになっちゃいます。

もっとも,高周波になると自然に波形が崩れてきて,iruchanが作ったものは160kHzくらいでデューティが100%となるので,問題ないと思います。

といって,高性能なPFM式を設計するとマジで1MHzくらいの周波数となりそうです。

こうなると模型に問題はないのか,と心配になりますし,また,レールがアンテナになってAMラジオに雑音が出そうです。

と言うことで,低速はPFM,高速はPWMとしたいのですが,そういうコントローラは作れないのでしょうか。

事実,スイッチング電源にはこういう設計をするものが増えてきていて,スイッチング電源用のICもPFM&PWM両対応のものが出てきています。

MaximやLinear Technology,Texas Instrumentsからも出ていて,こういうICは使えないかとiruchanはさんざん規格表をにらんで調べてみたのですが,鉄道模型など,モータ制御用に使えるものはなさそうです。それに,これらのICはいずれも表面実装のICになっちゃっているので,たとえ使えたとしても,はんだづけするのにも苦労しそうです。

そんなわけで,あっさり,PICを使うことにしました。

PICだったらA/D変換してボリウムの位置を調べ,その電圧をもとに,低速はPFM,高速はPWMと切り替えができそうです。

と言う次第で,いきなり回路です。クリックすると拡大します。

PFM&PWMコントローラ(PIC)1.jpgPFM&PWMコントローラ回路図

ちょっと複雑に見えますが,いくつもあるLEDはインジケータ用なのでなくても構いません。MOS-FETはNECの2SK2412を使いましたが,これはMOS-FETの割にCissが小さく,ゲートしきい値電圧も低いので使いやすいFETです。

今回の研究成果である,2SA10202SC2655によるプッシュプルドライバ回路を挿入していますので,他社のMOS-FETでもOKです。

もっとも,今回,PFMモードのパルスは1μsと従来の0.5μsより倍広いので,ドライブ回路は不要かもしれません。パルス幅は3μsくらいまでなら許容範囲です。

PWM式コントローラ(PIC・最簡略版)1.jpg最簡略版

もっと,回路を簡単にしたい,と言う方は第4回に載せた▲の回路でもOKだと思います。なお,MOS-FETのゲートに入れる抵抗はできるだけ小さい方がよく,10Ωくらいにした方がよいと思います。最悪,直結でもよいとは思うのですけど.....。寄生発振などの問題もあるのでおすすめしませんが。

PFM⇔PWMの切り替えはとりあえず,デューティ5%としました。その場合,デューティや周波数の変化は次の通りとなります。

PFM&PWM controller 周波数・duty.jpgデューティ,スイッチング周波数の変化

こんな風に,ボリウムが低い位置ではデューティの変化は緩慢で,PWMモードに切り替わると直線的に上昇します。一方,スイッチング周波数は最高50kHzで頭打ちとなります。まあ,PFM⇔PWM切り替え点は10%の方がよいかとも思っているのですが....。実験して決めたいと思います。

ソフトは大苦心。やはり,大変でした。

簡単にすぐ作っちゃったのですが,うまく動作するまで,昨日から2日かかりました.....orz。

最初の問題はやはりPFM。そもそも使用したPIC 12F1822をはじめとして,PICにはハードウェアPWMの機能を持つものがあっても,ハードウェアPFMの機能を持ったものはありません。

しかたないので,最初はデジタル出力ポート(PORTA)を計算したデューティと周波数で指定した時間だけon,offするソフトにしましたが,うまく動きません。どうしても出力パルスは5μsくらいです。

そんなはずはないんだけどな......と思ってみましたが,よく考えてみりゃ,最高,50kHzでスイッチングするのに,1波ごとに計算してたんじゃ,間に合うわけがありません。

そこで,変ですけど,ハードウェアPWMをPFMのルーチンでも使うことにし,一定の時間ごとにサンプリングした基準電圧ごとに同じくデューティと周波数を求め,それでハードウェアPWM(CCPポート)を使うことにしました。

これでようやくPFM波が出力されるようになりました。

ところが,どうしてもPFMモードのときに,最初と途中で2回,出力がoffになる期間があります。

そんなはずはこれもないはず。ソフトもバグはありません。

結局,これもCPUのクロックの問題でした。やはり応答速度なんですね。最初は12F1822は16MHzで動かしていましたが,最高の32MHzで動かしたら解決しました。

これで,ようやくPFMモードは解決したと思ったんですが,今度は次のPWMのモードが変。どうしても最高デューティが75%くらいになっちゃってて,100%になりません。

最初は出力段の応答速度かと思ったのですが,そうではなく,マジで12F1822が75%くらいのデューティのパルスしか出力してません。

何じゃ,こりゃ[雨]

半日かかっちゃいましたが,結局,原因はデューティを計算するところが問題。

PICはしょせん,8bitのCPUなので,変数は浮動小数点は扱えないので,デューティの計算などは全部整数でやらないといけませんが,そのため,うっかりかけ算の一部の項で計算中に0.1とか,1未満の数字になると結果が有無を言わせず,0になっちゃったりするので気をつけないといけませんが,今回はオーバーフローしちゃってました。そのせいで,デューティがエラーになっていたようです。使用している,Great Cow Basicはintegerは-32767~32767の間なんですが,うっかり,計算中にこの範囲を超えてしまっていました。結局,duty,freqなどの変数をLONG型に変更してOK。やれやれ[晴れ]

PFM&PWM controller基板1.jpg 基板が完成しました。

今回,基板上に4個もLEDを載せちゃいました。iruchanは光ものが大好きなので......(^^;)。

ピンクのLEDはパイロットで,単に電源が入っているかどうかのチェック用です。5V用にレギュレータ78L05を入れているので,それのモニタです。

ほかに,PFM,PWMのモードを示すためのLED(緑,青)を入れました。こんなの入れておくとモードの切り替えがわかって楽しいですね。また,出力のモニタ用に電球色LEDをつけました。これはないと不便です。

PFM&PWM controller基板2.jpg PFMモードの時

PFMモードの時は緑色のLEDが点灯します。最大デューティは5%なので,出力のモニタ用の電球色LEDもボ~ッと点灯しているだけ,というのはおわかりいただけると思います。

PFM&PWM controller基板3.jpg PWMモードの時

PWMモードに切り替わると青色のLEDが点灯し,デューティは直線的に変化し,最後に100%となります。出力の電球色LEDも明るく点灯します。

ただ,今回は失敗で,PFMモード指示用に使った緑色のLEDは暗すぎるし,逆に,最近お気に入りのアイスブルーのLEDは逆に明るすぎでした。

どちらも秋月で買ったものですけど,よく輝度を調べて買わないと明るさがまるで違うのでご注意ください。▲の回路図でも,緑色のLEDの電流制限抵抗が100Ωなのに対し,アイスブルーの方は22kΩにもなっています。これくらいでようやく明るさがほぼ同じくらいとなりました。しかたないので,後日,オレンジ色の超高輝度タイプのものに変更しました。今どきこんな暗いLEDはさすがに必要ないと思います。▲の回路図は変更後のものです。

オシロの写真を示します。

PFM&PWM controller min duty.jpg 最低デューティです。

今回,パルス幅は1μsでソフトを組みました。それより低いデューティのパルスを出力しています。ただ,いくらPICがこのように狭いパルス幅のパルスを出力しても,出力段のMOS-FETの入力容量の問題をクリアしないとこのように狭いパルスが出力できませんのでご注意ください。やはりドライバ段は必要だと思います。

PFM&PWM controller D51起動duty.jpg KATOの新D51起動時です。

このように,ボリウムを回していくとPFMモードなので,パルス幅は変わらず,パルスの数が増えていきます。

驚いたことに,KATOのコアレスモータを搭載した新D51はこのように低いデューティで起動します。最近のED70だとコアつきモータなので,やはり30%くらいで起動し,PWMモードに入ってからになります。

PFM&PWM controller D51 PWM duty.jpg PWMモードです。

デューティが5%を超えると,今度はパルスの数は変わらず,幅が広くなっていきます。

PFM&PWM controller 最大 duty.jpg 最後です。

最終的にデューティが100%となって最高速度になります。

なお,試運転してみた結果はやはりコアレスモータだと5%程度のデューティで起動してしまいます。できれば,コアレス機はPFMモードで起動した方がスムーズですので,もう少し,PFM⇔PWMモード切替デューティは高い方がよいと思います。

PFM&PWM controller基板.jpg プリント基板図

サイズは55×29mmです。

PFM&PWM controller基板(部品配置).jpg 部品配置(部品面から)

と言う次第で,なんとか,PFM&PWMモード混合タイプのコントローラを製作できました。もうしばらくソフトを組み替えてテストしてみます。ソフトについては,修正後,upしたいと思います。もうしばらくお待ちください。


2017年6月10日追記

ソフトの最終版を載せました。つづきをご覧ください。

nice!(5)  コメント(4) 

nice! 5

コメント 4

Vivid

こんにちは!
PFM+PWM by PIC回路の完成おめでとうございます。
わかりやすいグラフもお見事です!
私もここしばらく、PICでPWMとPFMの組み合わせのプログラムを考えておりました。(PIC16F1716)
PWM回路の制限で、PFMで操作するためにPWMの繰り返し周波数を最低20KHz程度から2.5MHzくらいまで変化させられるのですが、Dutyは0.4%-50%くらいで頭打ちなりました。
また、おっしゃる通り初めのうちはVR変化に出力がほとんどUPしないので、そのあたりの線形性の改善も必要です。
途中でPWMのDutyを増やしつつ繰り返し周波数を上げる必要がありますね。
当方はコアレスモーター機が配備されていません(笑)ので、ちょっと試運転ができませんが、おかげでよい勉強になります。
by Vivid (2017-06-05 11:23) 

iruchan

Vividさん,どうもコメントありがとうございます。
一応,PIC版が完成しましたが,ソフトはまだ不十分で,切り替えデューティを10%にしたり,A/D変換を8bitじゃなくて,10bitにしたりしたいと思っています。
それにしても,ご研究素晴らしいですね。2.5MHzまでいけるならフルにPFMでいけそうですが,頭うちしちゃうんですか。
一応,次回,フルPFM版とPFM+PWM版の改良ソフトをテストしてみたいと思います。
by iruchan (2017-06-05 20:59) 

Vivid

こんにちは。
一つ教えていただけるとありがたいのですが。
PICでPWMモードを使用して、疑似的にPFMを作って、テストしています。
パルス繰り返し周波数を、可聴範囲外(20KHzスタート)にした場合、Dutyを比較的下げても10%前後でスタートしますが、結構なダッシュになります。目視で2cm/秒くらいです。
貴兄の場合のスタート初速はどのくらいでしょうか?
今回は、kato旧C11(コアあり)でテストしました。

by Vivid (2017-06-07 16:35) 

iruchan

どうも申し訳ありません。今回は実測したわけじゃないのでわかりません。

ただ,前回の555 ICを使ったものと全く違和感ない感じでしたので,1cm/sくらいにはできていると思います。

20kHzでスイッチングした場合,私のソフトだとパルス幅は1μsとしていますが,ラピッドスタートになる場合はPICの信号をうまく出力のMOS-FETがそのまま出力できていない,と言うことが考えられます。

オシロをつないで,パルス幅が1μsとか,ご指定の値になっているか,ご確認ください。

なお,擬似的にPFMを作っておられるとのことなので詳細が不明ですが,20kHzでデューティ10%だと,パルス幅は1μsとして,ちゃんとoff期間が9μsになっていますでしょうか。

また,コアつきモータでもPFMモードだとうまくスローで起動します。ED70やEF70もスローで起動しました。
by iruchan (2017-06-07 19:58) 

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

Facebook コメント