
3軸姿勢制御モジュールの自作です。先日、2号機の筐体が完成したので今回からソフト(制御プログラム)の検討に入っていきます。今回はRaspberry Pi Pico からステッピングモーターの回転制御のテストを行ってみます。

2号機の筐体。とりあえず通電してモーターを回転させてみます。1号機と比較して、マイコンはESP32⇒Raspberry Pi Pico、モーターはブラシレス⇒ステッピングモーターに変更してます。ステッピングモーターは過去入手したもので駆動ドライバーが内蔵されているもので詳細はここ。

まずはモーターだけ結線して回転テストです。
void loop() {
PWM_OUTPUT(2, 1000, 50); //pin,Hz,DUTY[%]
}
void PWM_OUTPUT(uint8_t _pin, uint32_t _freq, uint8_t _DUTY) {
uint32_t range = 128;
float clkdiv;
uint slice_num = pwm_gpio_to_slice_num(_pin);
for (int i = 0; i < 10; i++) {
clkdiv = (float)(F_CPU) / (float)(range * _freq);
if (clkdiv < 256.0) break;
range = range * 2;
}
uint16_t wrap = range - 1;
pwm_set_clkdiv(slice_num, clkdiv);
pwm_set_wrap(slice_num, wrap);
pwm_set_chan_level(slice_num, PWM_CHAN_A, (uint16_t)(range * _DUTY * 0.01));
}
抜粋です。ドライバ経由するので単純にPWMでパルスを発生させるだけでモーターを回転することができます。これだとおよそ150rpmくらいで回転するはず。

先ほどのコードを書き込んでテストした様子です。ちょっと分り難い動画ですが、なぜかモーターが大暴れ。このモーターで過去にテストしたときはうまく回転した記憶があるのですが違いはマイコンがArduinoかPico。

もしかすると電圧レベル(Arduino5V、Pico3.3V)の違いかと思い念のためレベルシフトを間に挟んで 再度テスト

コードは先ほどと同じ物を使用。真因はよくわかりませんが思い通りの回転してます。
真因はわかってませんが、回路構成見直さないといけないしステッピングモーターはあきらめてBLDCモーターに戻そうかと思ってます。
コメント