SSブログ

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

2017年6月10日の日記

PFM&PWM controller基板5.jpg 今日はモード切替機能付です。

さて,今週は先週までに作った,PIC版のPFM&PWMコントローラのソフトを修正します。

修正項目としては,

  ☆最低デューティを2~3%とする

前回は最低デューティを1%としていましたが,やはり停車時に若干,前照灯が暗いので,少し最低デューティをupして明るくしたいと思います。

  ☆PFM⇔PWM切り替えデューティの変更

前回は5%のデューティでPFMからPWMに切り替えるようにしていました。KATOのコアレスモータ搭載機は大体,4~8%くらいで起動するので,できればPFMモードのうちに起動させたいと思い,今回,モード切替デューティを10%とします。このため,最高スイッチング周波数も50kHzから100kHzに変更となります。

  ☆フルPFMモードの追加

今までは考えていなかったのですが,前回製作したタイマIC555を使ったハードウェア版が非常にスローがよく効いて,性能がよかったので,PIC版でもフルにPFMのモードで動くようにし,スイッチで切り替えできるようにしたいと思います。ただ,この場合,うまく動作するかは微妙なのですが.....。

  ☆A/D変換は10bitとする

12F1822は通常のPIC同様,8bitのA/D変換器がついていますが,やはり分解能が低く,少し階段状にLEDの明るさが変わるように見えるのと,4倍分解能の高い10bitのA/D変換器も持っているので,今回,10bit版を使うことにして,なめらかにデューティが変化するようにします。言うまでもありませんが,8bit版だと0~255の段階ですが,10bitだと0~1024の間で変化します。

なお,今回,12F1822のA/D変換は10bitを使っていますが,ややこしいので,以下,通常のPICが持っている8bitのA/D変換機能のまま説明します。

【PFM&PWMモード】

まずは前回同様,PFM&PWMモード版についてですが,デューティおよびスイッチング周波数は▼の通り変化します。

PFM&PWM controller 周波数・duty1.jpg 

  デューティおよびスイッチング周波数の変化

このとき,PFMはoff期間の時間を調整してデューティを調整します。t_offはoff期間を示します。

最低デューティは3%とします。さすがに4%台にしてしまうとコアレスモータは起動してしまうので,ギリギリのところです。PFM⇔PWM切り替えデューティは10%としましたので,12F1822のA/D変換機能を使って,ボリウムの電圧をA/D変換した結果が3(8bitの場合。10bitだと102)を超えたところでPWMモードに移行するようにします。

PFMモードのまま,デューティが10%を超えるとPWMモードとなり,100kHzでスイッチングします。以後,パルスの幅が太くなって最終的にデューティ100%となります。

duty(PIC PFM+PWM min).jpg PFM+PWMモード最低デューティです

duty(PIC PFM⇔PWM ).jpg PFM⇔PWM切替デューティを10%としました

   PFM⇔PWM切替時(PFM最大,PWM最小)

ほぼ10%でPFMからPWMに移行します。

duty(PIC PFM+PWM ).jpg PWMモード時

PWMモードに移行すると,パルスの数は増えず,幅が広くなっていきます。最終的に100%となって,完全な直流となります。

【フルPFMモード】

さて,次はフルPFMモードです。こちらはうまくいくかどうか,ちょっと不安な点があります。

そもそもPICがどれだけの周波数を出力できるか,と言うことなんですが,一応,今回,12F1822は32MHzで動作させますので,Microchip社の規格表を見る限り,12F1822は最高,333kHzでスイッチングできるようですが,本当にこの通り動くかどうかというのは不安がありますので,実験して調べてみます。

PFM&PWM controller 周波数・duty2.jpg フルPFMモードの時

残念ながら予想どおりで,最初,最高333kHzとなるようにPFMのソフトを組んだのですが,やはりうまく動きませんでした。

最初,最高周波数333kHzで計算して,パルス幅3μs,最低デューティ3%で動作させてみたのですが,最高周波数は250kHzくらいで止まってしまいます。そのとき,デューティも80%くらいです。

オシロを見ていると,大体,240kHzくらいで突然波形が変わり,以後,75kHzくらいになってしまいました。なんで低くなるのかよくわからないのですけど....。

もちろん,最高周波数を240kHzとして動作させてみてもいいのですが,この場合,最低のスイッチング周波数は10kHzを下回ってしまいます。これだと機関車からピーッと音が聞こえちゃうので不可です[雨]

うまくいきませんね.......。せめて333kHzでちゃんと動いてくれればいいのですけど.....。

しかたないので禁断の封じ手を.....。ソフトをいじっちゃいました.....(^^;)。

すでに最高周波数の時にデューティが80%を超えているので,それ以上のA/D変換入力が来たときはデューティ100%とするようにソフトを組んじゃいました。具体的には252(10bitだと1020)以上の時には強制的に100%とします。

こんなことしちゃ,いけないんですけど......,iruchanはごまかしちゃいました。一応,iruchanも本職は技術者? 単なる事務屋という話もありますけどなので,こんなことやっちゃいけないのはわかってはいるんですけど......。

