MSP430G2553 - PWM制御

提供: MochiuWiki : SUSE, EC, PCB

2024年6月6日 (木) 14:37時点におけるWiki (トーク | 投稿記録)による版 (ページの作成:「== 概要 == PWM (Pulse Width Modulation, パルス幅変調) は、電力を制御するための技術である。<br> PWMMは、ON / OFFを高速で切り替えることにより、平均電力を制御したり、パルスのデューティ比 (ON時間とOFF時間の比率) を変えることで出力を調整することができる。<br> <br> DCモータの速度制御、LEDの調光制御、ヒータ等の温度制御、オーディオ信号の増幅 (Class…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

概要

PWM (Pulse Width Modulation, パルス幅変調) は、電力を制御するための技術である。
PWMMは、ON / OFFを高速で切り替えることにより、平均電力を制御したり、パルスのデューティ比 (ON時間とOFF時間の比率) を変えることで出力を調整することができる。

DCモータの速度制御、LEDの調光制御、ヒータ等の温度制御、オーディオ信号の増幅 (Class Dアンプ)等にPWM制御の技術が利用されている。

PWMの特徴を以下に示す。

  • デジタル信号 (ON / OFF) で制御可能なため、マイコン等で容易に実装できる。
  • 効率が良く、電力損失が少ない。
  • モータの速度制御、LEDの調光制御等に広く利用されている。


PWMの利点を以下に示す。

  • シンプルな制御方式で、コストが低い。
  • 高効率で、電力損失が少ない。
  • デジタル制御が可能で、マイコンとの親和性が高い。


PWMは、シンプルな原理でありながら、幅広い分野で活用されている重要な技術である。
デューティ比を変化させることにより出力を連続的に制御できるため、様々な用途に適している。


PWMの周波数とデューティ比

PWMの周波数とデューティ比は、PWM信号の特性を決定する重要な要素である。
PWMの周波数とデューティ比を適切に設定することにより、効率的かつ高精度な制御が可能になる。

用途に応じて最適な値を選択することが重要である。

= PWMの周波数

PWMの周波数は、1秒間のパルスの数を表す。 (単位は[Hz])

周波数が高いほど、ON / OFFの切り替えが速くなる。
周波数が高すぎる場合は、制御対象 (モータやLED等) が応答しきれなくなる場合がある。
周波数が低すぎる場合は、制御対象の動作が粗くなったり、ノイズが発生したりすることがある。

適切な周波数は、制御対象や用途によって異なる。

デューティ比

デューティ比は、1周期におけるON時間の割合を表しており、0~100%の範囲で表現される。

デューティ比が0%の場合、常にOFF状態となり、出力は最小 (0) になる。
デューティ比が100%の場合、常にON状態となり、出力は最大になる。

デューティ比を変化させることにより、出力を連続的に制御できる。

周波数とデューティ比の関係

周波数が一定の場合、デューティ比を変化させることにより、平均電力を制御できる。

デューティ比が大きいほどON時間が長くなるため、平均電力が増加する。
周波数が高いほど、デューティ比の変化に対する応答性が向上する。

具体例

  • DCモータの速度制御の場合、周波数を数[kHz]~数十[kHz]に設定して、デューティ比を変化させて速度を制御する。
  • LEDの調光制御の場合、周波数を数百[Hz]~数[kHz]に設定して、デューティ比を変化させて明るさを調整する。


注意点

  • 制御対象により、適切な周波数とデューティ比の範囲が異なる。
  • 周波数が高すぎると、スイッチング損失が増加して、効率が低下する場合がある。
  • デューティ比が0%や100%に近づくと、制御の分解能が低下する。



サンプルコード : LEDの調光制御

以下の例では、タイマA0を使用してPWM信号を生成して、LEDの明るさを制御している。
PWM周期を1[mS] (1[kHz]) に設定して、デューティ比は50%に設定している。

LEDは、MSP430G2553マイコンのP1.6に接続している。

  1. ウォッチドッグタイマを停止する。
  2. LEDに接続しているピンP1.6を出力に設定する。
  3. タイマA0を設定する。
    以下の例で使用しているPWM制御の設定を示す。
    • SMCLK (1[MHz]) を選択する。
    • アップモードで動作する。
    • 分周なし。
    • PWM周期を1[ms] (1[kHz]) に設定する。
    • デューティ比を50%に設定する。
    • リセット / セットモードに設定する。
  4. LEDに接続しているピンP1.6をタイマA0の出力に設定する。
  5. 低電力モード0に遷移する。
  6. タイマA0の割り込みベクタを定義する。 (以下の例では、未使用)


必要に応じて、TA0CCR1レジスタの値を変更することにより、デューティ比を調整することができる。

 #include <msp430.h>
 
 #define LED_PIN BIT6  // P1.6ピンにLEDを接続
 
 void main(void)
 {
    WDTCTL = WDTPW | WDTHOLD;  // ウォッチドッグタイマを停止
 
    P1DIR |= LED_PIN;          // LEDピンを出力に設定
 
    // タイマーA0の設定
    TA0CTL   = TASSEL_2 | MC_1 | ID_0;  // SMCLK (1[MHz]), アップモード, 分周なし
    TA0CCR0  = 1000 - 1;                // PWM周期を1[mS] (1[kHz]) に設定
    TA0CCR1  = 500;                     // デューティ比を50%に設定
    TA0CCTL1 = OUTMOD_7;                // リセット / セットモード
 
    P1SEL |= LED_PIN;                   // LEDピンをタイマA0の出力に設定
 
    __bis_SR_register(LPM0_bits);       // 低電力モード0に遷移
 }
 
 // タイマA0割り込み
 #pragma vector=TIMER0_A0_VECTOR
 __interrupt void Timer_A0(void)
 {
 }
 
 // タイマA0 CCR1割り込み
 #pragma vector=TIMER0_A1_VECTOR
 __interrupt void Timer_A1(void)
 {
 }


PWM信号の生成は、タイマーA0のハードウェア機能により自動的に行われる。
1度設定されたPWM信号は、割り込みを使用しなくても継続的に出力される。

上記の例では、PWMのデューティ比を動的に変更する必要がないため、割り込みを使用してPWM設定を更新していない。

以下に示すような場合には、割り込みを使用することが有効である。

  • PWMのデューティ比を動的に変更する必要がある場合
  • 他の処理と同期してPWM信号を制御する必要がある場合
  • 外部イベントに応じてPWM信号を変更する必要がある場合


割り込みを使用する場合は、対応する割り込みベクタ内で必要な処理を行う。
例えば、タイマA0の割り込みを使用してPWMのデューティ比を変更する場合は、Timer_A0関数内でTA0CCR1の値を更新する。