SSブログ

コアレスモータ対応鉄道模型用コントローラの開発~その15・PIC版KATO KC-1~ [模型]

2018年12月15日の日記

PIC版基板テスト.jpg PIC版KC-1です。ただいまテスト中。

とうとう年も押し詰まってきました。先週までは夏みたいな気温だったのに,急に真冬[雪]並みの気温となり,皆様,体調管理にお気をつけてください。

さて,前回から1年経ちました。

ずっと宿題になって残っていたことを解決したいと思います。

KATOのKC-1コントローラはNゲージ用パワーパックの傑作だとiruchanは思っているのですが,マニアの中でもそう思っておられる方が多いと思います。1980年代の製品なのでとても古いのですが,非常に速度制御がスムーズで,特に最新のコアレスモータ搭載車両でも十分にスムーズに動き,最新のパワーパックをしのぐ,という評判もあるくらいです。

実際,iruchanも中古品をオークションで仕入れて性能を調べてみましたが,やはり今のパワーパックと比べても遜色ないどころか,きわめて低速もスムーズでだし,優れたコントローラだと思いました。

ただ,中古市場では結構値段が高いし,また,電源が別ユニットの上,本体もサイズも大きいので,場所を取ります。それに,工作マニアとしてはこれと同等の機能のコントローラを作ってみたい,と思いました。

そこで,iruchanは内部の回路を多少モディファイして簡略化し,サイズも大幅に小型化して現代によみがえらせたKC-1改を作りました。実際には順番は逆で,iruchanは先に自作して,あとからオリジナルを入手したんですけどね......(^^;)。

KC-1改は本ブログでも評判がよく,実際に何人かの方が作っておられるようで,性能がよいとお褒めいただきました。

ただ,残念ながら回路はテキサスのスイッチング電源用IC TL494(KC-1オリジナルではこれのセカンドソースのNEC製μPC494Cを使っています)を2個も使い,また,保護回路として一般的な電流制限形ではなく電流遮断型としたのでかなり複雑なものです。特に,リセット可能な電流遮断型の保護回路は安全なのはいいのですが複雑で,このあたりをポリヒューズで代用して作られた方も多いようです。KC-1のオリジナルはサイリスタを使った非常に複雑な保護回路だったので,iruchan版は比較的,簡単な方だと思ったのですけれど.....。

で,宿題というのはこの回路をPICを使って再現できないか,ということです。PICを使えば,もっと回路は単純で済みますからね!

それを,実は最初から考えてはいたのですが.....。

やはりPICだとソフトウェア制御なので,かなり難しく,昨年は作るのをあきらめていました。

原因は2つ。

ひとつはKATOのKC-1は低周波のPWMと高周波のPWMを組み合わせた2周波PWMコントローラなのですが,PICでは2つの周波数のPWM波を作ることができない,と考えていました。

もうひとつは低周波のPWMで,普通はモータ制御は20kHz以上の高周波でPWM制御します。PICは産業用のマイコンなのでモータ制御も得意で,一部には内部の回路にPWM制御回路を持ち,ハードウェアPWMができますが,KC-1のような低周波でのPWM波は作れない,と考えていました。

☆2周波PWMについて

いつもiruchanが使っている12F1822というPICは8ピンDIPという小さなパッケージなのにアナログ入力が4つ,PWMチャンネルが2つあるという,非常に模型のコントローラに好都合なPICですが,残念ながら,PWMが2チャンネルあっても,2つ別々の周波数で動作させることができません。

実は,複数のPWMチャンネルを持っていても,12F1822のように,別々の周波数で動作できるPICというのは少ないのです。iruchanは ない と思っちゃっていました。

☆低周波PWMについて

KC-1は走行用(モータ用)の低周波PWMのスイッチング周波数は50Hzほどですが,低周波PWMというのはこちらでも書きましたように,モータの損失が増え,また,循環電流が流れない領域が広く,振動がひどいので普通は使いません。低周波PWMをすると,一見,低速でスムーズになりますが,これはモータが瞬間的に起動,停止を繰り返しているためで,モータが振動し,大きな音を出します。これをKC-1は高周波のPWMと併用することによって常に循環電流が流れるようにして避けていて,巧みな設計となっています。
高周波でスイッチングをするとは言っても,10kHzくらいだと,かなり高い周波数なのに、まだモータからピーッという高い音がするので,普通は人間の耳に聞こえない20kHz以上の周波数でスイッチングします。実際の電車でも古いインバータ車がうるさいのは鈍足なGTOサイリスタを使っていて,スイッチング周波数が1kHz程度と低いためです。いまはIGBTなどの高速スイッチング素子を使うので電車も静かになりました。
 
一方,PICは自動車でも広く使われているように,機械の制御用マイコンなので,モータの制御用としても使われるせいでPWM機能がついていますが,さすがに50HzというようなPWM制御は考えていないらしく,このような低周波PWM波は出せません。
 
