Raspberry Pi 5のRP1-Chipを使い倒す(PWM)

前回投稿のPi5用のGPIOライブラリをPWM対応してみた。

ドキュメントのないPWMクロック生成をどうするのかが課題であったがPi5のPWM冷却ファン制御の設定を参考に試したところうまく動作。

クロック以外の仕様はデータシートに記載されているためそれ以外の問題はないと思う。資料作成はコードを書くよりも大変な作業だったりするが早めの公開を望みたい。

PWM対応はArduinoと同じanalogWrite()という関数にしてみたがArduinoのdutyは0-100%指定なのに対しrangeに合わせてdutyを指定するところが違うので注意してほしい。

PWMのクロックはPWM0_FREQ(50MHz)として定義されているので秒単位で点滅したいときは下記のように行う。

前回投稿と同じく、実行するにはルート権限が必要なことに注意しよう!

【続編】
Raspberry Pi 5のRP1-Chipを使い倒す(GPCLK)

【修正】
2025-05-06
pinMode()に出力初期値指定の追加と不必要なプルアップ設定を解除するようにした。

2025-05-02
下記関数を追加。
static unsigned long nanos(void)
static unsigned long micros(void)
static unsigned long millis(void)
static void delayNanoseconds(unsigned long ns)
static void delayMicroseconds(unsigned long us)
static void delay(unsigned long ms)

2025-04-30
digitalWrite()の出力がリアルに反映されない現象の対策を行った。
その結果、Lチカ出力周波数は、SET/CLRで最大5MHz、TOGGLEでは最大400KHzとなる。

【サンプル】

【ライブラリ】