今回はPWM制御に関するチャレンジ課題です。
PWM制御プログラム2通り
PWMの最後はチャレンジ課題で締めくくりたいと思います。
前回までに、LEDを2通りの方法でPWM制御しました。PWMの原理自体はとても簡単だったと思いますが、周期やデューティーサイクルの算出が難しかったと思います。
そこで、ちょっと地味ですが、PWMのチャレンジ課題は周期とデューティーサイクルの計算に慣れていただく内容にしました。
LEDの点滅周期(PWMの周期)を長くすると (つまりゆっくり点滅すると)
「光過敏性発作」を誘発する可能性があります。
点滅は1秒間に30回以下にしないよう注意してください。
プログラム制御のPWM
PWMをプログラムで制御する場合、LEDを点灯、デューティーサイクルの時間分__delay_us()関数などで時間待ち、LEDを消灯、時間待ち、という処理の繰り返しでした。
説明の時に作成したプログラムは、この点滅が認識できないように1秒間に200回点灯させました。目視した場合、どの程度の周期で点滅しているように見えてしまうのか、確認するプログラムを作成してみましょう。
動作内容としては、PWMのデューティー比は50%として、以下の動作をするようにします。
- 最初に1秒間に200回の点滅を5秒間続ける
- LEDを1秒間消灯する
- 次に1秒間に180回の点滅を5秒間続ける
- (2)と(3)の動作を繰り返す。点滅回数は、20回ずつ減らし、1秒間に40回の点滅まで続ける
PWMモジュール制御のPWM
上の動作をPWM機能を利用してプログラムを作成してみてください。
周期の設定はPR2レジスタ、デューティーサイクルの設定はCCPR1LレジスタとCCP1CON/DC1Bレジスタです。
PWMの次のステップ
今回はLEDをPWM制御を行いました。今回は明るさの調整のみでしたが、フルカラーLEDという部品を使用すると様々な色の表示が可能になります。
フルカラーLEDは以下のようなものです。
フルカラーLEDは、単に赤色、緑色、青色の3つのLEDが1つのパッケーシに収められている部品です。赤、緑、青は光の三原色ですから、赤、緑、青のそれぞれをPWM制御して明るさを変えれば様々な色の表示が可能になります。
また、サーボモーターというモーターがあります。
通常のモーターは電圧を加えるとモーターの軸がぐるぐる回転しますが、このサーボモーターは0度〜180度の角度の範囲内で回転します。用途としてはロボットアームなど、稼働角度が限られている場合などです。
サーボモーターを制御するにはPWM信号を与えます。上のサーボモーターの仕様を見ると、
- PWMサイクル: 20ms
- 制御パルス: 0.5ms 〜 2.4ms
と書かれています。つまり、PWMの周期は20ms、デューティーサイクルを0.5msから2.4msまで変化させることにより、0度〜180度まで回転制御ができる、というわけです。
サーボモーターの制御信号は、PICマイコンの出力ピンを直接接続できますので、比較的簡単な回路で制御回路が実現できます。
いずれも、結局はPWMの周期とデューティーサイクルの制御を行うものです。今までの知識とアイデアがあれば、色々なものが作れるようになりますので、ぜひPWMをマスターしてみてください。
次回からA/Dコンバータの説明になります。
更新履歴
日付 | 内容 |
---|---|
2017.1.22 | 新規投稿 |
2018.12.1 | 点滅周波数の注意点追加 |