chirimen-oh / chirimen-micro-bit

CHIRIMEN with micro:bit
https://chirimen.org/chirimen-micro-bit/
Other
7 stars 9 forks source link

PWM 出力 (アナログ出力) の周期を制御したい #26

Open dynamis opened 3 years ago

dynamis commented 3 years ago

現在アナログ出力対応の拡張が実装されているが、 https://chirimen.org/chirimen-micro-bit/guidebooks/extendedFunctions.html

pins.analogWritePin() だけ使っていて ping.analogSetPeriod() を一切使っていない。従って単にアナログ出力として使う分には問題無いが、PWM として使いたい場合には未対応。

この結果、例えばタミヤの mi-01 を使いたいという人がすんなり使えない。 https://www.tamiya.com/japan/robocon/topics/faq190711.html

実際には mi-01 を使うだけなら analogSetPeriod(pin, 1000) などと PWM 周期の初期化を processGpioAwrite() の最初に一度だけ呼ぶようにするとか適当に書き換えれば使えるが、ちゃんと?拡張 WebGPIO API 的に (または WebPWM API として) 定義したい。

https://github.com/chirimen-oh/chirimen-micro-bit/blob/master/micro-bit/custom.ts#L115-L118

    export function processGpioAwrite(): string {
        pins.analogWritePin(getPinAddr(gpioPort), gpioVal)
        return (gpioPort + "," + gpioVal)
    }

https://makecode.microbit.org/reference/pins/analog-write-pin https://makecode.microbit.org/reference/pins/analog-set-period

satakagi commented 3 years ago

このタミヤのキット、超音波センサーがI2Cになっていたりいろいろ興味深い造りのようですが、ちょっと検証用だけの調達はハードル高いですね。 https://www.denshi.club/cookbook/arduino/microbit/post-11.html に少し解析された情報が載っていますが、実物がないと動作の確認は難しそうですね。 よくあるフルブリッジのモーターコントローラにPWM信号を入れる場合は、PWMの周波数はそれほどシビアでないと思いますが、これはPWMのデューティ比1:1で停止となるようなので、ちょっと異なるように見えます(360°連続回転サーボ(ローテーションサーボ)に近い?)

とりあえずPWM周波数を設定できる仕組みの実装を試してみます(課題はmicrobit側のリソース不足か)

satakagi commented 3 years ago

https://chirimen.org/chirimen-micro-bit/alpha/pwmExtension/ つくってみました

gpioPort.setPwmPeriod(pwmPeriodInMicroSec);

SoCの制約からと思いますがいろいろクセのある振る舞いをします。 PWM周波数は全ピン共通(ピン指定で周期を設定しても他のピンにも波及する・・そうだろうとは思ったけど)、ただしPWMデューティー比はピンごとに設定可能とか・・

ここまでできれば、サーボは直接駆動できるかな。あと、圧電スピーカーつけて音を出すとか