PIB - keyestudio KS4033
Keyestudio Micro Bit DRV8833 Motor Driver Expansion Board
BBC micro:bit 用 2ch ブラシ付きDCモータードライバー拡張ボード

公式ページ等

実装パーツ

Memo

2023-01-29: 速度制御

公式の wiki のサンプルプログラムとそのコメントでは P1, P2 で AOUT1,2 BOUT1,2 の速度調整が出来そうな書きぶりだが、そのような効果は認められなかった。
ドライバー IC である DRV8833 のデータシートを当たってみたところ、AIN1, AIN2 や BIN1, BIN2 に直接 PWM 叩き込めとのこと。
Makecode の「入出力端子」のパーツに「アナログ出力 パルス周期を設定する端子[P1▼]周期(マイクロ秒) (20000)」を見つけたので、もしやと思いヘルプを確認してみると、まさに PWM 用の機能だった。
  • Microsoft / MakeCode / Docs / リファレンス / 入出力端子 / Analog Set Period

DRV8833 は 100kHz の PWM をサポートしてるらしいので、最小パルス幅は 10 μs だろうから、あとは量子化レベルに合わせてパルス周期を適当に決めてやれば良さそうな雰囲気。

とりあえず
変数[PWM_period▼]を(1000)にする
もし<(speed)[>▼](0)>なら
  変数[forward▼]を(1)にする
でなければ
  変数[forward▼]を(0)にする
もし<(speed)[<▼](0)>なら
  変数[backward▼]を(1)にする
でなければ
  変数[backward▼]を(0)にする
みたいにしておくと、
fast decay の方は
アナログで出力する端子[P13▼]値 (((speed)[×](forward))の絶対値)
アナログ出力 パルス周期を設定する端子[P13▼]周期(マイクロ秒) (PWM_period)
アナログで出力する端子[P12▼]値 (((speed)[×](backward))の絶対値)
アナログ出力 パルス周期を設定する端子[P12▼]周期(マイクロ秒) (PWM_period)
みたいな感じで無事 PWM 制御することができた。
一方、slow decay の方は
変数[forward_w▼]を(1023)にする
変数[backward_w▼]を(1023)にする
もし<(0)[<▼](forward)>なら
  変数[backward_w▼]を((1023)[-▼]((speed)の絶対値))にする
もし<(0)[<▼](backward)>なら
  変数[forward_w▼]を((1023)[-▼]((speed)の絶対値))にする
アナログで出力する端子[P13▼]値 (forward_w)
アナログ出力 パルス周期を設定する端子[P13▼]周期(マイクロ秒) (PWM_period)
アナログで出力する端子[P12▼]値 (backward_w)
アナログ出力 パルス周期を設定する端子[P12▼]周期(マイクロ秒) (PWM_period)
みたいにしてみたところ、なぜか起動直後、0 から±1したところで全開運転になってしまう。
一応、speed をどちらか max まで増やした後、反転させると所望の動作を始めるのだが、どこでバグってるのか理解できずに悩み中。
まさか、まだDCモーターにノイズ対策用のコンデンサ実装してないので、ノイズで暴走してる可能性とかある?

関連