第23週 CCP(PWM)でDCモータ駆動(2:ソフト編1)  
   
またまたたまたままた聞きのそのまたまた聞きで聞いた話です。舌噛んだ?
男女機会均等とかでキャビンアテンダントなんて訳わかんない呼び方になってしまったお仕事、内実は結構大変だそうで、半分近くはホテル泊まり。早出の朝など、ついつい疲れて寝坊なんかしようものなら優しく厳しいチーフお姉様から部屋に電話がかかってくるそうな。お時間ですよ。みなさんもう集まって待ってますよ。優しい言葉できつい声。はいっ!あわわわ、あたふた、あたふた。なんて光景なんでしょうかね。想像ですけど。
と、まあ、こんな伏線があってのその事件。
フライトが早く終わってみんなでホテルに着いて、さあ夕食を一緒に、となったのですが、まだ時間もあるので夕方6時に出かけようと一旦部屋に戻って一休み。日頃の夜遊びのせいかどうかはともかく、ついうとうと昼寝してしまって、電話の電子音ではっと目が覚めると時計は6時。お時間ですよ。みなさんもう集まって待っていますよ。はいっ!あわわ、あたふた、あたふた。
数分後、華やかでラフなウエアの一団の前に、きりりと制服に身を包んだ彼女がエレベータの中から飛び出してきたんだと。
ま、このくらい仕事熱心でありたいものです。(^^;
ちょっと創作入ってるかな。(^^)


CCPモジュールのPWMモードを使う(ソフト編1)

まずスイッチ設定で速度を可変にするプログラムです。
スイッチを割り付けたポートBの<RB2:0>の3ビットを速度設定に割り当てて、<RB3>を回転方向に割り当てます。
運転中でも速度変更、回転方向変更をできるようにします。




初期設定
 (1) ポートの入出力設定。
   このとき、CCP1,CCP2に相当するRC2、RC1(順序が逆!)も出力設定しておかないと出力が出ない。
 (2) PR2(タイマ2周期レジスタ)に周期を設定。
 (3) CCP1CON,CCP2CONの<Bit3:2>を11としてPWMモードに設定
   このときCCPxCONの<Bit5:4>(デューティ設定の下位2ビット分)も一緒に設定。(0とした。)

モータ駆動
 (1) スイッチ読み込み。汎用レジスタ SWDT に保存。
 (2) 速度部分抽出。シフトして<Bit7:5>に配する。下位のBitは0とする。
   このときRLF命令によるCフラグの影響を排除するため最後に11100000Bでマスク。
 (3) 回転方向をチェックして、たとえば正転ならデューティのレジスタCCPR2Lを0として出力せず、CCPR1Lに
   速度設定値をセットする。
 (4) T2CON<Bit2>に1を設定してタイマON。
   このときタイマ2のプリスケーラT2CON<Bit1:0>は0としてプリスケール1とする。
 (5) 0.2秒待ち
 (6) これを繰り返して、常時書き換えることにより0.2秒の応答感度で運転中の変速、逆転が可能。

レジスタ書き込みまとめ

TRISC PORTC入出力 <Bit2:1>を出力モード *****00* 0H
PR2 タイマ2周期 プリスケーラT2CONBit<1:0>のとき0FFHで19.53kHz 0FFH
CCPxCON CCPモード <Bit3:2>が11でPWMモード
<Bit5:4>はデューティ下位2ビットに割り当て
0CH
CCPRxL デューティ比 CCPxCON<Bit5:4>と併せて10ビットで
デューティ
その都度
T2CON タイマ2プリスケーラ
タイマ2動作開始
Bit<1:0>でプリスケーラ設定(00:1)
Bit2で動作開始
04H


プログラムはこちら

 

ディップスイッチの切り替えによってパルスのデューティが変化し、それに従ってスピード、回転方向が刻々と変化します。


トラブル

◎ 回転方向を決める方法を迷いました。
  最終的に片方のデューティを0にする方法を採りましたが、これは試行錯誤の結果です。

  1.はじめポートを入力設定しておき、出力させる側を出力設定にする方法。
    バンク切り替えがめんどうで、おまけになんでかうまくいきませんでした。理由は不明。
  2.参考書ではMOSFETブリッジの一角を別ポートを汎用出力にしてそっちで駆動ON/OFFさせています。
    出力を2個多く使うし、万一プログラム上でビットを逆に出力させたら短絡でパチンですからどうも気に入りません。

  結局、デューティのレジスタCCPRxLの一方をデューティ0に、もう一方をスピード設定値にすることで切り替えました。

◎ ハードの問題ですが、MOSFETが案外使いにくい素子でした。
  1.初め、大は小を兼ねると 2SK2482 を使用しましたが、CCP端子からデューティパルス出力は出ているのに
    パワーMOSFET
は駆動しません。
    調べた結果、ゲート・ソース間電圧Vgsが規格表でVgs(OFF)3.5Vmaxとなっていますが、よくよくデータシートを
    見るとVgs(OFF)とVgs(ON)は厳密には違う値で、またドレイン電流によってもことなり、実際には5Vでは不足す
    るようです。

  2.次に 2SK2414 に代えたら駆動しました。
    ただやっと回転している程度で、モータにかかる電圧を測定すると2Vそこそこでした。
    やはりゲート・ソース間電圧をもっと高くしてあげなければ無理のようです。
  3.モータ電圧、ゲート電圧とも12Vに上げました。ゲートにはCCP端子からデューティパルス出力をオープンコレクタ
    のバッファ7406を経由して入れました。これでそこそこ元気に駆動。
  4.でも、デューティ値を小さくするとパルスは出ているのにモータは回転しません。
    モータの特性のせいなのかは判りませんが、
モータにかかる電圧をオシロで調べるとパルスOFFのときにマイナス
    側に振れていて平均すると概ねゼロになってしまいます。これは宿題です。



■今週のなるほど


◎ ポートの割付でCCP1,CCP2に相当するRC2、RC1は数字の昇順が逆。こいつには騙された。
◎ MOSFETのゲートに加える電圧は素子によってかなり違う。