鉄コレを買ひに~鉄道コレクシヨン・京浜急行旧600形冷房車~ [模型]
2018年12月27日の日記
とうとう年も押し詰まってまいりました。これで今年最後の更新です。本年もどうもご愛読ありがとうございました。
今年は年の最後にiruchanにとってはビッグなプレゼントがありました
なんと,大好きな京浜急行の旧600形の冷房改造車の鉄コレが出るんです
5年前に冷房改造前のオリジナルの鉄コレが発売されています。それを冷房改造しようかとも思っていたのですが,いずれ冷改車が出るだろう,と読んでそのままお蔵入りになってしまっていました。
ようやく冷改車が出ることになりました。
実は,非冷房車から冷房改造をするのはこの車の場合,かなり難しい話になります。特に,非冷房車は換気口つきのモニター屋根になっていて,もとの非冷房車の屋根が使えません。それに,車体の方も運転台部分の屋根に切欠きが設けられ,屋根の形状も変わってしまっています。一時はGMの600形キットの屋根板を使って改造しようかとも思ったのですけど......。
面倒だな,と思っているうちにとうとう,冷改車の鉄コレが出ました。
一応,早めに情報はつかんでいたのですが,ちょっと心配したのは販売個数。普通は鉄コレは1万個なんですけど,これは5000個。ちょっと少ないんじゃ,と思いましたが,最近の鉄コレの販売数はこんなものなのでしょうか。明らかにこの前の京阪1900系冷改車など,ほかの鉄コレも事業者限定のものでも行列が短くなっているし,値段が上がったこともあり,以前ほどは売れなくなっているようです。
さて,iruchanは発売当日,前回同様,北陸から新幹線に乗って上大岡の京急百貨店へ向かいました。まだ開店前から並ぶ人が多いので,早速,社員の方がエレベータに案内してそのまま7Fのフェア会場へご案内いただきました。屋外で並んでちゃ寒いし,本当にありがたいです。7Fでも,"トイレに行く方はご連絡ください" と会場のお姉さんが呼びかけていますし,至れり尽くせりのサービスには感激です。ありがとうございました。
ただ.....。
前回の非冷房車や,iruchanは買いに行きませんでしたけど,並んでいた人の話だと昨年の1000形冷改車に比べるとかなり並んだ人は少なかったようです。
う~ん,iruchanもちょっと残念ですけど,京急の旧600形はもう,生前の姿? を覚えている人も少なくなり,人気のある車種じゃなくなってきているのでしょう。それに,並んでいる人の年齢を見てみるとどう考えても平均年齢は50を超えている感じ.....。もうそんな時代なんですね....。だから京急百貨店さんも販売台数を減らした,と言う具合なのでしょう。
まあ,鉄コレに限らず,鉄道マニア自体もずいぶんと平均年齢が上がっているし,iruchanもやっているオーディオや電子工作なんかもすっかりおじさんの趣味となり,若い人はスマホにSNSなんでしょうね~。それにどんどん,若い人は減っているわけですから.....。
と言うわけですが,気を取り直してあこがれの旧600形冷改をゲットできました。本当にうれしいことです。今回はプレミアム仕様ということでブックレットつきも発売されましたので,往年の600形快速特急の姿も楽しめます。
色もなかなか深みがあって,いい感じです。やはり前照灯は点灯化工事をすることにしませう。
台車は東急製TS310を履いています。ちょっと600形はOK台車,と言うイメージがあるのでiruchanは2本目をOK台車で改造しようかと考えています。
残念ながら,冷房改造時に屋根も大幅に改造され,この前の非冷房車の鉄コレを冷改するときも屋根板の交換が必要なのであきらめました。
さて,年が明けたらじっくりとNゲージ化に取り組んでみたいと思っています。
☆ ☆ ☆
iruchanの嫁はんが珍しく今年はクリスマスプレゼントをくれました。
嫁さんは手芸が趣味で,いろいろなにやら作っていますが,今年はアナ雪の生地を使ってざぶとんと背もたれカバーを作ってくれました。背もたれの生地は夜は☆が光ります!
では,皆様本年もどうもありがとうございました。よいお年を。
コアレスモータ対応鉄道模型用コントローラの開発~その16・PIC版KATO KC-1~ [模型]
2018年12月22日の日記
やっと走行試験にこぎ着けました
難敵? のKATO C12をテスト中です。コアレスモータ搭載なので,2%程度のデューティでも走行してしまい,通常のコントローラでは常点灯になりませんが,本機では無事に成功です。停車中に前照灯も点灯しています。
☆ ☆ ☆
さて,先週,KATOの名コントローラKC-1のPIC版をご紹介しました。今週はデバッグして試験します。
まず,先週はKC-1の特徴である,高低2波のPWM波を発振させるため,まずは低周波PWMを動作させました。
PICに限らず,普通,DCモータは20kHz以上の高周波でスイッチングするのが当たり前なので,PICにはPWM発生機能がありますが,使用しているPIC用BASIC言語の Great Cow Basic のデフォルトの発振周波数が38kHzであることからもわかるとおり,KC-1のように50Hz前後という低い周波数で発振させるのはとても難しかったです。
最初,iruchanはこれはできない,と考えていました。GC BasicではハードウェアPWM制御用にHPWMというコマンドがありますが,設定周波数の単位はkHz単位となっていて,1kHz以下の周波数は設定できません。
でも,何のことはない,ちゃんとPWM波設定用のレジスタをきちんと設定すれば可能であることがわかったので,先週,無事に60Hzくらいの周波数で発振させることができました。
次はいよいよ常点灯用の高周波PWM波の発振をさせることができれば無事に成功! というわけだったんですが......。
これも結構,茨の道.....。
またまたドツボにはまってしまいました。
何度やっても20kHzくらいのPWM波が発振できません......
なんとか,発振させることができた,と思ってもほとんどデューティが0か100か,という感じでスムーズに発振させることができません。
いったい,どうなっとるんや.....。
と言うことでまた1週間つぶしてしまいました。今まで,何度もPICのPWM制御をやりましたけど,発振周波数で苦労したことはありませんでした。
よ~~く,考え直してみると,PWM波というのはPICのクロック周波数を分周して作っているので,低周波PWMの時に苦労しましたけど,クロックと密接に関連しているので,やはり簡単なはずの高周波PWMの方もきちんと計算しないといけません。なまじ,GC Basic は簡単にひとつのコマンドでハードウェアPWMができちゃうだけに,なめちゃっていました。
☆PICによるPWM周波数の決定
16F18325のデータシートを見ると,PWMの発振周波数の計算が載っています。データシートは周期になっているので,周波数に書き換えると,
となります。ここでfoscはクロック,TMRpreはプリスケーラの倍数の逆数(×8,×16など),PR2はPRレジスタの値です。タイマーが4の場合はPR4レジスタとなります。今回,低周波はタイマー2を,高周波はタイマー4を使います。resolutionは分解能です。
これで,なんとか,60Hzと20kHz前後の周波数が設定できるよう,PR2とプリスケーラ,クロックの3つを決めます。3つもあるので大変です。
結局,上記の式をExcelで計算し,適当な値を決めました。クロックは1MHzで動作させます。
fPWM 62.5Hz 17.9kHz
PR2 &hFF &h0C
プリスケーラ 1/16 1/1
分解能 10 5.8bit ※ fosc=1MHz
本当はなんとか高周波を20kHz以上にしたかったのですけれど.....。17.9kHzがやっとでした。20kHz以上にすると今度は低い方の発振周波数が上がっちゃいます.....orz。
まあ,ほぼ18kHzともなるとほとんどの人は聞こえないと思いますので,大丈夫だと思います。
さて,ようやくこれで高周波の方のPWMも動作するようになりました。
☆コアレスモータ対応のためのドライブ段の設計
さて,お次は高周波を出力して常点灯に対応させるのですが,これには条件がつきます。
従来のコアつきモータの場合は問題ないのですが.....。
コアレスモータはこの記事にありますとおり,2%台のデューティでも発進してしまい,常点灯に対応しなくなってしまいますので,最低デューティを1%台にしたいと思います。まあ,何とか,2%台前半に収まれば合格,と思っていますけど......。
でも,これ,むちゃくちゃ大変なのです.....。
仮に,スイッチング周波数を20kHzとして,デューティ1%と考えると,パルス幅は0.5μsです。目標として,2%未満と考えても,1μsの幅しか許されない,と言うことになります。
そんなの楽勝じゃん! と考えてはいけません。
バイポーラTrなら絶対に無理な数値なのです。高速スイッチング可能なMOS-FETでなら楽勝,と言う数値ではあるのですが,MOS-FETも前提条件があります。
たとえば,バイポーラTrとして,鉄道模型用のコントローラでよく使用されたNECの2SD560ダーリントンTrの場合,規格表には次のような数値が出ています。
出力されるパルス幅は ターンオン時間+蓄積時間+下降時間 以下にはできません。
とゆ~ことは,2SD560の場合,5.7μs以下のパルス幅は出力できない,と言うことになります。ほれじゃ,あかんやん......。そもそも,NECの規格表もパルス幅50μsに対して実験したものだし.....。
ただ,バイポーラTrでも,iruchanが使っている2SD409などで実験してもなんとか1μs台のパルスを出すことは可能なようです。おそらく,Nゲージなんかの軽い負荷の場合,コレクタ電流はせいぜい0.1Aくらいなので,このように小さな電流の場合は比較的高速にスイッチングできるのだと思います。
一方,MOS-FETの場合はこのうち,蓄積時間は0なので,非常に高速です。
同じNECの2SK2412の場合ですけど,単位がμsじゃなくて,ns なのに驚きます。
tonとtoffがパルス幅の限界と考えられますが,両方足しても0.085μsにしかなりません。
もちろん,MOS-FETは電界で動作する素子なので,バイポーラTrのように蓄積時間というものはありません。
蓄積時間というのはベースに外部から電子を供給すればonしますが,今度は蓄積された電子が抜けないとoffにならないので,その電子を抜くまでの時間です。MOS-FETだと電界で動作するので,この部分がないのです。
じゃ,MOS-FETの方が断然いいじゃん,と思っちゃうのですが.....
実はここに落とし穴があり,MOS-FETは入力容量Cissがバカでかいのです。バイポーラTrの場合はベース~エミッタ間を導通させて使用するので,この部分の容量は元から非常に小さいのですけど,MOS-FETはこの間が絶縁されており,金属酸化物がコンデンサとなって容量を持っちゃうのです。
CissはMOS-FETのCg-sとCg-dの和なのですが,これが入力容量として作用します。また,FETは電圧制御素子なので,ゲート電流は流れない,と思われていますが,この容量分を充電するための電流が流れます。
外部から電流を流すと,まずはこのコンデンサに充電され,FETのしきい値電圧Vthに達するまで,FETはonしません。また,offするときはこのたまった電荷を抜くまでoffしません。
iruchanも愛用している,80年代の開発で非常に古い2SK442はCissが小さく,330pFですが,90年代の2SK2412でもCissが小さく,860pFなのに(これでも非常にでかい!),あとでLTspiceでシミュレーションする,東芝の2SK2466の場合,3250pFもあります。最近のMOS-FETほど,Cissが大きくなっています。8000pFなんてあるものもあります。もう,天文学的数字だとiruchanは思っています。その点,同じ電圧制御素子である昔の真空管だとこの値は数pFですし,ソケットなども含めた実装時の容量は100pFくらいだと思いますから,MOS-FETは入力容量がでかすぎます。もし,2A3なんかでコントローラを作ったら非常に高速なものができるんじゃないかと......iruchanは考えています......(^^;)。
ということで,MOS-FETを使って高速スイッチングさせるには,やはりドライバ段が必要となります。大容量のコンデンサの充放電のため,大きな電流を流してやる必要があるからです。▼のように,かなり大げさな回路をつけ足してやることが必要です。
まあ,せっかくありがたい仏様がいらっしゃるのに,脇に立っている小僧さんに多額のお布施をしないと御利益が得られない,というわけです.......orz。しかも,最近のものほどCissが大きく,まるで本物の宗教みたい....なんてことは言ってはいけません。
☆PICによるMOS-FETドライブ回路
さて,じゃ,ドライブ回路というのはどうすりゃいいんだ,と言うことになりますが,こちらでも書いていますが,次のようなものです。
コンプリメンタリーTrをプッシュプルで動作させます。プラスの時は上側のNPN TrがMOS-FETのCissに電荷を低インピーダンスで注入します。パルスが0Vになると,下側のPNP TrがonしてCissに溜まった電荷を急放電します。
ちなみに,はき出す方をソース,吸い込む方をシンクなんて言ったりします。ついでに,日本語だと吐き出し電流,吸込み電流と言ったりします。ほのまんまやないか~。
RGはMOS-FETの発振防止のため挿入します。10~100Ωくらいです。大きくしちゃうとCissの充放電の時定数となるので,あまり大きくできません。なくても構いませんが,オシロで見て発振するようなら入れないといけません。
一方,なにげない抵抗なんですけどRsが実は大問題で,値によって大きく性能が左右されるばかりか,場合によっては,▼に示すように,使用するICの規格表によっては入っていません。
▲のようなプッシュプルドライバなら不要なのですが,シングルドライバの場合は絶対必要です。後で詳しく書きます。
プッシュプルドライバの場合は,下側のPNP Trが放電してくれるので,不要です。
抵抗は全部なくても大丈夫です。ただ,この場合,ドライバに瞬間的に結構大きな電流が流れるので,注意が必要です。RB1,RB2はベース電流を制御してコレクタ電流を抑えます。
ただ,実際,このようなドライバ回路を挿入してある場合はほとんどないと思います。iruchanも実際の回路では見たことがありません。
理由は単にコストの問題でしょう。それに,1μsのパルスが必要,なんて場合がおそらくほとんどないからなのでしょう。モータをPWM制御することは今は非常に多いのですが,普通は数十%というような大きなデューティで動作させるので,わずか1%とか,2%とかといった低いデューティのパルスを出すことはほとんどないからです。その意味で,鉄道模型というのは直流モータを駆動する場合としては特殊だと思います。
なお,NPN(プッシュ)側は▼の説明にもありますとおり,ICの中でエミッタ出力となっていることが多いので,こちらの方ははるかに楽です。それで,単純にDiのP-N接合で代用してしまう場合も多いです。iruchanも前回のKC-1改ではこのようにしました。
さて,実際にPICなどのマイコンでMOS-FETをドライブする場合,ドライバ段を使っていない場合がほとんどなのですが,この場合,注意が必要です。実は2種類あります。
これ,どう違うんや? ってことなんですけど......。
ICの出力部分がどのようになっているかによって回路を変えないといけないのです。よく,PICなどマイコン関係の本に書いてあるのは下の回路です。東芝のMOS-FETの資料にもこう描いてあります。
ただし,この場合,ICの出力回路がプッシュプルになっている必要があります。C-MOSのICはたいてい,プッシュプルになっていると思います。PICの場合も普通はプッシュプルになっています。ところが,驚いたことに16F18325なんかそうですけど,ODCONAレジスタのビットによってプッシュプルかシングルか選択ができるようになっています(デフォルトはPP)。何の意味があるんだろ,と思いますけどね.....。
TTLのロジックICや,KC-1のオリジナルで使用されているTL494などのICの場合,出力がシングルのTrになっていて,エミッタで出力されている場合が多いです。特に,70年代や80年代の頃の設計のICはこうなっている場合が多いです。
このとき,Rsを挿入しておかないと,MOS-FETのCissに溜まった電荷を逃がすことができません。
よく,ちゃんとICがパルスを出力しているのに,出力がデューティ100%となって出力全開となるトラブルがありますけど,原因はこれです。この場合,必ず100~1kΩくらいの抵抗でMOS-FETのゲートを接地してください。Rsは小さい方が高速でスイッチングできますけど,ICの出力電流の制限がありますから,あまり小さくしないでください。
いずれにしろ,MOS-FETをドライブするためには接続するPICなどのICの出力回路がどのようになっているか,確認が必要です。また,この場合,最大出力電流(ソース,シンク電流)の値を確認する必要があります。KC-1改で使ったTL494は250mAもありましたが,PICの場合はせいぜい20mAのようです。これでも十分大きい値なのですけど,大容量のCissを持ったMOS-FETをドライブするには不足であると考えています。
もう一つ,▼の回路のR3も結構,問題があります。最初,10kΩにしておいたら,パルス幅が2μsくらいとなってしまいました。これじゃあかんやんか,と言うわけで小さくしてみます。この抵抗は下側のPNP Trのベース電流を決めます。ベース電流を大きくしてやらないとCissの放電電流が小さくなって,パルス幅が大きくなってしまいます。
さて,ちょっと,シミュレーションで確認してみませう。
教科書や,東芝のwebにある,MOS-FETの記事などに載っている回路です。ドライブ回路として,PNP-NPNのコンプリメンタリTrを使ったプッシュプル回路です。パルスが出ているときは上側のNPN Trがonし,反対にパルスがないところでは,下のPNP Trがonして電荷を充放電します。
ただ,シミュレーションしてみるとわかりますが,プッシュプル回路と言っても,プッシュ側の方がやたら大きな電流を流し,下手すると最大定格を超えて壊れてしまうので,ベース電流を制限するため,抵抗を入れてあります。反対にプル側のPNPの方は不足気味なくらいです。
では,R3の大きさによるパルス幅の違いを見てみませう。クリックすると拡大します。
R3が1kΩの時はパルス幅は1.4μsです。パルスの立ち上がりにNPNのTrのエミッタ電流が増え,逆に立ち下がりはPNP Trのエミッタ電流が流れてCissに充電された電荷を逃がしていることがわかります。PNP側の方が電流が小さく,立ち下がりをいかに速くするか,が課題だというのがよくわかります。
ただ,10kΩにすると,やはりこれらの充放電電流が小さくなり,パルス幅も大きくなります。2μsくらいになっちゃいますね。
結局,基板を作って実際にはR3は470Ωまで小さくしました。100Ωくらいにするともっと高速になりますが,PICのピーク電流定格を超えちゃうのであきらめます。
回路を載せておきます。2つのPWMチャンネル出力をスイッチングDiと抵抗でミックスしています。本来ならORの論理ICを入れるべきですけどね~~。面倒なのでアナログ合成です。
もっとも,16F18325は論理回路も作れます。この2つのPWMのORを取るくらいできるので,そうするともっと回路をシンプルにできますが,ソフトをいじらないといけないので,このままです。
出力部分にスナバ回路を入れています。こうしておくと,波形の立ち下がりが緩くなり,車両側にスナバ回路を入れなくても常点灯+逆向き前照灯の点灯防止ができるはずです。
75×35mmの大きさです。基板上に出力信号のモニタ用のLED(オレンジ)を取りつけました。これをつけておくと,テストの時も,運転中も便利です。
☆ ☆ ☆
さて,ようやくこれでうまくいくようになりました。波形を載せておきます。
ちゃんと,低周波の大きなパルスの間を埋めるように高周波のパルスが出ていることがわかります。
周波数は16.5kHzです。若い人だと聞こえちゃうな~。
でもパルス幅は1.1μsですし,最低デューティは1.83%で2%を下回っていますから合格です。
大きくオーバーシュートしているのが気になりますけど.....。ピーク電圧は15.8Vになっています。瞬間的なので全然問題ありませんけど,おそらく,ゲートに挿入する抵抗RGをなくしちゃっているからだと思います。やはり10Ωくらいは入れてみて,ピークを抑えた方がよいと思います。
12月23日追記
さて,ようやくKATOのC12の試運転にこぎ着けたのですが.....なんと,最低デューティ1.8%でも動いちゃうじゃないですか!!
こちらで,C12の最低起動デューティを調べていますが,そのときは2.7%でした。同じくKATOのコアレス機D51ギースルエジェクタでは4.6%でしたけど,その時はC12は大変だ~っと思っていました。
ところが,本機でテストすると,本機の最低デューティは1.83%なのに,非常に低速なんですが,動いちゃいます。
困ったな~~~
手としては,デューティをもっと下げればよいので,
☆スイッチング周波数を低くする
☆最低出力パルス幅を狭くする
しかありません。
ただし,現状,スイッチング周波数は16kHzなので,これ以上,下げちゃうと完全に音として聞こえてしまいますので,この手は使えません。
となると,次の手は最低出力パルス幅をもっと狭くして,現状,ほぼ1.1μsなので,この半分で0.5μsだったら大丈夫,という気がします。
しかしなぁ~~。
今までの議論でおわかりいただけると思いますが,これは非常に大変なのです。PIC直結のドライブ法だと無理だと思います。
一応,本機は高速プッシュプルドライバを入れているので何とかなる,と思いましたけど....。
とりあえず,ソフトを再検討します。
でも,何度やっても1μs以下のパルスが出てきません。
なんでや~~!?
頭を抱えちゃいましたが,やはり,PICのPWMコントローラの周波数分解能の問題だと思います。今までの話でおわかりいただけるように,PWMの周波数やデューティはPICのクロックと密接に関係しているので,もう一度,クロックから考えてみます。
結局,何のことはない,現状クロックを1MHzにしていたのですが,2MHzにしないと最低パルス幅は1μsより下がらないのです。16F18325のデータシートをよく読んでみると,CCPR4L(タイマー4の場合)レジスタで最低パルス幅が決まっちゃいますが,最低の1にしておいてもクロックが1MHzではパルス幅は1μsにしかならないことがわかりました。
となると,クロックを2MHzにしてやればOKのはずですが.....。
今度は低周波のPWMが当然パルス幅2倍になっちゃうので,スイッチング周波数も120Hzくらいになっちゃいます。
こちらの方はプリスケラを現状,1/16なのを1/32にしてやればええやろ,と思ったのですけど....。
残念ながら,プリスケラは1/16の次は1/64でおしまいです......orz。
結局,クロックは4MHzにしてようやく一件落着でした。高周波側のプリスケラは1/4にしました。
こうしてなんとか,高周波スイッチング周波数を20kHz,低周波はそのままで63Hzにすることができました。
最低デューティは1.4%です。C12はこれでは動きません。
最低パルス幅は0.363μsでした。こんな狭い幅のパルスを出力するのはきわめて困難です。やはり高速プッシュプルドライバとMOS-FETの出力段が必要です。
なんとか,C12が止まったままで前照灯を点灯させることができました
本機の高周波パルスはVR全周で0~5%の範囲で可変できるようにソフトを組んでありますので,非常に常点灯の範囲も広く,楽勝でこのように機関車が止まった状態で前照灯だけ,点灯させることができました。なお,コアレス機の場合は最大デューティにしちゃうと動き出しちゃいますので,ご注意ください。通常のコアつきモータだと調光用のVRを最大にしても動くことはないのですけど....。
次回はソフト制御の電流遮断型保護回路についてソフトを開発します。
コアレスモータ対応鉄道模型用コントローラの開発~その15・PIC版KATO KC-1~ [模型]
2018年12月15日の日記
とうとう年も押し詰まってきました。先週までは夏みたいな気温だったのに,急に真冬並みの気温となり,皆様,体調管理にお気をつけてください。
さて,前回から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も買いだめしておくつもりです。
TSOPやTSSOPなどのSMD(表面実装)タイプだとやはり基板にはんだづけしてしまって,基板上にデバッグ用のピンヘッダを取りつけてPICkit3などでデバッグする,と言うやり方になってしまいます。これじゃ,やりにくいですよね~。
しかたなく,ほかを探してみると,16F18325というPICがよさそう。これだとPWMは2つですし,パッケージはDIP14ピンと小型です。おまけにお値段も@100円と激安!!
ただ,これはドはまりでした........。
結局,無事にソフトが動作するようになるまで2週間もかかっちゃいました。やはり不慣れなPICというのは大変です。特に,番号からもわかるとおり,断然,16F18325の方が12F1822よりも新しく,機能満載のため,設定が大変でした。特に,PPSレジスタが加わり,これ,Peripheral Pin Selectという機能で,今まではAD入力やPWMなど,各機能別にピンが分かれていたのですが,このレジスタの各ビットを変更することでいろんなピンにこれらの機能を割り当てることができる,と言うスグレものです。
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を壊しちゃったようです......。
あまりに何回もデバッグのため,電源を入れたり,切ったり,PICkit3を接続するためにアダプタに取りつけたりしてたので,PICが壊れちゃったようです。特に,本機は基板の中で12Vを使っていますから,おそらくどこかのピンに12Vが印加されたのだと思います。
PICはC-MOS構造なのでやはり過電圧には弱いです。皆さんお気をつけてください。
ようやく低周波のPWM波形が出てくるようになりました。ほぼ0%から100%までスムーズに変化します。出力周波数は63Hzでした。
低速でスムーズに起動するためには最低デューティが重要です。さすがに低周波PWMなので,最低デューティは0.9%です。コアレスモータ機は2%台のデューティで発進してしまいますから,本機は合格です。
こうしてやっと,本当にようやくでしたけど,低周波PWMが実現できました
ということで,次回は過電流保護などのルーチンを組み込んでテストしてみたいと思います。回路については次回,詳しく解説します。
☆ ☆ ☆
けさ,iruchanは自分と子供らの朝食を作るために目玉焼きを作ったら,1個,黄身が2つ入っていました
珍しいので,子供らに見せました。嫁はんはまだグ~グ~寝てます......orz。