以前[PWMの実験]をしました。その後コントロールが面倒なのでやっていませんでした。最近Mikro-Cを初めてライブラリーが使えるようになり動作が簡単になりました。
プログラム的にはタイマー2の設定など、ほとんど気にする事無くライブラリーの利用だけです。
ICは8PinのPIC12F683です。良く使うPIC12F629/675にはこの機能が付いておりません。設 定
★動作周波数(例えば3KHz)
★デューティ比(例えば50%)
この2つを設定し、動作させスタートやストップのコマンドを入れるだけ。
★スタート
★ストップ
スタートのみだと、そのまま動作が続く。
デューティ比はプログラムで変更出来ます。
★この他に基本的なI/Oの入出力設定は必要です。出力端子はCCP1に出力されます、ICによっては位置を変更出来ます。今回実験したのはただLEDの点滅(0.5秒)ですが明るさはデューティ比を変更すると変えられます。
動作させて、波形をチェックするとON-OFFの時間は予定の周波数になっていました。また0.5秒で点滅をしていました。
外見上はその様な動作ですが、実はLEDは高速でON-OFFしています。LEDとパラレルに圧電ブザーを付けるとLEDが点灯する度に「ピーピー」と音が出てPWMが作動しているのが確認出来ます。プログラムは簡単
PIC12F683 PWM-TEST By M.Kikuchi /* Begin:2009/4/5 _CONFIG $2007 FCM_OFF IRSO_OFF BOD_OFF CPD_OFF CP_OFF MCLRE_OFF PWRTE_ON WDT_OFF INTRC_OSC_NOCLKOUT */ void main() { unsigned short cnt; // OSCCON=0b01110000; //8MHz ANSEL =1; TRISIO=0b00000000; GPIO=0; // PWM_Init(3000); //3KHz cnt=127; Pwm_Change_Duty(cnt); //50% while(1) { PWM_Start(); Delay_ms(500); //0.5Sec PWM_Stop(); Delay_ms(500); } }
問題点
プログラム上でDelay_ms(500)を2つ入れました。コンパイルされたアセンブラを見ると長いブロックのプログラムが2回入っています。当然といえば当然なのですがサブルーチン化して呼び出せば、全体のプログラムは大きく減ります(今回の場合)。
プログラマーの出番はこんな所でしようか。それと分っているアセンブラはそのまま使った方が効率は良いのですが、他のICへ移植したい場合はなるべくシンプルにして置きたいものです。
考えさせられるポイントでした。製作は以前の物を再利用しています。ブレッドボードでも良かったのですが机の上にあったものを使いました。
気が付いたこと
実験中電源に7.6Vの電池を付けてしまいました。3端子レギュレータが付いていないのをすっかり忘れた結果です、幸い直ぐ気が付き5Vに変更したら壊れずに動きました...。
内部発振を使っているので2.4VのNI-MH電池でも同様の動作をしています、この場合LEDは当然薄暗いです。
2009/4/8
PIC16F883ではPWMが4V以上でないと作動しませんでした。理由不明で実用的には[4.5V以上]必要です。(2010/1/22)