と言う次第ですが,まあ,この時点でほぼ最高速になっているし,コントローラのつまみもほぼ右一杯,という状況だし,▲のグラフを見てもこんな状況になっているので,運転していて気づくことはないと思います 気がつかないからと言ってやっていいか,と言うことはあるのですけど......。

さて,これでオシロで再確認します。

duty(PIC PFM+PWM min).jpg 最低デューティです。

今回,最低デューティは3%を狙いましたが,少し太めでした.....。でも,これならコアレスモータは回転しないので大丈夫です。

duty(PIC full PFM max).jpg フルPFMモード時最大

  ここから先,デューティ100%に飛んじゃいます......(^^;)。

さて,ソフトの方ですが,フルPFMモードを追加した最終版を載せておきます。例によってso-netはテキストファイルしかupできないので,拡張子は.txtとしてありますが,これを.hexに書き換えてPICkit3などのライターで12F1822に書き込めば使えます。

    (ソフトは改訂しました。最後に載せました)。

回路については,前回のブログに載っているこの回路を使ってください。

なお,最後になりましたが,フルPWMモードをつけるかどうか,ということが考えられるのですが,PWMだとスローがあまり効かないし,常点灯範囲も狭いのでやめました。それにモードが3つだと,ロータリーSWが必要になっちゃいますしね。もっとも,PICだとタッチスイッチを使えるものもあるので,そんな風にして切り替えるとかっこよいとも思えますが......(^^;)。

あとはちょっとメモ書きです。

今回,フルPFMとPFM+PWMモードの切り替えができるようにしましたが,PORTA.3を使って切り替えています。