と思っていたのですが......実はできるのです。そういうことが最近,わかりました。

また,低周波PWMについては,たとえば,iruchanが使っている Great Cow Basic というフリーのPIC用BASICには,HPWMというコマンドがあり,PWM制御ができるようになっていますが,周波数はkHz単位になっています。また,実際に周波数を0.05kHz(=50Hz)としてコンパイルすると,一応,コンパイラは通っちゃうのですが(これも問題!)PICは動作しません。

まあ,それならソフトウェアPWMと言って,どのPICでもできるのですが,デジタル出力のポートをソフト的に決められた時間だけon,offしてやればいいのですが.....。

でも,なんかこんなことやるのは爺臭い! もっとかっこよくやりたいものです。そもそも,12F1822などの一部のPICにはハードウェアPWM機能があり,ソフト的にもさっきのHPWMコマンドのように,たった1行でPWM出力できるようになっているのですから......。

ところが,よく調べてみると,低周波PWMはそのPWM発生回路の中に,プリスケラと呼ばれる分周回路があり,その倍率を決めてやればできる,と言うことがわかりました。仮にPWM波を1kHzで設定し,プリスケラで1/16にしてやれば62.5Hzが発振できるはずです。

また,PWM波はPICのクロックを分周して作るので,出力したいPWM波の周波数を考慮してクロックも決める必要があります。適当なクロックで動作させると目的のPWM波が出ませんのでご注意ください。

今回,1MHzで動作させます。

ようやく,Great Cow Basicのフォーラムで低周波PWMを質問している人がいて,スレッドを読んでようやくやり方がわかりました。何か,サーボ回路などで50HzのPWMが必要になる場合があるようです。16F18325の場合,TxCONレジスタでプリスケラや使用するタイマーの設定を決めます。プリスケラを1/16とし,PWMチャンネルが5で,タイマーが2の場合,

                    T2CON=0b '0000110'

とすればOKです。こうすれば,最初にPWMのスイッチング周波数を1kHzと宣言したら,その1/16で62.5Hzで発振できることになります。これならKC-1と同等と言っていいでしょう。

それと,複数のPWM周波数を設定できるPICもあることがわかりました。

クロックを利用して決められた周波数で発振させるためのプリスケラを制御するタイマーが2つあればよいのです。12F1822はタイマーが1つしかないので,発振周波数は1つになってしまうのです。

このことに気がつくのに時間がかかっちゃいました。

ただ,実を言いますと,2つ以上の発振周波数が可能なPWM機能付のPICというのは自分で調べてもわからず,Microchip社に問い合わせてわかった,と言う次第なんですけど.....。

同社に問い合わせたところ,翌日には丁寧なメールが来て,16F1769というPICなら可能です,とのこと。10bitのADCもついていて,PWMも4チャンネルもあります。入出力ポートは18個もある,という盛りだくさんなPICです。

余談ですけど,こういう場合,やはり外資系の半導体メーカというのは本当に親切だな~と思います。アマチュアからの質問も丁寧に応対していただき,ありがとうございました。テキサスやモトローラ,ナショセミ(どちらも,もう,ない)にも以前,問い合わせしたことがありますが,分厚いデータブックを送っていただいたりして,本当に外資系は親切だと思っています。

また,Microchips社のサポート担当の方も,おそらく,このPICが秋月電子で売られていることをご存じだったのだと思います。立場上,そうとは書かれてはいなかったのですけれど,このPICなら簡単に手に入りますよ,という意味でご推奨だったのではないかと思います。本当に親切な対応だと感激しています。

それに引き替え,日系の半導体メーカの対応と言ったら......何でこんなこと聞いてくんだ? と言わんばかりの対応で,無視するところすらありますし,困ったものです。以前は驚いたことに手紙で問い合わせたのに電話がかかってきて,目的を聞いてくるところもありました......これじゃ,世界から取り残されるわな~~。

でも,16F1769をせっかく教えてもらったのに......う~~ん,ただ,なぁ~~~っ?。

と思っちゃいました。

というのは16F1769というPICは20ピンDIPとちょっと大きすぎるのです。それに,PWMは2つで十分だし.....。

と言うわけで,せっかく教えてもらったのに悪いですが,ほかにも複数の周波数を出せるPICがあるはず,と思って調べてみると,この16F1769と同じ機能でピンが14ピンの16F1765というPICがあるではないですか!

実はこういうPICは結構多くて,中の機能は同じなのにピン数が違う,というのがあり,さっきの12F1825もピン違いの12F1823と言うPICがあります(14ピン)。もちろん,ピン数が違う分,入出力のポート数も違うので便利です。

ところが.....。

16F1765は入手難なんですね~。1769だと秋月電子で売っているのですけれど.....。

