このプロジェクトでは、ATmega32Aの機能の1つを使用して、1ワットのLEDの明るさを調整します。LEDの速度を調整するために使用される方法は、PWM(パルス幅変調)です。このAVRマイクロコントローラーPWMチュートリアルでは、PWMの概念とPWMの生成について詳しく説明しています(この単純なPWMジェネレーター回路も確認できます)。図に示すような単純な回路を考えてみましょう。
ここで、上の図のスイッチが一定期間にわたって継続的に閉じられている場合、電球はその期間中継続的にオンになります。スイッチが8msの間閉じられ、10msのサイクルで2msの間開かれた場合、電球は8msの時間内にのみオンになります。これで、10msの期間にわたる平均端末=ターンオン時間/(ターンオン時間+ターンオフ時間)、これはデューティサイクルと呼ばれ、80%(8 /(8 + 2))であるため、平均出力電圧はバッテリー電圧の80%になります。
2番目のケースでは、スイッチは5msの間閉じられ、10msの期間にわたって5msの間開かれるため、出力の平均端子電圧はバッテリー電圧の50%になります。バッテリー電圧が5Vで、デューティサイクルが50%である場合、平均端子電圧は2.5Vになります。
3番目のケースでは、デューティサイクルは20%で、平均端子電圧はバッテリ電圧の20%です。
ATMEGA32Aには、OC0、OC1A、OC1B、およびOC2の4つのPWMチャネルがあります。ここでは、OC0PWMチャネルを使用してLEDの明るさを変化させます。
必要なコンポーネント
ハードウェア:
ATmega32マイクロコントローラー
電源(5v)
AVR-ISPプログラマー
100uFコンデンサ、
1ワットLED
TIP127トランジスタ
ボタン(2個)
100nF(104)コンデンサ(2個)、
100Ωおよび1kΩ抵抗(2個)。
ソフトウェア:
Atmelスタジオ6.1
Progispまたはフラッシュマジック
回路図と動作説明
上の図は、AVRマイクロコントローラーを備えたLED調光器の回路図を示しています(この単純なLED調光器回路も確認できます)。
ATmegaでは、4つのPWMチャネルに対して4つのピンを指定しました。これらのピンでのみPWM出力を取得できます。PWM0を使用しているため、OC0ピン(PORTB 3番目のPIN)でPWM信号を取得する必要があります。図に示すように、トランジスタのベースをOC0ピンに接続して、電源LEDを駆動します。ここでもう1つは、4つのPWMチャネルを超え、2つは8ビットPWMチャネルです。ここでは、8ビットのPWMチャネルを使用します。
跳ね返りを防ぐために、各ボタンにはコンデンサが接続されています。ボタンを押すたびに、ピンにノイズが発生します。このノイズはミリ秒単位で安定しますが。コントローラーの場合、安定化前の鋭いピークがトリガーとして機能します。この影響は、プログラムを単純にするために、ソフトウェアまたはハードウェアのいずれかによって排除できます。デバウンスコンデンサを追加するハードウェア方式を採用しています。
コンデンサは、ボタンのバウンスの影響を無効にします。
ATMEGAでは、PWMを生成する方法がいくつかあります。それらは次のとおりです。
1.位相補正PWM
2.高速PWM
ここではすべてを単純に保つため、FASTPWM方式を使用してPWM信号を生成します。
最初にPWMの周波数を選択します。これは通常、アプリケーションによって異なります。LEDの場合、50Hzを超える周波数でもかまいません。このため、カウンタークロック1MHZを選択しています。したがって、プリスケーラーは選択していません。プリスカラーは、カウンタークロックを小さくするために選択された数値です。たとえば、オシレータクロックが8Mhzの場合、「8」のプリスケーラを選択して、カウンタ用の1MHzクロックを取得できます。プリスケーラは周波数に基づいて選択されます。より多くの周期パルスが必要な場合は、より高いプリスケーラーを選択する必要があります。
ここで、ATMEGAから50HzクロックのFAST PWMを取得するには、「TCCR0」レジスタの適切なビットを有効にする必要があります。これは、8ビットのFASTPWMを取得するために気にする必要がある唯一のレジスタです。
ここに、
1. CS00、CS01、CS02(YELLOW)—カウンタークロックを選択するためのプリスケーラーを選択します。適切なプリスケーラの表を以下の表に示します。したがって、1つをプリスケーリングする場合(オシレータクロック=カウンタクロック)。
したがって、CS00 = 1の場合、他の2ビットはゼロです。
2. WGM01とWGM00は、高速PWMのために、以下の表に基づいて波形生成モードを選択するように変更されています。WGM00 = 1とWGM01 = 1があります。
3.これで、PWMは異なるデューティ比または異なるターンオンターンオフ時間の信号であることがわかりました。これまで、PWMの周波数とタイプを選択してきました。このプロジェクトの主なテーマはこのセクションにあります。異なるデューティ比を取得するために、0〜255の値を選択します(8ビットのため2 ^ 8)。値180を選択すると、カウンターが0からカウントを開始し、値180に達すると、出力応答がトリガーされる可能性があります。このトリガーは、反転または非反転の場合があります。つまり、出力はカウントに達するとプルアップするように指示することも、カウントに達するとプルダウンするように指示することもできます。
このプルアップまたはプルダウンの選択は、CM00ビットとCM01ビットによって選択されます。
表に示されているように、比較時に出力がハイになり、出力は最大値までハイのままになります(下の図に示されているように)。そのためには反転モードを選択する必要があるため、COM00 = 1; COM01 = 1。
下の図に示すように、OCR0(出力比較レジスタ0)は、ユーザーが選択した値を格納するバイトです。したがって、OCR0 = 180を変更すると、カウンターが0から180に達すると、コントローラーが変更(高)をトリガーします。
ここで、LEDの輝度を変更するには、PWM信号のデューティ比を変更する必要があります。デューティ比を変更するには、OCR0値を変更する必要があります。このOCR0の値を変更すると、カウンターがOCR0に到達するまでに異なる時間がかかります。そのため、コントローラーはさまざまな時間に出力をHighにプルします。
したがって、異なるデューティサイクルのPWMの場合、OCR0値を変更する必要があります。
回路には2つのボタンがあります。1つのボタンはOCR0値を増やすためのPWM信号のDUTYRATIOであり、もう1つのボタンはOCR0値を減らすためのPWM信号のDUTYRATIOです。