一応,Microchipの規格表を見ると,PORTA.3(#4ピン)はプルアップされているので,そのまま,スイッチを入れてGNDに接続するかどうかで切り替えができると最初,思っちゃったんですが,動きません。

何のことはない,PICのプルアップというのは中に抵抗が内蔵されているわけじゃなく,Trでポートのプルアップの設定をしているので,このTrを内部でonさせないとこのプルアップが有効とならないのでした.....orz。

でも,これ,非常に面倒です。いろいろレジスタの切り替えが必要で,半日つぶれちゃいました。これなら外付けで10kΩくらいの抵抗を#4ピンにつけてVccにつないでおく方がはるかに簡単でした。

下記のコマンドの記述が必要です。' 以下はREM文です。

#config MCLRE=off    '#4ピンはデジタル入力

set OPTION_REG.7 off     'OPTIONレジスタ7bit(WPUEN)ビットクリア
set WPUA.3 on               'RA3弱プルアップ有効

こうして,なんとかPIC版のPFMコントローラが完成しました。いずれケースに入れてちゃんとしたコントローラにすることにします。モードがわかるようにLEDもつけておきましたしね.....[晴れ]


2017年7月16日に追記

きちんとケースに入れました。記事をこちらでご紹介しています。

2017年8月13日追記

驚いたことに,6月に発売されたKATOのC12は想定より最低デューティを小さくしないと停車しないことがわかりました。D51と同じソフトじゃ,動いてしまうんです[雨]

しかたないのでソフトを書き換え,最低デューティを1.5%としました。ようやくこれでC12が止まるようになりました[晴れ]

duty(PIC PFM+PWM min C12対応版).jpg C12対応版の最低デューティ波形です。

ソフトは下記の通りです。so-netはhexファイルをupできないのでテキストファイルにしておきます。.txtを.hexにして書き込んでください。

PFM&PWM controller.txt

 


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

nice! 5

コメント 9

Vivid

おはようございます。
PFM/PWMコントローラの完成おめでとうございます。
小型のPICをコンパクトに基板にまとめられて、性能も併せて、お見事です!
動作音が可聴範囲外というのは、やはり大きな特徴ですね。レイアウトの台座部分で共振して更に大きな音にならないで済みそうです。
当方は、あれから、パルス幅と周期を変えて、色々予備実験を進めています。
面白いことにも気づきました。ゆくゆくは、自動定速制御まで出来ればと目論んでいますが、果たして、、、
by Vivid (2017-06-13 07:53) 

iruchan

どうもいつもご覧いただきありがとうございます。

今回はフルPFMはやはり無理で,ちょっとごまかしちゃいました。

ただ,いずれも可聴帯域外でスイッチングしているので静かです。そういえば,本格的なレイアウトを組まれていると,台座から音がしちゃうんですね。どうもありがとうございました。

それにしてもPICは予想外の現象が出たり,やはり難しいです。その点,Vividさんはとてもよくご研究されているようで,さすがです。
by iruchan (2017-06-13 08:46) 

ばなな

初めまして。
ブログ、興味深く拝見しております。
試しに真似して作って見ようと思っています。
回路図など拝見して、2点ほど気になりましたが、ご教授いただけないでしょうか?
(1)回路図では2SC2655のコレクタが12Vに繋がっているようですが、パターン図では5Vに繋がっているように見えます。どちらかが間違っているのでしょうか?それとも私の読解力不足でしょうか?
(2)パターン図の左下に1Kの抵抗があるようですが、回路図には出てこないようです。これはテスト用などで使用するためのものなのでしょうか?
よろしくお願いします 
by ばなな (2017-06-14 13:44) 

iruchan

どうも大変失礼しました。

パターン図ではドライバ回路は5Vラインから取っています。本当は回路図の通り,12Vラインから取った方がよいのですが,パターンを製作するときに5Vラインの方が作りやすかったためです。

なお,回路としてはどちらでもOKです。12Vラインにつなぐと12Vのパルスが,5Vラインだと5Vのパルスが出て,MOS-FETをドライブするだけのことで,MOS-FETのしきい値電圧を超えているので,どちらでもドライブできます。

ただ,3VのPICを使うような場合は12Vラインから取らないとMOS-FETを十分ドライブできないので,ご注意ください。

出力の1kΩはテスト用ですが,これがないとLEDのみが負荷になるので,オシロで波形を見ると見にくいため,実装上は入れています。

なくてもかまいません。
by iruchan (2017-06-14 14:15) 

ばなな

ご回答ありがとうございました。さっそく作ってみました。PICだとIOポートが少なく、変更・拡張がやりにくいので手軽にArduinoで作ってみました。
減速。正転・逆転もソフトで処理させてます。子供が遊ぶので、走行中でも構わずに進行方向を切り替えてしまうので、出力はリレーをかまして、(進行方向スイッチの操作で、自動減速、反転、自動加速)
自動的に最近は簡単にデジタル制御できるので楽ですね。
オシロではいい感じでiruchanさんの波形にそっくり出ているようです。後で物置から線路を引っ張り出して試してみます。
(オシロ、写真で見ると、私のオシロと同じメーカーのようですね。)
うまくいったら、上位コントローラのソフトをWindowsアプリで作って、Arduinoへ通信制御させて自動運転を目指したいと思います。
低速で走らせるのが楽しみです~。
これからもよろしくお願いします。

by ばなな (2017-06-15 08:36) 

Vivid

こんにちは。

アドバイスをいただきましたので、ご報告です。
低速の定速制御コントローラですが、なんとかご紹介できるところまで来ました。
PFMだけで、超低速から通常走行まで、「手動」では成功していましたが、自動で「定速」を維持するところではまっていました。
結論から言いますと、BEMF値計測から「定速制御」をする所を、PFMではなくPWMにして、応答性を高めたら、何とかそれらしきものが出来ました。
お時間がありましたら小ブログ、覗いてやってください。


by Vivid (2017-07-09 10:00) 

iruchan

Vividさん,どうもコメントをありがとうございました。

ブログを拝見させていただきました。素晴らしいですね。また今後ともよろしくお願いします。
by iruchan (2017-07-10 07:55) 

じいじ

先ほど、「その14」で報告させていただきましたが、こちらでも報告事項があります。
「敷居が高い」と避けていた本機の製作ですが、遂に完成しました。
必要な道具とおっしゃっていたPICkit3と変換アダプタのセットがAmazonさんで安く売っていたため、著名な参考書とともに購入してしまい、必要部品の調達中にPICのにわか勉強(所詮にわかです)をして、一気に本機を製作してしまいました。
常点灯対応改修済みのC12(KATO製)を使い本機の試験をしました。今回は、製作上の失敗が無く何故か一回で試験をクリアです。(製作の腕が上がったかな?(笑い))
年内にハード式とPIC式の2台のコントローラーが完成しました。いろいろお世話になりました。有難うございました。
ところでC12での走行結果です。ボリュームは8時~18時の回転ですが、ミックスモードの場合、11時半くらいで青LEDがチカチカし始めたころくらいで静かに超スロースタートです。一方Full PFMモードの場合、15時くらいでの超スロースタートとなります。
少しPFMの立ち上がりが遅いのではと思いますが、私の感覚では、実運転には全く支障なく、感動の超スロースタートでした。
私としては、現状で満足しておりますが、もしPFMの立ち上がりが遅い(?)件で、何かアドバイスがいただければ幸いです。回路図との相違は、78M05の使用と、ダーリントン接続の出力と2SK2412のゲートの間に10Ωの抵抗を入れました。また、ハード式とPIC式で330Ωと47Ωの抵抗の位置が逆ですが、これは回路図通りです。
by じいじ (2017-12-29 16:09) 

iruchan

じいじさん,本文にも書いてありますとおり,フルPFMモードはコアレスモータ用に設計してあるので,デューティの変化がきわめて緩慢になるようにしてあり,起動位置がPWMモードやmixモードに比べて大幅に遅くなるのは当然のことです。本ブログの2つのグラフのデューティ変化をご覧ください。

お持ちのC12についてですが,少々おかしい感じがします。もし,デジタルストレージオシロをお持ちでしたら,起動時のデューティを調べてみてください。コアレス機なら2~3%くらいで起動するはずですが,お持ちのC12は起動時デューティが異常に大きくはありませんか。そんなに起動時の角度が大きいのはおかしい感じです。

オシロをお持ちでなければ,ほかのコアレス機と比較してみてください。

なお,出力回路については本現象と関係ありません。
by iruchan (2017-12-31 21:03) 

コメントを書く

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

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

Facebook コメント