ESP-IDFを使ってみる

PWM制御


ESP-IDFにはPWMモータ制御のためのドライバー(Motor Control Pulse Width Modulation)が用意されています。
MCPWMドライバーの説明はこ ちらに有ります。

こ ちらにサーボモーター制御のサンプルが公開されています。
今回SG-90のサーボモーターを使いましたが、サンプルソースの以下の部分を変更すれば、
ほぼ180度の角度でサーボモーターが動きます。
サーボモーターのPWMピンはGPIO18を使います。
GPIOの3.3V出力で動くかどうか心配でしたがちゃんと動きました。
//#define SERVO_MIN_PULSEWIDTH 1000 //Minimum pulse width in microsecond
//#define SERVO_MAX_PULSEWIDTH 2000 //Maximum pulse width in microsecond
#define SERVO_MIN_PULSEWIDTH 625 //Minimum pulse width in microsecond
#define SERVO_MAX_PULSEWIDTH 2350 //Maximum pulse width in microsecond

サーボモーターがジコジコ動かないと面白くないので、WEBから制御できるサンプルを作りました。
こ ちらで公開しています。



こちらにESP-IDFの サンプルコードが多数公開されています。
こ ちらにタイマーコントロールとLEDコントロールドライバー(LEDC)を組み合わせたサーボモーター制御が公開されています。
サンプルソースの以下の部分を変更すれば、ほぼ180度の角度でサーボモーターが動きます。
サーボモーターのPWMピンはGPIO16を使います。
SG-90の+90の時のActivePulseWideは2350(ぐらい)ですが、なぜ、maxValueが2350ではなく3500なのか はよく分かりません。
int minValue        = 625;  // micro seconds (uS)
int maxValue        = 3500; // micro seconds (uS)

以下の値を変更すると3秒で-90度から+90度まで動きます。
int sweepDuration   = 3000; // milliseconds (ms)



こ ちら
にLEDのPWM制御のサンプルが公開されています。
LEDの輝度を変えるだけでは面白くないので、RGBフルカラーLEDをWEBから制御できるサンプルを作りました。
こ ちらで公開しています。

よく使うGPIO、I2C、SPI以外に、I2Sとか、RMT(赤外線)とか、LEDC(LED制御)とか、
MCPWM(モーター制御)まで用意されているので、もう何でもできそうな感じです。
PCNT(Pulse Counter)とか、Sigma-delta Modulationという使い方が良く分からないモジュールも有ります。
Peripherals APIの詳細はこ ちらです。

続く
....