このチュートリアルは、TexasInstrumentsのMSP430G2LaunchPadの使用方法を学習している一連のMSP430G2LaunchPadチュートリアルの一部です。これまで、ボードの基本を学び、アナログ電圧の読み取り方法、LCDとMSP430G2のインターフェイスなどについて説明しました。次に、MSP430G2のPWMについて学習する次のステップに進みます。これを行うには、ポテンショメータを変化させてLEDの輝度を制御します。そのため、ポテンショメータをMSP430のアナログピンに接続してアナログ電圧を読み取るため、先に進む前にADCチュートリアルを確認することをお勧めします。
PWM信号とは何ですか?
パルス幅変調(PWM)は、制御回路で最も一般的に使用されるデジタル信号です。この信号は、事前定義された時間と速度でハイ(3.3v)とロー(0v)に設定されます。信号がハイのままである時間は「オン時間」と呼ばれ、信号がローのままである時間は「オフ時間」と呼ばれます。以下で説明するように、PWMには2つの重要なパラメータがあります。
PWMのデューティサイクル:
PWM信号がHIGH(オンタイム)のままである時間のパーセンテージは、デューティサイクルと呼ばれます。信号が常にオンの場合は100%のデューティサイクルであり、常にオフの場合は0%のデューティサイクルです。
デューティサイクル=ターンオン時間/(ターンオン時間+ターンオフ時間)
PWMの周波数:
PWM信号の周波数は、PWMが1周期を完了する速度を決定します。上図に示すように、1周期でPWM信号のON / OFFが完了します。このチュートリアルでは、周波数は500Hzです。これは、EnergiaIDEによって設定されたデフォルト値です。
PWM信号にはリアルタイムのアプリケーションが多数ありますが、PWM信号を使用してサーボモーターを制御したり、LEDの明るさを制御できるアナログ電圧に変換したりすることもできます。それがどのように行われるかについて少し学びましょう。
他のマイクロコントローラーを使用したPWMの例をいくつか示します。
- MPLABおよびXC8を搭載したPICマイクロコントローラを使用したPWMの生成
- RaspberryPiによるサーボモーター制御
- PWMを使用したArduinoベースのLED調光器
ここですべてのPWM関連プロジェクトを確認してください。
PWM信号をアナログ電圧に変換する方法は?
信号をアナログ電圧にPWMするには、RCフィルターと呼ばれる回路を使用できます。これは、この目的のために単純で最も一般的に使用される回路です。この回路には、以下の回路に示すように、抵抗とコンデンサが直列に接続されています。
つまり、ここで基本的に起こることは、PWM信号が高い場合、コンデンサは抵抗を介して充電され、PWM信号が低くなると、コンデンサは蓄積された電荷を介して放電します。このようにして、PWMデューティサイクルに比例する定電圧が常に出力にあります。
上記のグラフで、黄色の色はPWM信号で、青色の色は出力アナログ電圧です。ご覧のとおり、出力波は純粋なDC波ではありませんが、アプリケーションでは非常にうまく機能するはずです。他のタイプのアプリケーションに純粋なDC波が必要な場合は、スイッチング回路を設計する必要があります。
回路図:
回路図は非常に単純です。ポテンショメータと抵抗器とコンデンサを備えており、RC回路とLED自体を形成します。ポテンショメータは、PWM信号のデューティサイクルを制御できるアナログ電圧を提供するために使用されます。ポットの出力は、アナログ電圧を読み取ることができるピンP1.0に接続されています。次に、ピンP1.2を使用してPWM信号を生成する必要があります。このPWM信号はRCフィルター回路に送信され、PWM信号をアナログ電圧に変換してLEDに供給されます。
MSPボードのすべてのピンがアナログ電圧を読み取ったり、PWMピンを生成したりできるわけではないことを理解することが非常に重要です。特定のタスクを実行できる特定のピンを次の図に示します。プログラミング用のピンを選択するためのガイダンスとして、常にこれを使用してください。
上記のように完全な回路を組み立てます。ブレッドボードと数本のジャンパー線を使用して、簡単に接続できます。接続が完了すると、ボードは次のようになります。
PWM信号用のMSPのプログラミング:
ハードウェアの準備ができたら、プログラミングを開始できます。プログラムの最初のことは、使用するピンを宣言することです。ここでは、PWMを生成する機能があるため、ピン番号4(P1.2)を出力ピンとして使用します。そこで、変数を作成してピン名を割り当て、プログラムの後半で簡単に参照できるようにします。完全なプログラムは最後に与えられます。
int PWMpin = 4; // MSPモジュールの4番目のピンをPWMピンとして使用しています
次に、 セットアップ 機能に入り ます 。ここに記述されているコードは1回だけ実行されます。ここでは、PWMが出力機能であるため、この4番目のピンを出力ピンとして使用していることを宣言します。コードがより意味のあるものに見えるように、ここでは数値4の代わりに変数 PWMpin を使用していることに注意してください。
void setup(){ pinMode(PWMpin、OUTPUT); // PEMpinはOutptutとして設定されます }
最後に、 ループ 関数に入ります。ここに書いたものは何でも何度も実行されます。このプログラムでは、アナログ電圧を読み取り、それに応じてPWM信号を生成する必要があり、これは何度も何度も発生する必要があります。ポテンショメータに接続しているので、最初にピンA0からアナログ電圧を読み取ることから始めましょう。
ここでは、 AanalogRead 関数を使用して値を 読み取ってい ます。この関数は、ピンに印加された電圧の値に基づいて、0〜1024の値を返します。次に、この値を次のように「val」という変数に格納します。
int val = analogRead(A0); //ピンA0からADC値を読み取ります
0〜1024の値をADCから0〜255の値に変換して、PWM機能に渡す必要があります。なぜこれを変換する必要があるのですか?すぐにそれを伝えますが、今のところ、変換する必要があることを覚えておいてください。ある値のセットを別の値のセットに変換するために、EnergiaにはArduinoと同様の マップ 機能があり ます 。したがって、0-1204の値を0-255に変換し、変数「val」に保存し直します。
val = map(val 、0、1023、0、255); // ADCは0-1023の値を与え、それを0-255に変換します
これで、ポテンショメータの位置に基づいて0〜255の可変値が得られます。私たちがしなければならないのは、PWMピンでこの値を使用することです。これは次の行を使用して行うことができます。
AnalogWrite(PWMpin、val ); //その値をPWMピンに書き込みます。
なぜ0-255がPWMピンに書き込まれるのかという質問に戻りましょう。この値0〜255は、PWM信号のデューティサイクルを決定します。たとえば、信号の値が0の場合、この記事の冒頭で示して説明したように、127の場合はデューティサイクルが0%、50%の場合、255の場合は100%であることを意味します。
PWMによるLEDの明るさの制御:
ハードウェアとコードを理解したら、回路の動作を楽しんでください。コードをMSP430G2ボードにアップロードし、ポテンショメータのノブを回します。ノブを回すと、ピン2の電圧が変化し、マイクロコントローラーによって読み取られます。電圧に応じて、PWM信号がピン4で生成されます。電圧が高いほど、デューティサイクルが大きくなり、その逆も同様です。
次に、このPWM信号はアナログ電圧に変換されてLEDを点灯させます。LEDの輝度は、PWM信号のデューティサイクルに正比例します。ブレッドボードのLEDとは別に、smd LED(赤色)がブレッドボードのLEDと同じように明るさを変えていることに気付くでしょう。これはLEDも同じピンに接続されていますが、RCネットワークがないため、実際には非常に速く点滅します。暗い部屋でボードを振ると、ちらつきの性質を確認できます。完全な動作は、以下のビデオでも見ることができます。
今のところこれですべてです。MSP430G2ボードでPWM信号を使用する方法を学びました。次のチュートリアルでは、同じPWM信号を使用してサーボモーターを制御するのがいかに簡単かを学びます。疑問がある場合は、以下のコメントセクションまたは技術的なヘルプのフォーラムに投稿してください。