2017年6月10日の日記

 今日はモード切替機能付です。

さて,今週は先週までに作った,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はoff期間の時間を調整してデューティを調整します。t_offはoff期間を示します。

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

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

 PFM+PWMモード最低デューティです

 PFM⇔PWM切替デューティを10%としました

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

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

 PWMモード時

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

【フルPFMモード】

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

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

 フルPFMモードの時

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

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

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

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

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

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

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

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

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

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

 最低デューティです。

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

 フル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もつけておきましたしね.....#58942;。



2017年7月16日に追記


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


2017年8月13日追記


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


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


 C12対応版の最低デューティ波形です。


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


PFM&PWM controller.txt