Open dynamis opened 3 years ago
このタミヤのキット、超音波センサーがI2Cになっていたりいろいろ興味深い造りのようですが、ちょっと検証用だけの調達はハードル高いですね。 https://www.denshi.club/cookbook/arduino/microbit/post-11.html に少し解析された情報が載っていますが、実物がないと動作の確認は難しそうですね。 よくあるフルブリッジのモーターコントローラにPWM信号を入れる場合は、PWMの周波数はそれほどシビアでないと思いますが、これはPWMのデューティ比1:1で停止となるようなので、ちょっと異なるように見えます(360°連続回転サーボ(ローテーションサーボ)に近い?)
とりあえずPWM周波数を設定できる仕組みの実装を試してみます(課題はmicrobit側のリソース不足か)
https://chirimen.org/chirimen-micro-bit/alpha/pwmExtension/ つくってみました
gpioPort.setPwmPeriod(pwmPeriodInMicroSec);
SoCの制約からと思いますがいろいろクセのある振る舞いをします。 PWM周波数は全ピン共通(ピン指定で周期を設定しても他のピンにも波及する・・そうだろうとは思ったけど)、ただしPWMデューティー比はピンごとに設定可能とか・・
ここまでできれば、サーボは直接駆動できるかな。あと、圧電スピーカーつけて音を出すとか
現在アナログ出力対応の拡張が実装されているが、 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
https://makecode.microbit.org/reference/pins/analog-write-pin https://makecode.microbit.org/reference/pins/analog-set-period