JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

PIC12F1822 MCC PWM テストその1

2021-05-20 17:12:10 | MPLAB X MCC
 PIC12F1822を使って、MCCで設定してPWMのテストをします。
 テストをする回路図です。
 RA0(AN0)で10kΩのボリュームの電圧をAD変換して0~1023で取り込み、その値でPWM出力して、LEDの明るさを変化させるプログラムを組んでみます。

 プロジェクト作成後、MCCを開きます。

 System Moduleの設定です。INTOSC,FOSC,16MHz,PLLなしとしました。
 

 AD変換についての設定は、前の記事と同じです。

 PWMの設定は、ECCP(Enhanced Captuer Compare PWM)モジュールで行いますので、ECCPモジュールを組み込みます。
 
 更にPWMは、Timerを使いますので、Timerモジュールも組み込みます。 PIC12F1822では、TMR2しか使えませんのでTMR2を組み込みます。

 PWMモジュールの設定をします。
 Timer Selectは、Timer2です。(これしか選べません)
 Duty Cycleは、50%のまま。
 PWM modeは、singleのまま。RA2がP1A(PWM出力)になります。
 pin polarityは、P1A active highのまま。アクティブの時に出力がHighになります。
 TMR2を組み込むとPWM parameterが自動的に設定されます。
 FOSC=16MHzの場合、PWM period=64us,PWM Resolution= 10bit,PWM Frequency=15.625KHzとなります。

 TMR2モジュールです。
 特に設定はしません。
 プログラムです。非常に簡単です。
----------------------------------------------------------------
#include "mcc_generated_files/mcc.h"

void main()
{
// initialize the device
SYSTEM_Initialize();

while (1)
{
EPWM_LoadDutyValue(ADC_GetConversion(channel_AN0));
}
}
---------------------------------------------------------------
 AN0のアナログ入力をADCで数値化(10bit 0~1023)して、その値に相当するデューティー比のPWMをP1Aに出力します。

 buildし、プログラムをPICに書き込み、実際の回路でテストしました。
 ボリュームを回すとLEDの明るさが変化します。OKです。

 実際のPWM波形を見てみます。
 Duty Cycle 50%の波形です。

 Duty Cycle 約20%

Duty Cycle 約80%

周波数も測定してみました。
 15.640KHzでした。設定値は、15.625KHzでしたので、誤差0.1%程度です。
 以前にPWMの勉強をしましたが、仕組みや計算がけっこう面倒でした。
 細かい設定をしなければ、MCCの設定だけで使えそうです。