木曜日, 5月 8, 2025
No menu items!
ホームニューステックニュースRaspberry Pi PicoでPicoMite(MMBasic)を使う〜PWM #RaspberryPiPico - Qiita

Raspberry Pi PicoでPicoMite(MMBasic)を使う〜PWM #RaspberryPiPico – Qiita



Raspberry Pi PicoでPicoMite(MMBasic)を使う〜PWM #RaspberryPiPico - Qiita

PicoMite(MMBasic)ではPWM(パルス幅変調)を容易に利用できるコマンドが用意されている。ここではLEDの点灯をPWMで制御する方法を試した結果を示す。

赤色LED2本、330Ωの抵抗器2本を使用する。

下記のように配線した。2本のLEDはGP0とGO1にそれぞれ接続した。

PICO-PWM_ブレッドボード.png

2つのLEDを一つずつ徐々に明るく点灯させ、最後に2本とも徐々に暗くするプログラムを以下に示す。

PWM.bas

SetPin GP0, PWM             ' Define GP0 as a PWM0A
SetPin GP1, PWM             ' Define GP1 as a PWM0B
' Increases the duty cycle from 0% to 100% in 10% increments.
For I% = 0 To 100 Step 10
  PWM 0, 10, I%             ' Output to PWM channel 0A
  Pause 300                 ' Wait 300 msec
Next I%
' Increases the duty cycle from 0% to 100% in 10% increments.
For I% = 0 To 100 Step 10
  PWM 0, 10,, I%            ' Output to PWM channel 0B
  Pause 300                 ' Wait 300 msec
Next I%
'Increases the duty cycle from 100% to 0% in 10% decrements.
For I% = 100 To 0 Step -10
  PWM 0, 10, I%, I%         ' Output tp PWM channel 0A and 0B
  Pause 300                 ' Wait 300 msec
Next I%

PWM 0, OFF                  ' Stop PWM output

End

このプログラムは次に示す動作をする。

  • PWM出力ピンとしてGP0をチャンネル0の出力A、GP1をチャンネル0の出力Bとして定義している
  • 1番目のFORループでチャンネル0の出力Aに10HZの信号を300ミリ秒間隔でデューティサイクルを10%ずつ増やしながらPWM出力する
    • ループが完了するとLEDが最も明るく点灯している
  • 2番目のFORループはチャンネル0の出力Bに1番目と同じように出力する
    • ループが完了するとLEDが最も明るく点灯している
  • 3番目のFORループでチャンネル0の2つの出力(AとB)にデューティサイクルを100%から10%ずつ減らしながらPWM出力する
  • 最後にチャンネル0へのPWM出力を停止する

実行結果の動画

PWM.gif

PicoMite(MMBasic)はSETPINコマンドで指定したピンに対してPWMコマンドで容易に指定したデューティサイクルの矩形波を生成できます。

PWMのチャンネル

プロセッサの種類によってPWMで利用できるチャンネルはしたの表に示すように異なっている。

CPU チャンネル数 チャンネル番号 出力
RP2040 16 0〜7 AとB
RP2350 24 0〜12 AとB

Raspberry Pi PicoとPico 2でPWMに利用できるピンは下記のチャンネル番号と出力AとBの組み合わせがあり、全部で26本を利用できます。

チャンネル番号 出力A 出力B
0 GP0, GP16 GP1, GP17
1 GP2, GP18 GP3, GP19
2 GP4, GP20 GP5, GP21
3 GP6, GP22 GP7
4 GP8 GP9
5 GP10, GP26 GP11, GP27
6 GP12, GP28 GP13
7 GP14 GP15

PWM出力するピンの設定

MMBasicでPWMを利用するにはSETPINコマンドでPWM出力に使用するピンを指定します。

PWM出力の実行

PWM出力するにはPWMコマンドを使います。PWMコマンドの構文は次の通りです。

PWM channel, frequency, [dutyA][,dutyB][,phase][,defer]

それぞれの引数は表に示す意味があります。

引数 説明
channel 出力するチャンネル番号0〜7のいずれかを指定
frequency PWM信号の周波数を指定
$最小周波数=(CPU速度+1)/(2^{24})$Hz
最大速度はOPTION CPUSPEED/4
dutyA 出力Aへの出力する信号のデューティサイクルを指定
dutyB 出力Bへの出力する信号のデューティサイクルを指定
phase 波形の位相の指定。波形を中央に配置するためのパラメータ
短いデューティサイクルの波形が長いデューティサイクルの波形から等時間で開始および終了します
defer 1に設定すると、PWMチャンネルは出力開始状態になるが、出力は開始ない
PWM SYNCコマンドを使用して出力を開始でき、望ましくない起動時のアーティファクトを回避できる<BR>PWMコマンドはサーボ駆動も可能
  • dutyAとdutyBのいずれか、または両方を指定する必要がある
  • デューティサイクルは%で-100%〜100%の範囲で指定し、負数の場合は出力が反転する

PWM出力の停止

PWM出力の停止はPWMコマンドを使う。チャンネル単位で出力が停止され、PWMのピン設定も無効化される。



フラッグシティパートナーズ海外不動産投資セミナー 【DMM FX】入金

Source link

Views: 2

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -

Most Popular