JH7UBCブログ

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

Arduino UNO R4 WiFi PWM テスト その2

2024-02-25 14:17:52 | Arduino
 Arduino UNO R4 WiFiで任意の周波数、パルス幅のPWM信号を作るテストをします。これについては、「imo lab.」というサイトのこちらの記事を参考にさせていただきました。ありがとうございます。

 PwmOutというクラスを使い、周期をus単位で、パルス幅もus単位で指定することにより、任意の周期(周波数)と任意のパルス幅のPWM信号を得ることができます。Arduinoでは、tone(pin,ftrquency)という関数があり、任意の周波数を発生させることができますが、出力pinは1つに制限されています。PwmOutでは、複数のピンに任意の周期、パルス幅のPWM信号を発生させることができます。PICのNCO(数値制御発振器)に相当します。これは、Arduino UNO R4のマイクロコントローラRA4M1が下のようにTimerをたくさん持っているからでしょう。


 まず、imo lab.に掲載されている次のスケッチを試してみます。
----------------------------------------------------------------
#include "pwm.h"

PwmOut pwm3(3);
PwmOut pwm5(5);
PwmOut pwm6(6);

void setup() {
pwm3.begin(50, 25); //周期 50us = 20kHz; パルス幅 25us = 50%
pwm5.begin(100, 0); //周期 100us = 10kHz; パルス幅 0us = 0%
pwm5.pulse_perc(25.0); //duty 25% = 25us
pwm6.begin(200, 0); //周期 200us = 5kHz; パルス幅 0us = 0%
pwm6.pulseWidth_us(20); //パルス幅 20us = 10%;
}

void loop() {}
----------------------------------------------------------------
pwm3(pin3)の出力波形です。指定したとおり周期50us=20KHz、パルス幅25us デューティ比50%です。


 pwm5(pin5)の出力波形です。周期100us=10KHz、パルス幅25us デューティ比25%です。

 pwm6(pin6)の出力です。周期200us=5KHz、パルス幅20us デューティ比10%です。


 出力されるPWM信号の周波数の精度をみてみます。次のスケッチで500KHzデューティ比50%の信号を発生させて周波数カウンタ(自作のPIC16F1827周波数カウンタ)で測定してみました。
----------------------------------------------
#include "pwm.h"

PwmOut pwm3(3);

void setup() {
pwm3.begin(2,1);//周期2us=500KHz パルス幅1us デューティ比50%
}

void loop() {
}
----------------------------------------------
 499.131KHzでした。(周波数は少し変動します。)
 誤差1%以下で、任意の周波数を発生させることができます。



 今回、PwmOutというクラスを使うときに、参照した記事にはどのようなメソッドがあるのか詳しくは書いてありませんでした。
 しかし、Arduino IDE 2では、オートコンプリート機能があり、インスタンス.まで記入するとメソッドが表示されるので便利でした。