LoginSignup
0
0

PICAXE(ピカクス)のpwm設定

Last updated at Posted at 2024-01-21

はじめに

PICAXEのpwm機能を使用してLEDを調光させたいと思った時にPWMOUTとPWMDUTYの詳しい使い方の説明が少ないと感じましたので、出力したい周波数とDutyだけに着目してまとめてみました。

結論

PICAXE Editor6 に実装されている PWMOUT を計算するツールを使用する。
PICAXE → Wizards → PWMOUT Wizard を選択します。
使用するポート、出力する周波数、DUTYを入力するとPWMOUTに設定する値を出してくれます。
スクリーンショット 2024-01-21 12.48.20.png

PWMOUT コマンドに設定する値の設計

●PWMOUTコマンド
PWMOUTコマンドのパラメータは、出力するポート、period(周期)、duty cyclesの設定が必要です。

PWMOUT pin, period, duty cycles
PWMOUT PWMDIV4,pin, period, duty cycles
PWMOUT PWMDIV16, pin, period, duty cycles
PWMOUT PWMDIV64, pin, period, duty cycles
PWMOUT pin, OFF

period と、dutyは以下の式で算出します。
The PWM period = (period + 1) x 4 x resonator speed(resonator speed for 4MHz = 1/4000000)
The PWM duty cycle = (duty) x resonator speed

period を算出するために式を変形します。
The PWM period = (period + 1) x 4 x resonator speed
period = The PWM priod / 4 / resonator speed -1

duty を算出するために式を変形します。
The PWM duty cycle = (duty) x resonator speed
duty = The PWM duty cycle / resonator speed

【重要】PICAXEチップのクロックはデフォルト 4MHz です。

計算例
10kHz duty 50% の矩形波を出力する場合
period = The PWM period / 4 / resonator speed - 1 より
= (1/10kHz) / 4 / (1/4MHz) - 1 ※周波数から時間に変換するため逆数をとります。
= 0.0001 / 4 / 0.00000025 - 1
= 99
duty = ((1/10kHz)*50%) / (1/4MHz)
= 200

//サンプル 10kHz duty 50%の矩形波出力
    PWMOUT C.2, 99, 200
main:
    goto main

1サイクル 100us(10kHz) Duty 50% の矩形波が出力されました。
IMAGE1.png

PWMOUT Wizard 計算ツール

period値とduty値の計算方法を理解した上で、PICAXE Editor6 にはPWMOUTを計算する便利なツールがあります。
PICAXE → Wizards → PWMOUT Wizard を選択します。
スクリーンショット 2024-01-21 12.39.58.png

System Clock 4MHz。PWMOUT Pin C.2。周波数 10000Hz。Duty 50% を入力して、[Calculate]ボタンを押下すると、pwmout C.2,99,199 とそのままソースファイルに貼り付けられる形でコマンドを用意してくれます。便利! 
スクリーンショット 2024-01-21 12.40.41.png

PWMOUT Wizard 計算ツールの便利なところ

条件を変えて周波数1kHz Dutu50% の設定を入力しその計算結果 period 249、duty 499 をプログラムに入れます。

//サンプル 1kHz duty 50%の矩形波出力
    PWMOUT C.2, 249, 499
main:
    goto main

スクリーンショット 2024-01-21 12.48.20.png

1サイクル 250us(4kHz) Duty 50% の矩形波が出力されました。
1kHzが出ていませんね。

IMAGE2.png

PWMOUT Wizardの結果をよく見ると、pwmdiv4 が付いていると思います。

pwmout pwmdiv4, C.2, 249, 499

この式で計算するとperiod設定値の最大値255を超える1000になってしまっています。

period = The PWM period / 4 / resonator speed - 1 より
= (1/1kHz) / 4 / (1/4MHz) - 1 ※周波数から時間に変換するため逆数をとります。
= 0.001 / 4 / 0.00000025 - 1
= ★1000

そこで PWMOUT PWMDIV4 コマンドを使用して、resonator speed を4分周して設定する必要があります。

//サンプル 1kHz duty 50%の矩形波出力
    pwmout pwmdiv4, C.2, 249, 499
main:
    goto main

1サイクル 1ms(1kHz) Duty 50% の矩形波が出力されました。
IMAGE4.png

PWMDUTY コマンドに設定する値の設計

周波数 1kHz で、Dutyを 0%〜100% に可変させる時のPWMDUTYコマンドの値を設計します。

PWMDUTY pin,duty cycles

周波数毎に、duty cycles の100%における最大値が変わってきますので計算します。

100%時のduty最大値を計算します。
duty = ((1/1kHz)*100%) / (1/4MHz) /4 ※1kHz時は4分周
= 1000
1kHz時のDuty100%時に最大1000ということがわかりました。

プログラム例は以下のようになります。

	pwmout pwmdiv4, C.2, 249, 0
main:
	for w0 = 0 to 1000         // 0% → 100%
    	pwmduty C.2,w0
	next
	for w0 = 999 to 1 step -1  // 100% → 0%
		pwmduty C.2,w0
	next
	goto main

上記プログラムを実行すると、Dutyが0%→100%→0%を繰り返します。

1.png
3.png

2.png

各PICAXEによる pwm が使えるポート

PICAXE-08M2

pin番号 pin name
5 C.2

PICAXE-14M2

pin番号 pin name
5 C.2
7 C.0
9 B.4
11 B.2

PICAXE-18M2

pin番号 pin name
9 B.3
12 B.6

PICAXE-20M2

pin番号 pin name
5 C.5
7 C.3
8 C.2
17 B.1

参考資料

スタートアップマニュアル
https://picaxe.com/docs/picaxe_manual1.pdf
コマンドマニュアル
https://picaxe.com/docs/picaxe_manual2.pdf

PICAXE関連の投稿

PICAXE(ピカクス)でLチカ
https://qiita.com/masashi_214/items/5495503bf6bd82c1980b
PICAXE 最初に調べた事
https://qiita.com/masashi_214/items/d1acb1ecdc32de5a1698
PICAXEで鉄道模型の在線検出と信号機の制御
https://qiita.com/masashi_214/items/c728814df4f7a2453112
PICAXE(ピカクス)のポート設定
https://qiita.com/masashi_214/items/e5d5e1b9817aed754f52
PICAXE(ピカクス) リンク集
https://qiita.com/masashi_214/items/8b630b2c60ddb466b1ac
PICAXE(ピカクス)のpwm設定
https://qiita.com/masashi_214/items/f92e52837a9fa902879f
PICAXEでPWMを使用した調光機能を使って蛍を作る
https://qiita.com/masashi_214/items/0231a75ae0c77c2be206

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0