Raspberry Pi Pico W を Arduino IDE で味見2 ー姿勢制御モジュール製作ー

Home > Raspberry Pi > Raspberry Pi Pico W を Arduino IDE で味見2 ー姿勢制御モジュール製作ー
すき 1
うんこ 0

前回は Raspberry Pi Pico W をArduino IDEで味見し、WiFi通信やI2C通信を楽しみました。

Raspberry Pi Pico W を Arduino IDE で味見

ここでは更に深掘りし姿勢制御モジュールも製作しましたので報告いたします。

 

 

ブラシレスモータ回転

以下のモータをRaspberry Pi Pico W を用いてArduino IDEコーディングで回してみます。
このモータはPWMのデューティで回転速度を指定し、回転方向やブレーキをロジック信号で指定します。それぞれ1周100パルスのA相, B相エンコーダ出力も兼ね備えています。

まずはdigitalWriteで雑にPWM出力してみました。

周波数不明でなんか音なってる。。

以下のドキュメントを参考にdigitalWriteの周波数を20kHz [analogWriteFreq(20000)]としてデューティ比を10bit分解能 [analogWriteRange(1024)]で指定できるようにしました。

異音もなくなり回転方向転換もスムーズに行えています。

Arduino IDEにおけるRaspberry Pi Pico W でのPWM出力は digitalWrite で問題なさそうです。

パルスカウンタ

先ほどのモータのエンコーダ出力からモータの回転速度の算出します。

以下の記事でPIOでパルス幅を測定する方法が紹介されていました。

さらにパルス幅から周波数を導出するArduino IDE用ライブラリも公開されておりましたので、ありがたく使用させていただきました。

 

上記ライブラリを使用してモータエンコーダのA相 (1周 100パルス)の周波数を測定し回転速度を計ってみました。

非常にええ感じにモータ回転速度が計れております。
B相も用いて回転方向検出や逓倍しての検出精度向上もおいおいやっていきたいですが、現状はこれで十分です。

姿勢制御モジュール製作

モータを制御して回転速度をはかれるようになったのでRaspberry Pi Pico W で1軸の姿勢制御モジュールを製作してみました。

つくりはひどいですが。。無事に倒立動作が実現されました。
デュアルコアを用いて
core0で姿勢センシング&モータ制御
core1でWiFi APモードでパラメータ調整
を実施しています。

IMUにはMPU6050を使用しています。

OLED表示

I2C制御のOLEDディスプレイの表示がしばらくうまくいきませんでした。
単体では問題なく動いたのですが(Adafruit_SSD1306ライブラリ使用)、デュアルコアでMPU6050と同時に使用すると処理が遅くなってしまいました。

この時の構成は以下の通りです。

  • core0:I2C0 (GP0, GP1) でMPU6050
  • core1 :I2C1 (GP2, GP3) でOLEDディスプレイ

 
これを以下のように変更することで改善しました。

  • core0:I2C0 (GP0, GP1) でMPU6050
  • core1 :I2C1 (GP10, GP11) でOLEDディスプレイ

改善した理由はよくわかりません。。

変数フラッシュ保存

WiFi通信で指定したパラメータを電源オフ後も保持したく、保存方法を調べました。

以下の通りEEPROMライブラリでフラッシュ保存可能でした。
Raspberry Pi Pico W にはEEPROMは搭載されていませんがフラッシュメモリの空いているところに保存してくれます。

 

アドレス指定して1バイトずつの保存になるためfloat値やint値の保存がめんどくさいなぁと。。

そこで今流行りのChatGPTに聞いてみました。

めっちゃありがたい。プログラミング苦手なので今後はChatGPTにたくさんお世話になりそうですww

変数書き込み

float変数 Kpをフラッシュ保存

変数読み出し

フラッシュ保存されたfloat変数 Kpを読み出し

 

姿勢制御モジュール再製作

OLED表示と変数保存ができるようになりました。

 

つくりがあまりに雑だったのでユニバーサル基板でESP32用ボードにマッチするように配線してきれいにRaspberry Pi Pico W が実装されるようにしました。

 

 

おわりに

ここでは Raspberry Pi Pico W の Arduino IDEでの開発を深掘りして、姿勢制御モジュールを実現しました。

これで私と Raspberry Pi Pico W との距離はずいぶんと近くなったように思います。
ほぼESP32と同様に取り扱えるようになったといってよいでしょう。

今後は以下の課題を念頭に置きつつ開発に取り組んでいきたいと思います。

  • PIOでエンコーダA相, B相検知して回転方向判断
  • エンコーダA相, B相のパルスを逓倍して高分解能化

次の記事

Raspberry Pi Pico W で二足歩行ロボット

コメントはこちらから

メールアドレスが公開されることはありません。コメントのみでもOKです。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください