第2回 デジタル制御1:PWM制御によるLEDの点灯
マイコンの機能
マイコンは日常生活においてテレビのリモコン、冷蔵庫など身の回りの電子機器に広く使われている。マイコンの働きは一言でいえば、論理的記号によるソフトウェアの世界と電流と電圧によるハードウェアの世界をつなぐことといえます。
- 1. C 言語で書かれたプログラムは、コンピュータのソフトウェアによって、[0][1] で書かれた機械語に翻訳される。マイコンの中にはこの[0][1] で書かれた機械語が書きこまれる。
- 2. プログラムが実行されると、機械語が電気的な信号に変換され、マイコンの足の部分であるピンから[0V]、[5V] の電圧が出力される。
- 3. 周辺の電子機器はピンからの電気的な信号を受け取り作動する。
Figure:マイコンから周辺機器への出力
LED を点灯させるプログラム
#include<avr/io.h> int main(void) { long i; DDRB = 0xFF; for(;;){ for(i=0;i<200000;i++) { PORTB =0x02; } for(i=0;i<200000;i++) { PORTB =0x04; } } return 0; // }
- 課題1 上のプログラムをマイコンに書きこんで、LED を点灯させよう
- 課題2 8 個のLED のうち、どのLED が発光するか観察し、8 ビット情報を扱えるポートB との対応を 16 進数を用いて考えよう
- 課題3 左から右にLED を点灯させ、右から左にLED を消灯させよう
- 課題4 オシロスコープを使って、LED にかかる電圧をはかろう
LED のオン・オフと2進数
Figure:8bit と8 個のLED の対応関係
LED のオン・オフは、プログラム上では、[1] と[0] に対応して行われます。つまり、マイコンのポートのオン・オフは2 進数によって記述することができます。ポートB は8 ビットなので、
たとえば右から2 番目のLED をオンしようと思えば、[00000010] という信号をポートB に送ります。しかし毎回、8 ビットの数字を打ち込むのは大変です。そこで16 進数を使います。2 進数と16 進数の対応は以下の表になります。
8 ビットの情報とは、1 ビットが[0] と[1] の2 通りの場合を表せるということなので、28 = 256 通りの場合を表せるということです。
2 進数の[0000] から[1111] の4 ビットの情報を16 進数ではひと桁の数で表すことができるので便利です。したがって8 ビットの情報を16 進数であつかうのであれば、2 桁の16 進数で足ります。A やB などのアルファベットが出ていますが、アラビア数字が9 までしかないので、足りない分をアルファベットで補っただけです。
Figure:2 進数と16 進数の対応
14.0.9 PWM制御によるLED の明るさの調節
明るさってなんだろう?人間の目から見える映像は、毎秒数十回撮られる写真を連続的に合成したものである。したがって一見、同じように光っているものでも、実は光ったり、消えたりしている可能性がある。一般的にはLED の明るさの調節にはかける電圧を調節するが、視覚の性質を利用すれば、かける電圧が同じでも、LED のオン・オフの繰りかえしで、暗く見えるLED をつくれる。
Figure:PWM 制御によるLED の明るさ調整
スイッチのオン・オフでLED を暗くする手順
- 1 LED を点滅させる周期を連続的に光って見える周期にする
- 2 その周期をもとに、オンにする時間、オフにする時間を調節する
- 3 オンにする時間を短くすれば、点灯している時間が短くなるので、暗くみえる
LED をだんだん明るくするには、以下のプログラムを参考にしてください。周期を一定にし、オンの時間を長くしていっています。
LED を点灯させるプログラム
long i, j; for(j=0; j<400; j++){ //周期の長さ for(i=0; i<j; i++){ //オンの時間の長さ PORTB = 0xFF; } for(i=0; i<400-j; i++){ //オフの時間の長さ PORTB = 0x00; } }
パルスの波の幅でLED やモータの出力を調節する考え方をPWM 制御という。PWM はPulse Width Modulation の略で、パルス波のデューティー比を変化させる変調方法で、デューティー比とは周期とパルス幅の比のことである。デジタル制御でよく使われる。だんだん明るく、暗くなど、だんだんという連続的な出力を行いたい場合に、[0] と[1] という不連続な値しか扱えないコンピュータではこのようにパルス幅を制御することで対応する。