そもそも16F1765のDIP版はRSコンポーネンツはそもそも全パッケージ取り扱いなし,Digi-KeyもSMD以外在庫なし,と言う具合でMOUSERでしか売っていないようです。しかも1ロット5,000個!! ほんなににいらんちゅ~~の~~!! ほかはどれもSMD版しかありません。秋月の16F1769はDIPなんですけどね.....。

と,思ってブログを書いている間に改めてMOUSERのホームページを見たら最低発注数量は1で,単価¥195となっています。この前は在庫なしで,5,000個注文しろ,ということだったんですけど......。こちらの方はデータシートが日本語だし,▼の16F18325より使いやすいと思います。実は18325は製造中止らしく,今は秋月で安く手に入りますけど,あとで困りそう。iruchanも買いだめしておくつもりです。

16F1765mouser.png なんや,ちゃんと売ってるやんか!

TSOPやTSSOPなどのSMD(表面実装)タイプだとやはり基板にはんだづけしてしまって,基板上にデバッグ用のピンヘッダを取りつけてPICkit3などでデバッグする,と言うやり方になってしまいます。これじゃ,やりにくいですよね~。

しかたなく,ほかを探してみると,16F18325というPICがよさそう。これだとPWMは2つですし,パッケージはDIP14ピンと小型です。おまけにお値段も@100円と激安!!

ただ,これはドはまりでした........[雨][雨][雨]

結局,無事にソフトが動作するようになるまで2週間もかかっちゃいました。やはり不慣れなPICというのは大変です。特に,番号からもわかるとおり,断然,16F18325の方が12F1822よりも新しく,機能満載のため,設定が大変でした。特に,PPSレジスタが加わり,これ,Peripheral Pin Selectという機能で,今まではAD入力やPWMなど,各機能別にピンが分かれていたのですが,このレジスタの各ビットを変更することでいろんなピンにこれらの機能を割り当てることができる,と言うスグレものです。

PPS register.jpg

   PPSレジスタ(16F18325データシートから)

ただ.....。

この設定は非常にやっかいです。もちろん,うまく設定しないと予定している機能が出ません......orz。

まず,入力か出力か,アナログ(ADC)かデジタルか,を決めて,さらに出力の場合はPWMやCCP,OSCなどの出力信号のソースを決めないといけません。Great Cow Basicだと読込まれるヘッダファイルにこれらの変数が決められているので,

           #define USE_HPWM5 TRUE

などと宣言して設定します。Microchip社の統合開発環境だとCを使いますが,その場合はそれぞれレジスタをビット単位で設定して決めます。

おまけに,PPSレジスタはロックされているので,一度,ロックを解除してから設定し,再度ロックする,と言う操作が必要です。こんなの初めて!

と言う具合で,いろいろやっているうちにトラブル!!

何回,PICkit3をつないでも接続できません!

"Target Device ID(0x0) is an Invalid Device ID" と出ます。

これ,皆さんも経験していると思いますが,しょっちゅう出ますよね~。たいていはケーブルの接続が緩くてデータがうまく通信できない,と言うだけのトラブルです。

ところが,今回は何をやってもダメ.....。どうやらPICを壊しちゃったようです......[雨]

target device ID(0x0).jpg あちゃ~~~。

あまりに何回もデバッグのため,電源を入れたり,切ったり,PICkit3を接続するためにアダプタに取りつけたりしてたので,PICが壊れちゃったようです。特に,本機は基板の中で12Vを使っていますから,おそらくどこかのピンに12Vが印加されたのだと思います。

PICはC-MOS構造なのでやはり過電圧には弱いです。皆さんお気をつけてください。

低周波PWM波形.jpg やっと低周波PWMができました。

ようやく低周波のPWM波形が出てくるようになりました。ほぼ0%から100%までスムーズに変化します。出力周波数は63Hzでした。

低周波PWM波形(最低duty)1.jpg 最低デューティです。

低速でスムーズに起動するためには最低デューティが重要です。さすがに低周波PWMなので,最低デューティは0.9%です。コアレスモータ機は2%台のデューティで発進してしまいますから,本機は合格です。

こうしてやっと,本当にようやくでしたけど,低周波PWMが実現できました[晴れ][晴れ]

ということで,次回は過電流保護などのルーチンを組み込んでテストしてみたいと思います。回路については次回,詳しく解説します。

        ☆           ☆          ☆

けさ,iruchanは自分と子供らの朝食を作るために目玉焼きを作ったら,1個,黄身が2つ入っていました[晴れ][晴れ]

珍しいので,子供らに見せました。嫁はんはまだグ~グ~寝てます......orz。

二子目玉焼き.jpg 年に1個くらいありますけど.....。



nice!(7)  コメント(0) 

nice! 7

コメント 0

コメントを書く

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

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

Facebook コメント