「ESP32」タグアーカイブ

50日後にセンサレスベクトル制御してみたい俺 (前編)

すき 0
0

HomeMadeGarbage Advent Calendar 2022 |6日目

これまで弊ブログにて ブラシレスモータ駆動への道 と題してブラシレスモータの回転制御に関する勉強をやってきました。

  • センサレス クローズドループ矩形波制御
  • オープンループ正弦波駆動
  • クローズドループ正弦波駆動

ベクトル制御も勉強したいなと思いつつ なんか難しそうだしと敬遠する自分がいたので “50日後にセンサレスベクトル制御してみたい俺” と銘打って毎日少しずつ勉強することにしました。

毎日少しでもモータのことを考えれば少しは理解も深まるだろうと思った次第です。
ここでは前後編に分けて私のこの50日間について記載します。

 

構成と思想

回路構成は以下の通りです。

クローズドループ正弦波駆動の時の構成に電流センサを追加したのみです。
変数調整用にと可変抵抗を繋げていますがここでは使用せず、BlynkレガシーアプリでBLEで変数調整しました。

部品

取り組むための思想

“50日後にセンサレスベクトル制御してみたい俺”に取り組む際に意識した点についてまとめます。

  • 専用評価キットや専用コントローラは使用しない
    これは原理を理解するために”ブラシレスモータ駆動への道”から決めている掟です。
    専用のものは高いですし、それを使って回しても私の場合は理解につながらないため。
  • 制御ループを一定で管理しない
    これはESP32を採用した弊害とも言えるかもしれないのですが、仮にモータを自由に制御できるようになったとしてコントローラをモータ専用で使用する機会は私の人生においてないであろうと考えこの思想に至りました。
    モータを回しつつ何かを実行することになるだろうし無線で何かしらしたいであろう。
    ここではESP32を用いて制御ループ時間は一定管理せず2コアで一方でセンシング、他方で駆動で実験を進めました。

3相->2相変換

モータ回転時の3相電流をセンシングして2相変換する手法を学びます。

 

電流は2個のセンサを用いて測定し、Iwは3相平衡が成立していると考えて Iu + Iv +Iw = 0 から導出しました。
またモータは正弦波駆動で回転させています。

 

Iα, Iβ算出 (Clarke変換)

 

Id, Iq算出 (Park変換)

 

電流の2相変換の理解のために色々な記事・書籍を参考にしました。

ここまでは特に以下が参考になりました。

 

正弦波駆動にて正弦波の周期を変えてId, Iqを観測


正弦波駆動にて正弦波の振幅を変えてId, Iqを観測


振幅を変えるとモータに流れる電流が変わりIqが大きく変化する様子が観測できました。

 

3相電流から直接 Id, Iq算出


以下を参考に直接Id, Iqを算出してClarke変換、Park変換して算出した値と比較しましたが違いはありませんでした。

以後は3相電流から直接 Id, Iqを算出して使用します。

磁気エンコーダで回転検出

磁気エンコーダ AS5048を1周 (機械角) 0~512の値を出力するようにして観測しました。
モータは正弦波駆動で回しています。

 

モータを正弦波駆動で1周自由回転させて止まった地点のエンコーダ値をゼロとオフセットをかけるようにしました。

 

機械角から電気角を算出。14極 (7ペア)のモータを使用しており電気角は機械角の1/7となり値が荒くなってしまった。。

 

これまではESP32のコアを1つで実験してきました。
以下は2コア用いてcore0でエンコーダ検知とシリアル出力実施してcore1で電流 センシング&モータ正弦波駆動。
コア倍でエンコーダ検出及びシリアル出力処理が早くなった。


メガドライブミニ2をやらなくてはいけないのでサボったよね。(16日目も同様)

 

こちらの書籍も非常に参考になりました。

 

ベクトル制御にむけて準備

電流センスと磁気エンコーダによる回転検出が確認できましたので、更にベクトル制御にむけて調査を進めます。

 

Iqを指定して実測値と差分をとってPI制御によって正弦波駆動の振幅を制御してみた。

エンコーダ値から回転速度算出[rpm]。

ラジオ収録で忙しくてサボり

回転速度を指定して実測値と差分をとってPI制御によって正弦波駆動の周期を制御してみた。

 

正弦波駆動の位相をエンコーダによる電気角にして、Iq指定のPI制御で正弦波駆動の振幅を制御するがうまく回らず。。

しかし低速回転ではうまくいきました。

 

おわりに

ここまでで電流センスによる3相-2相変換と磁気エンコーダによる回転検出が確認できました。

更に低速ではありますが正弦波駆動の位相をエンコーダによる電気角にして、Iqを指定してPI制御で正弦波駆動の振幅を制御する方法でのモータ回転を確認できました。

徐々に機能と原理を確認しつつベクトル制御の準備を進め、実現に向けての機運も高まってまいりました。
しかし、この先には非常に険しい道が待っていたのでした。

後半につづく

次期モデル Mini Pupper 2 ラズパイCM4で足座標指定

1
0

前回はラズパイ CM4で直接サーボ角度を指定してミニぷぱ動作を楽しみました。

次期モデル Mini Pupper 2 ラズパイCM4で足座標指定

 

ここではラズパイ CM4で足の座標を指定しての動作を楽しみました。

 

足座標指定

ここではMini Pupper2に搭載されたラズパイCM4からサーボを制御するESP32に足の座標をシリアルデータ送信して動作させます。

足の座標は各足の付け根を原点にして前後方方向のX [mm]とY方向へのロール角 [°]と高さZ [mm]を指定するようにいたしました。

 

更に座標移動には以前実験したスムージング機能を持たせて、シリアルデータにスムージングの効き具合も一緒に送るようにいたしました。

 

具体的には以下の13のデータを送って動作させます。
[スムージング[%],  前右x, θ. z, 後右x, θ. z, 前左x, θ. z, 後左x, θ. z, ]

スムージングは以下のように実施しています。

$$現在の座標 = 指示座標 * (100 -スムージング) [\%] + 前回の座標 * スムージング [\%] $$

 

動作

まずは各足の高さを指定して屈伸させてみました。
スムージングがない(0%)と動作が急峻になります。

 

スムージング機能によって動作が柔らかくなり振動も減っています。
移動座標と一緒にスムージング具合[%]も送っていることが今回のミソです。

歩行

足の座標を指定して歩行も試してみました。


こちらもスムージングによって動きが非常にスムーズになっています。

 

歩行動作は以下の4ステートをシリアルデータとしてCM4からESP32(シリアルサーボ)に送るだけで実現できました。

各ステートを100msec毎に送信。

 

スムージングによって各ステート間が良い感じで補完されてスムーズな歩行が実現されました。

次の動作座標を動的に動かしても同様にスムーズな動作が可能であると考えます。
足座標指定による動作は非常に有用な方法なのではないでしょうか。

おわりに

ここではラズパイ CM4で足先の座標を指定してのミニぷぱ動作を楽しみました。

スムージング具合も指定することで大まかな座標指定でも滑らかに動けることがわかりました。
CM4でモーション座標をサクサク流したり、もしくはセンシングで動的に座標を指定しても十分な動作が期待できそうで大変喜んでおります。

それではまた。

次期モデル Mini Pupper 2 ラズパイCM4でサーボ角度指定

1
0

前回はミニぷぱ2でディスプレイ表示とスピーカによる音声再生を楽しみました。

次期モデル Mini Pupper 2 CM4でメディアを堪能

 

また前々回はRaspberry Pi Compute Module 4 (CM4) からESP32に組み込まれた動作モードを起動しての動作を楽しみました。

次期モデル Mini Pupper 2 に Raspberry Pi Compute Module 4 を搭載

ここではCM4で直接サーボの角度を指定して動かす仕組みを構築して、ミニぷぱを楽しんでみました。

ミニぷぱ2構成

ミニぷぱ2の構成は大まかに以下の通りです (製品版は変更となる可能性がございます)。

前々回はCM4からシリアル通信で1文字モーションコード送って、ESP32に書き込んだ動作を起動させました。

ここではミニぷぱの12個のサーボの角度をCM4から直接指定して動作させてみました。

サーボ角度指定

CM4から12個分のサーボの角度をシリアル送信してESP32でサーボを指定の角度に動かします。

以下の動画のようにCM4のNode-REDでシリアルデータを送信しました。

伏せの状態を初期姿勢としすべてのサーボの角度を0°としています。
Node-REDでは以下のようにシリアル送信しています。

ミニぷぱのサーボは12個ありIDが1から12まで割り振られています。配列の0が扱いにくいのでa[13]としてa[1]~a[12]をサーボ角度として使用しています。

立ちの姿勢は以下の通り。

 

ミニぷぱ立つ

CM4から直接サーボの角度を指定できるようになったので、モーションの作りこみが楽になりました。
ESP32は書き込みに時間がかかりますので。。

早速モーションバリエーションを楽しみました。

なんと立ってしまいましたwww

詳細説明は省略しますがNode-REDのフローは以下のような感じ

 

サーボ角度をビシビシ指定しているので動きが急峻ですね。。
動作間のスムージングは必要そうです。

 

本当は立ち上がった後に前進歩行させたかったのだけど。。w
以下のように かかとかつま先のアタッチメントつければいいかもしれませんね。

おわりに

ここではCM4で直接サーボ角度を指定してミニぷぱ動作を楽しみました。

IMUはESP32に接続されているので、IMUと動作を絡める際にはどうすればよいかなどまだまだ検討の余地はあります。

CM4でサクサク モーション指定できるので色々な動作を検討したいです。
指定角度間のスムージングなども検討したいです。

それではまた。

追記

バク宙挑戦 (2022/11/15)

前機種でも試したバク宙。

 

今回もやってみた。CM4によってかなり軽量化されてるのでさてどうなるか。。

ダメでした。。後頭部殴打www

構造上後ろ足が後ろにまっすぐ伸びないのよ。。
前宙も試したけどダメだった。。

サーボのトルクどうこう以前に構造的に無理そうでした。

次の記事

次期モデル Mini Pupper 2 ラズパイCM4で足座標指定

次期モデル Mini Pupper 2 ラズパイCM4でメディアを堪能

0
0

前回はRaspberry Pi Compute Module 4 (CM4) をミニぷぱ基板に搭載してESP32との連動やAlexa連携を楽しみました。

次期モデル Mini Pupper 2 CM4でメディアを堪能

ここではミニぷぱ2基板上でCM4に接続されたディスプレイとスピーカの動作を楽しみました。

ここで使用している基板は製品版と異なる場合があります。何卒ご了承ください。

 

ディスプレイ

ディスプレイは前モデルと同様にST7789が使用されておりました。
以前と同じようにディスプレイ表示させてみました。バックライトのGPIOピンが異なるくらいの違いでした。

ロボット犬『Mini Pupperミニぷぱ』Pythonでモーション記述

動作

無事に表示。画像はST7789のpythonライブラリのサンプルを使用。
https://github.com/pimoroni/st7789-python

スピーカ

基板にはスピーカアンプ (NS4890B)も搭載されておりました。

アンプへの電源供給ON/OFFピンがGPIO22、モノラル入力がGPIO12でした。

アンプ出力に手持ちのスピーカを接続しました。
コネクタが持ってない型だったのではんだ付けしました。

動作

GPIO22をHighにしてアンプの電源をONにして、GPIO12からPWMを出力してみました。

ブザーのような音が出力されています。

 

CM4には通常のラズパイのようにヘッドホンジャックがないので、以下をconfig.txt に追加します。

これによって、音声再生出力がGPIO12, 13からされるようになります。
ミニぷぱ2基板はモノラル出力なのでGPIO12のみ使用します。

CM4でYoutubeを再生しスピーカから音声が再生されることを確認しました。

参考

おわりに

ここではミニぷぱ2でディスプレイ表示とスピーカによる音声再生を楽しみました。

やはりラズパイはメディアに強いなという実感を強く受けました。
ミニぷぱの動作にメディアを絡めることでさらに表現が増すのではないでしょうか。

それではまたお会いしましょう。

追記

移動するメディアプレイヤー (2022/11/17)

CM4でYoutube再生しつつディスプレイにはサムネイルを表示。
ただそれだけww

次の記事

次期モデル Mini Pupper 2 に Raspberry Pi Compute Module 4 を搭載

次期モデル Mini Pupper 2 に Raspberry Pi Compute Module 4 を搭載

0
0

これまでは次期モデル Mini Pupper 2 をESP32のみで楽しんでまいりました。
前回はより製品版に近いとされる基板の動作を確認しました。

次期モデル Mini Pupper 2 新規基板を味見

 

Mini Pupper 2 の基板にはRaspberry Pi Compute Module 4 (CM4) も搭載可能です。

 

この度、CM4を提供いただきました。MangDang社様本当にいつもありがとうございます!!

ここからはCM4とESP32によるミニぷぱ動作を検証します。

ここで使用している基板は製品版と異なる場合があります。何卒ご了承ください。

 

CM4設定

提供いただいたCM4モジュールはeMMCのないモデルでした。
小さくてビックリ!!

 

早速搭載。

 

Mini Pupper 2基板にはSDカードスロットとmicro-HDMIコネクタが搭載されています。

 

Raspi OS(32bit)を書き込んだSDカードを入れて起動を試みたのですが、すぐにリセットしてしまう謎の症状に苦しみました。。

調査したところ以下でも同様の症状が報告されており、解決策として書き込みのあった
config.txt を修正 ( “dtoverlay=vc4-kms-v3d” -> “dtoverlay=vc4-fkms-v3d”) する方法で改善し無事に起動できました。

https://forums.raspberrypi.com/viewtopic.php?t=323920

CM4 – ESP32間通信確立

CM4の起動が無事できたので更にVNCとNode-REDの設定も実施し、ここではESP32-S3との通信を目指します。

基板上ではESP32-S3のUART1とCM4のUART3が接続されていましたので、以下を参考にCM4のUART3を有効化しました。
https://toki-blog.com/pi-serial/#UART3UART4UART5

無事にシリアル通信が可能になりました。

ミニぷぱ動作

CM4とESP32-S3 間の通信ができるようになったので、CM4から文字を送ってESP32に仕込んだ動作を起動してみました。

CM4上のNode-REDから文字をシリアル送信してESP32で文字に対応した動作でサーボを制御しています。

 

Alexa連携

ミニぷぱがラズパイOS (Node-RED) で使えるようになりましたのでAlexaとの連携も容易となります。

以下と同じ方法で連携してみました。

ラズパイで気圧測定

 

Node-RED Alexa Home Skill Bridgeでミニぷぱ動作用のデバイスを用意してAlexaアプリの定型アクションで起動発話を設定します。

 

Node-REDで動作用デバイスとモーションコマンドを連結させます。

動作

簡単にミニぷぱとAlexaを連携できました♪

おわりに

ここでは提供いただいたCM4モジュールをミニぷぱ基板に搭載してESP32との連動やAlexa連携を楽しみました。

これまでにCM4なしでESP32のみでミニぷぱ動作を実現していましたので、ここではCM4はESP32に組み込まれた動作を指定するのみの仕事しかしておりません。
しかしESP32で制御用のブラウザページを作りこむのはかなり大変だったので、ラズパイ(CM4)でかなり楽になりそうです。

ミニぷぱ動作においてCM4とESP32の役割の振り分けにはいろいろな方法が考えられそうです。
思いついたモノを上げると

  1. ESP32で各動作を組み込んでおいてCM4で起動 (今回の手法)
  2. CM4から足の座標をESP32に指定
  3. CM4から各サーボの角度をESP32に指定

ESP32のプログラム書き込みが面倒なので上の手法の2か3が良いのかなと現時点では思っています。
製品版の手法もウォッチしつつ検討すすめます。

 

次回はディスプレイやスピーカの動作確認を実施したいです。

次の記事

次期モデル Mini Pupper 2 に Raspberry Pi Compute Module 4 を搭載

次期モデル Mini Pupper 2 新規基板を味見

0
0

前回はMini Pupper 2の初期サンプル基板搭載の6軸IMUセンサ QMI8658C の値を取得して、平行姿勢制御を楽しみました。

次期モデル Mini Pupper 2 新規基板を味見

 

今回はより製品版に近い仕様であろう新規基板をいただきましたので動作確認いたします。

 

新規基板

初期サンプル同様に天板が基板になっています。
大きく異なるのがRaspberry Pi 4と同じSoC搭載のCompute Module 4 (CM4)が載ることでしょう。

ここまでは正直、ESP32とラズパイの共存のイメージが湧いていなかったのですが、
この基板をみて多くのインスピレーションとアイディアが溢れている状況です。

大きく役割を分けるとラズパイでディスプレイや音声などを制御してESP32でサーボをコントロールするといった感じになっています。


ESP32とラズパイの搭載でネットワークにつながるデバイスが2個存在することになるのでかなりひろい応用ができそうです。
センサ等の拡張性も高く繋げられないものはないと言っても過言ではないでしょう。

ただ現在、私はCM4を所有できていないので融合動作を体験できないのが残念です。
入手出来次第、すぐに体験したいです。楽しみ

ESP32動作確認

新規基板でラズパイなしのESP32のみの動作確認を実施します。

初期サンプルではESP32と接続するシリアル変換ICの実装とUSBコネクタがありましたが、新規基板では直結のコネクタのみとなっていました。
馴染みのないコネクタだったのでちょっと加工してUSBシリアルコネクタと繋げられるようにしました。
いちいち手動でブートモードにする必要はありますが問題なく書き込みができました。

製品版ではESP32書き込み専用ケーブルが同梱されるようになると想像します。

動作

ESP32周りは大きな変更はないので、初期サンプルのコードがほぼそのまま使用できました。
IMUセンサQMI8658C の値も取れてバランス動作バッチリです。

 

製品版では更に変更もあると思いますが、念のためESP32周りで初期サンプル基板と異なった点を以下にまとめておきます。

  • 書き込み用シリアル変換ICとUSBコネクタの廃止
  • 前方フルカラーLEDの廃止
  • シリアルサーボ通信UARTピンの変更
  • IMUセンサQMI8658C の実装向きの変更

おわりに

ここではMini Pupper 2の新規基板のESP32の動作確認を行いました。

とにかくラズパイとの融合動作を試したくてしょうがない状況です。
実基板をみて強くそう思いました。

これまではESP32にコントロールブラウザ画面を実装していましたが、
その辺はラズパイでやったほうが楽ですし更に高機能にもできそうです。

Mini Pupper 2はかなりおすすめのロボット犬になりそうです。
私は非常にワクワクしております。

次の記事

ラズパイで気圧測定

次期モデル Mini Pupper 2 でIMUセンサを堪能

0
0

前回はサーボのトルクフィードバックやポジションフィードバックを味見しました。

次期モデル Mini Pupper 2 でIMUセンサを堪能

 

ここでは毎度やるといっていたMini Pupper 2 搭載のIMUの検証をやっとこ実施しましたので報告いたします。

 

IMUセンサ

Mini Pupper 2にはESP32の他になんとIMUセンサも搭載されております。

いただいたサンプル基板には 6軸 IMUセンサ QMI8658C が搭載されていました。

 

Arduino用サンプルをESP32で使えるようにする修正にてこずりましたが、
やっとセンサの値 (加速度3軸、角速度3軸) を取得できるようになりました。


通信はI2Cを使用。

参考

 

平行制御

内蔵IMUの値を取得できるようになったので、以前 Mini PupperにATOM Matrix を載せて実施した平行姿勢制御を実施してみました。

ロボット犬『Mini Pupperミニぷぱ』を ATOM Matrix で堪能

 

前回同様にX軸、Y軸の加速度から傾きを算出して、角速度と合わせてカルマン・フィルタを通してPD制御で足の高さを制御しています。

おわりに

ここでは念願の基板搭載の6軸IMUセンサ QMI8658C の値を取得して、平行姿勢制御を楽しみました。

Mini Pupper 2にはESP32に加えてIMUセンサも標準搭載されるとのことですので、非常に楽しみです。
応用の幅も大きく広がりそうです。

次の記事

次期モデル Mini Pupper 2 でIMUセンサを堪能

次期モデル Mini Pupper 2 で初級ハプティック体験

1
0

前回はMini Pupper 2 で動作バリエーションによるダンスを楽しみ、
汎用性の高いコントロールシステムの作成を実施いたしました。

次期モデル Mini Pupper 2 で初級ハプティック体験

 

ここではサーボモータのトルクフィードバックについて確認しました。

 

トルクフィードバック

Mini Pupperの公式に以下のような動画が紹介されておりました。

おそらく次期モデル Mini Pupper 2の製品用カスタムサーボによる実験だと思われますが、
サーボの負荷を検出し、作用点での力の大きさとその方向を描画している様子です。

提供いただいたMini Pupper 2 超初期サンプルのサーボモータ SCS0009 にもトルクフィードバック機能がありましたので実験してみました。

サーボのアームに負荷をかけるとトルク値が上昇し、方向によって符号が変わりました。
細かい精度はないようですが(設定で変えられるのかな?)、コレは面白い応用ができそうです。

初級ハプティック体験

サーボのトルクが取得できましたので、Mini Pupper 2 サンプルの足に応用してみます。

サーボに一定以上のトルクがかかるとその方向に回転するようにしました。

 

負荷をかけた方向に足が動いている様子が分かります。

足を任意の方向に動かすには、サーボトルクを現状の姿勢と力の作用点からベクトル合成してなどなど
ややこしい演算が必要かと想像していましたが
サーボのトルク値オーバーでおのおの回転という簡単な動作で割と所望の動作をしてくれ大変驚きました。

トルクの検出精度の向上や応答の度合いの調整を更に施せば、良い感じのハプティックデバイスのような動作になる予感がいたしました。
製品版のカスタムサーボモータに期待したいところです。

おわりに

ここではサーボのトルクフィードバックを味見し初級ハプティック体験をいたしました。
Mini Pupperの動作に組み込めば、人間が強要するお手動作などの実装ができそうです。

毎度やるといっているMini Pupper 2 搭載のIMUの検証は本当に次こそは実施したいです!!!

追記

サーボ位置フィードバック

次の記事

次期モデル Mini Pupper 2 でIMUセンサを堪能

次期モデル Mini Pupper 2 でダンス

0
0

前回は提供いただいた新モデル Mini Pupper 2 の初期サンプルをArduino IDEで動作開発できるようにいたしました。

次期モデル Mini Pupper 2 の初期サンプルを味わう

ここでは更に動作のバリエーションを増やしてダンスに挑戦いたしました。

 

ダンスに挑戦

前回からサーボの初期位置の微調整を実施し足座標の精度を高めました。
更に動作バリエーションを増やしてダンスに挑戦

各種動作を組み合わせることで、ダンスっぽくはなりましたかね。。

APモードによる遠隔コントロール

ここまではMini Pupper 2のコントロールにはBLEを介してBlynk legacyで制御してまいりました。
Blynkは大きな改変がありBlynk legacyは使用できないユーザも多いため、共有しやすい方法を検討します。

Mini Pupper 2にはESP32-S3が搭載されていますのでESP32をアクセスポイントにしてブラウザでコントる方法を採用いたしました。
これであれば環境にWiFiが無くてもMini Pupper 2とスマホやPC間での通信で制御が可能です。

 

ブラウザ画面に以下のように動作ボタンとパラメータ設定項目を用意しました。

 

これでBlynkを用いず直接ESP32に接続してのコントロールが可能となりました。

おわりに

ここではMini Pupper 2 で動作バリエーションによるダンスを楽しみ、
汎用性の高いコントロールシステムの作成を実施いたしました。

前回やるといっていたMini Pupper 2 搭載のIMUの検証は次こそ実施したいです!!

追記

SHISEIGYO-1 Walke Jr. とお戯れ

ロボットの魅力

お散歩

 

次の記事

次期モデル Mini Pupper 2 で初級ハプティック体験

次期モデル Mini Pupper 2 の初期サンプルを味わう

2
0

なんとロボット犬 ミニぷぱの新モデル Mini Pupper 2 の初期サンプルを提供いただけました!

ここでは前機種との違いを実感しながら Arduino IDEで動作させるところまで記載いたします。

Clock Arm 時計を自作

今回提供いただいた Mini Pupper 2 は超初期サンプルとのことですので、製品版と大きく異なる可能性が高いことをご了承ください。

また比較対象の前機種のMini Pupperも早い時期にいただいたものですので流通版と異なる可能性があります。重ねて宜しくお願い致します。

 

超初期サンプル

いただいた神々しいサンプル。サイズや機構は前機種とほぼ変わっていない様子です。

 

Mini Pupper 2はラズパイとマイコンが共存する仕様のようです。
いただいた初期サンプルでは天板が基板になっていてESP32-S3が搭載されていました。
前回ラズパイ4を取っ払ってESP32で4足歩行動作を楽しんだ私的にはご馳走の仕様です。

足のサーボはシリアルサーボが採用されており、貼られる配線によりだいぶスッキリした印象を受けます。

ESP32-S3には技適マークがなかったので念のため (技適警察がうるせーし)  技適未取得機器を用いた実験等の特例制度に申請しました。

Arduino IDEで堪能

ESP32-S3が載っているということで、ここではMini Pupper 2サンプルをArduino IDEでコーディングしての動作を目指します。

ESP32-S3をArduino IDEで書き込みするためにはESP32ライブラリを2.05にバージョンアップする必要がありました。

 

サンプル基板には書き込み用USB端子とカラーLED Neopixel も搭載されていますので、書き込みテストしてみました。


環境が整えばこっちのものです。

足のサーボモータ

サンプルのシリアルサーボはFEETECH SCS0009と同等品でした。
秋月のサイトにアップされているライブラリで無事に動作確認できました。


12個のサーボモータを接続。
サーボのIDは1~12であらかじめ割り振った状態で提供いただけました。

 

足のサーボケースは前回のように3Dプリント品ではなくなり、ロール軸の受けがベアリングになり洗練されてます。

逆運動学で足制御

サーボモータが動かせるようになりましたので、足の動作を逆運動学で位置座標の指定で動かせるようにします。

座標は以下のように定義します。

 

大腿の長さ$L_1$は50mm、下腿の長さ$L_2$は56mmでした。
足のロール角を$θ_0$、大腿の角度を$θ_1$、下腿を動かすサーボの角度を$θ_2$とします。

 

ここでは足のつけ根のロール角$θ_0$と座標x, zを指定して足を制御することにします。

足を上げて(Z軸)、前後(X軸)するためのサーボ角度は以下で導出されます。

大腿のサーボの角度$θ_1$は余弦定理を用いて導出します。

${L_2}^2 = {L_1}^2 + {l_d}^2 – 2{L_1}{l_d}\cos{θ_1}’  $

${θ_1}’ = \cos^{-1} \left(\frac{{L_1}^2+{l_d}^2 – {L_2}^2}{2{L_1}{l_d}} \right) $

$$θ_1 = φ – {θ_1}’  = φ -\cos^{-1} \left(\frac{{L_1}^2+{l_d}^2 – {L_2}^2}{2{L_1}{l_d}} \right) $$

$$      但し、φ = \tan^{-1} \left(\frac{x}{z’} \right)$$

$$          l_d = \sqrt{x^2 + {z’}^2}$$

$$  高さを足のロール角で補正 z’ = \frac{z}{\cos{θ_0}}$$

 

下腿の角度$θ_2$も同様に余弦定理を用いて導出します。

${l_d}^2 = {L_1}^2 + {L_2}^2 – 2{L_1}{L_2}\cos{θ_2}’ = {L_1}^2 + {L_2}^2 – 2{L_1}{L_2}\cos\left({\frac{\pi}{2}+θ_2+θ_1}\right)= {L_1}^2 + {L_2}^2 + 2{L_1}{L_2}\sin\left({θ_2+θ_1}\right) $

$$θ_2 = \sin^{-1} \left(\frac{{l_d}^2-{L_1}^2 – {L_2}^2}{2{L_1}{L_2}} \right)-θ_1$$

 

以上で 足のロール角$θ_0$と足の前後(X軸)位置と上下(Z軸)位置の指定で足のサーボを制御できるようになりました。

動作

足先の座標指定での動作が実現されました。

 

初期姿勢は以下のように足が直角で伏せるような格好でサーボの角度が中間値 (512) になるようにしました。

各種動作

歩行などのモーションを仕込んで動かしました。
コントロールはBLE介してBlynk Legacyで実施。


以前作ったTPU製のマシュマロ靴を履いてウキウキの様子です。
若干まだサーボ位置にオフセットがある感じですがおいおい微調整します。

おわりに

ここでは提供いただいた Mini Pupper 2 サンプルでArduino IDEでの制御を楽しみました。

サンプル基板にはなんとIMUも搭載されているので次回はコチラを楽しみたいと思います。

次の記事

次期モデル Mini Pupper 2 の初期サンプルを味わう

SHISEIGYO-1 Walker Jr. 差動駆動型リンク機構で歩行

0
0

前回はSHISEIGYO-1 Walker Jr. の足に平行リンク機構を採用し、ヒザのある歩行を実現いたしました。

SHISEIGYO-1 Walker Jr. ヒザ爆誕

ここでは差動駆動型リンク機構を試しましたので報告いたします。

 

差動駆動型リンク機構

差動駆動型リンク機構を用いれば、モータを上部に2個配置するのみでヒザ上げや足の前後移動が可能になります。

 

早速 Fusin360上でSHISEIGYO-1 Walker Jr. の足に差動駆動型リンク機構を取り入れてみました。

非常にいい感じです。

足製作

CAD設計した足を3Dプリントして組み立てます。

 

片足完成。うまくいった。

 

もう片方も完成。遂に憧れの屈伸運動ができるようになりました。

参考

  • ROBO-ONEにチャレンジ! 二足歩行ロボット自作ガイド

 

足動作検証

差動駆動型リンク機構の足が完成しましたので、歩行に向けて足踏み動作を確認しました。

 

機構の関節の締め付けが甘く足踏みのたびに回転してしまいましたが、調整で改善しました。

足踏み動作も実現されましたので いよいよ歩行に挑戦です。

 

逆運動学

差動駆動型リンク機構によって足先の上下、前後移動が可能になりました。
これまではサーボモータの角度を直接指定して動作させてきましたが、ここからは足先の座標を指定して逆運動学でサーボ角度を算出して制御します。

座標は以下のように定義しました。

 

逆運動学 算出

前方サーボの角度$θ_1$は余弦定理を用いて導出します。ちなみに$L$は大腿、下腿の長さ(36mm)。

$L^2 = L^2 + {l_d}^2 – 2{L}{l_d}\cos{θ_1}’  $

${θ_1}’ = \cos^{-1} \left(\frac{l_d}{2{L}} \right)$

$$θ_1 = φ + {θ_1}’  = φ +\cos^{-1} \left(\frac{l_d}{2{L}} \right) $$

$$      但し、φ = \tan^{-1} \left(\frac{x}{y} \right)$$

$$       l_d = \sqrt{x^2 + y^2}$$

 

後方サーボの角度$θ_2$も余弦定理を用いて導出します。

${l_d}^2 = L^2 + L^2 – 2{L}{L}\cos{θ_2}’ = 2L^2 – 2L^2\cos{θ_2}’$

${θ_2}’ = \cos^{-1} \left(\frac{2L^2-{l_d}^2}{2{L}^2} \right)$

$$θ_2 =\pi-θ_1-{θ_2}’ = \pi-θ_1-\cos^{-1} \left(\frac{2L^2-{l_d}^2}{2{L}^2} \right)$$

以上より、足先の座標(x, y)からサーボモータの角度を導出できるようになりました。

動作

まずは逆運動学で足の高さを指定して、屈伸と足踏み動作を確認しました。

なめらかで非常に良い動きです。サーボの駆動音も低減されました。

 

歩行

いよいよ歩行です。
SHISEIGYO-2 Walkerで検証した歩行メソッドを適応させます。

 

ヒザによる足上げを伴う歩行が遂に実現されました。

 

歩みを徐々に速くしてみた。

 

おわりに

ここではSHISEIGYO-1 Walker Jr. の足に差動駆動型リンク機構を採用し、さらに足を逆運動学で制御することでの歩行動作を確認いたしました。

差動駆動型リンク機構によって片足サーボ2個のみで足先の上下前後動作ができ、
逆運動学によってスムーズな移動が実現されました。

その半面、機構が複雑になったことにより足のブレも大きくなり若干バランスが悪化しフライホイールの調整は難しかったです。
今後の課題といたしましては差動駆動型リンク機構による足の製作の精度向上が挙げられます。

SHISEIGYO-1 Walker Jr. は1週間ほどで大きく進化しましたので、引き続き取り組んでいきます!

SHISEIGYO-1 Walker Jr. ヒザ爆誕

0
0

前回は1個のリアクションホイールでバランスする小型の2足歩行ロボット”SHISEIGYO-1 Walker Jr. “の誕生を報告いたしました。

SHISEIGYO-1 Walker Jr. ヒザ爆誕

今回は足について更に検討してみましたので報告いたします。

 

リンク機構

足の検討に際しまして、まずリンク機構について学習しました。
CADソフトFusion360で機構を構成し動作を確認します。

上はオーソドックスな平行四辺形型のリンク機構動作を試したものです。
上辺を水平に固定すれば、縦の辺をどの角度にしても下辺は水平を保っています。

図らずも前回作製した SHISEIGYO-1 Walker Jr. の足はこの機構を使用しており、
長辺2つをサーボで動かしている格好となっております。


ロボット犬 Mini Pupper の足もこの機構の変形版であることが分かります。

平行リンク機構

更に辺を追加した平行リンク機構の動作は以下の通りです。

上辺を水平に固定すれば、残りの横の辺は水平を保持します。
更にヒザのような機構がうまれ下部の辺の角度も変えることで人間のような足の動作ができております。

差動駆動型リンク機構

平行リンク機構では下腿の角度を変えるにはヒザより下にモータを配置する必要があります。
以下の差動駆動型リンク機構を用いれば、上部にモータを配置することが可能となります。

差動駆動型リンク機構は上部にモータを2つ配置して、大腿と下腿を制御できる素晴らしい気候であることを学びました。

参考

平行リンク機構による足

ここでは平行リンク機構を用いでSHISEIGYO-1 Walker Jr.の足を再構築しヒザのある歩行を目指します。

 

足上部の大体の辺2本をサーボで動かし、下腿は直角固定で動かしてみます。

平行リンク機構の採用でヒザができました!生命感が少し増したようにも感じます。
前回に比べ足が長くなり高くなったのでフライホイールは2枚重ねにしてトルクを向上しています。

しかし下腿は直角で固定しましたので足を後方に下げた際に逆関節になってしまいます。

より生物らしい歩行を目指すのであれば、差動駆動型リンク機構を導入する必要がありそうです。

引き続き検討を進めます。

 

次の記事

SHISEIGYO-1 Walker Jr. 差動駆動型リンク機構で歩行

SHISEIGYO-1 Walker Jr. 爆誕

1
0

これまでリアクションホイールでバランスする2足歩行ロボットを3体ほど製作してきました。

SHISEIGYO-1 Walker 参 を実現させたい俺6 ーバッテリ内蔵ー

この度、4台目の製作を実施いたしましたので報告させていただきます。

 

コンセプト

今回は足を小さく構築して、安定度を向上し素早い歩行を目指します。

 

足用のサーボモータにはFEETECH のミニサーボを採用しました。

製作

コントローラとIMUセンサはこれまでのSHISEIGYO-1 Walkerと同様にESP32とMPU6050を採用します。

ミニサーボFT1117Mを4個使用して足を構築します。

 

倒立動作

3Dプリントした足をサーボアームに固定。片足を2つのサーボを使用して構成します。

取り付けた足での倒立動作を確認いたしました。

歩行検討

サーボ角度をざっくり指定して歩行を試しました。それなりに歩けています。

 

歩行の可能性が確認できましたので、足の角度を正弦波形でスムーズに動かしてみます。
若干バランスが悪いですが立派に2足歩行ができています。

 

更にLiPoバッテリを搭載し、電源コードなしでの動作を実現しました。

SHISEIGYO-1 Walker Jr.

SHISEIGYO-1 Walkerの4号機として ここまで作ってきましたが 仕上がりが思いのほかこじんまりしたので、
セカンドブランド 『SHISEIGYO-1 Walker Jr.』を立ち上げることにしました。

足を小さく作ることができましたので、安定度も高く素早い動作も可能です。

足再検討

歩行動作の更なる安定を目指して、足の形状を変えてみます。

足幅を長くしました。

 

断面はエッジを立てています。

 

これにより、更に安定度が増し歩幅を大きくとることが可能になりました。

 

おわりに

ここでは新しいコンセプトのSHISEIGYO-1 Walkerの製作に取り組み、
SHISEIGYO-1 Walker Jr.がこの度 誕生いたしました。

これまでのSHISEIGYO-1 Walkerとは異なるフォルムと動作を実現でき大変良かったです。

(仕上がりが想像よりも地味であったため 完成時に少し心が折れたのはナイショ)

次の記事

SHISEIGYO-1 Walker Jr. 爆誕

SHISEIGYO-1 Walker 参 を実現させたい俺6 ーバッテリ内蔵ー

4
2

前回はSHISEIGYO-1 Walker 参 の歩行動作の実現を確認できました。

SHISEIGYO-1 Walker 参 を実現させたい俺6 ーバッテリ内蔵ー

SHISEIGYO-1 Walker 参はリアクションホイールでバランスをとり、格安シリアルサーボLX-244で構成された足で歩行します。

 

バッテリ内蔵

高トルクのシリアルサーボLX-244で足を構成しましたので、念願だったバッテリ搭載を実施しました。

構成

部品

動作

無事にバッテリ搭載できました。
電源コードなくなって快適♪

歩行

バッテリ内蔵でコードレス化に成功したのでどこまでも歩けるはずですが、
なかなかスピード出せず安定性含めて調整が必要です。

もっとサクサク歩けるようにして一緒に散歩行きたいな。

SHISEIGYO-1 Walker 参 を実現させたい俺5 ー歩行検討3ー

0
2

だいぶ期間があいてしまいましたが、シリアルサーボLX-244で足を構築しリアクションホイールでバランスをとる二足歩行ロボット”SHISEIGYO-1 Walker 参” の歩行検討を実施いたしました。

前回は歩行動作の自動化を目指し歩行動作をプログラミングしましたが上手くいかず、サーボのギアに若干遊びがあるためではないかと結論付けました。

SHISEIGYO-1 Walker 参 を実現させたい俺4 ー歩行検討2ー

 

前回のおさらい

前回は歩行の自動化を試みましたが、機体の振動が大きく実現できませんでした。

 

シリアルサーボLX-244には若干ギアの遊びがあり、これが振動の原因でないかと考えました。

ギアの遊び低減検討

前回の段階でバネでギアの遊びの低減する方法のアドバイスをいただいておりましたので 試してみました。


ちょうどよいバネをダイソーで見つけました。

 

このバネを機体の股関節2か所に3Dプリントした治具を用いて固定しました。

 

この状態で歩行を試してみたのですが大きな改善はなく、そもそも股関節のロール軸サーボを固定する土台の強度が弱いことに気づきました。

股関節強度改善

ロール軸サーボの固定があまいことが判明しましたので、バネは取り外して3Dプリントした板治具で強化しました。

 

前面と裏面に治具でねじ止め固定しました。倒立が非常に安定しました♪


サーボの問題ではなく単純に私の作りこみがあまいだけでした。
サーボを疑ってしまい申し訳ございませんでした (m´・ω・`)m ゴメン…

歩行検討

股関節サーボの固定を強化し倒立が安定したので、早速歩行動作を実施しました。

見事に一歩踏み出せました!!

 

もう一方の足でも踏み出せました!!

おわりに

ついにSHISEIGYO-1 Walker 参 の歩行動作が実現できました!

当初はシリアルサーボLX-244のギアの遊びで歩行動作は無理だと思っていましたが、単純に作りこみがあまいだけでした。。。
当たり前ですがロボットは頑丈に作らないといけませんね。
いずれ金属加工なども検討したいものです。

しかし、ここでは大きな進捗を得ましたので、次に向けて頑張りたいです。

歩行動作の最適化やバッテリ内蔵など検討いたします。

次の記事

SHISEIGYO-1 Walker 参 を実現させたい俺6 ーバッテリ内蔵ー

SHISEIGYO-1 Walker 参 を実現させたい俺4 ー歩行検討2ー

0
0

前回はシリアルサーボLX-244で構築した足の形状を検討し、遠隔で足の位置を手入力で指定しながら足を交差させての一歩を踏み出すことができました。

SHISEIGYO-1 Walker 参 を実現させたい俺1 ーサーボ味見ー

 

ここでは手動による足座標指定ではなくシーケンスをプログラムしての歩行を目指します。

 

 

歩行シーケンス検討

以下は手動で足座標指定して歩行の一歩を踏み出した動画です。

 

ここでは歩行動作のシーケンスを組んで自動で歩くことを目指しました。

足を前方に出すまでは非常にスムーズに実現できました。

しかし。。。

足を前に出した次は出した足を下げる動作に入ります。

 

 

足を閉じる際に機体が震えてリアクションホイールによるバランスの保持が難しい状態になってしまいます。。。

 

要因考察

動作中に機体が震えてバランスを崩す現象はたびたび起こりなかなか歩行動作の実現ができない状況です。

要因としまして
若干サーボのギアに遊びがあり動いてしまうために、特定の姿勢で機体が震えリアクションホイールでのバランス保持が難しいためであることがわかりました。

 

 

シリアルサーボLX-244は低価格ではありますが高トルクで指定角度への移動精度も高く歩行動作実現が 可能であると考えたのですが、大きな壁にぶち当たってしましました。

 

おわりに

ここでは歩行動作の自動化を目指しましたがサーボの機械的精度のために実現には至りませんでした。

サーボギアの遊びによる振動をどうにかしないといけないわけですが、SHISEIGYO-1 Walker 初号機で使用したサーボKRS-3301 ICSではサーボ停止時の振動は無かったので、
このシリーズのサーボで高トルクの製品を採用すれば解決する可能性はあります。
しかし、非常に高額となってしまいます。

 

バネによる補助のアドバイスをいただいたので次回はコチラを検討したいと思います。

 

それではまた。

次の記事

SHISEIGYO-1 Walker 参 を実現させたい俺5 ー歩行検討3ー

SHISEIGYO-1 Walker 参 を実現させたい俺3 ー歩行検討1ー

0
0

前回はシリアルサーボLX-244で2足を構築し、リアクションホイールによる自立動作を確認しました。

SHISEIGYO-1 Walker 参 を実現させたい俺1 ーサーボ味見ー

ここからはついに歩行に向けて検証進めたいと思います。

 

 

足の形状検討

歩行検討の前に更なる安定性向上を目指し、足先の形状を再検討しました。

 

足自体の高さを低くし幅広くして、傾いた際にフレームが接触しないようにしました。

動作確認

新しい足によって主に高さ低減のために安定性が向上し以下のように、かなり高速に前後の重心移動ができるようになりました!

この時点でシリアルサーボLX-244の精度とトルクには大きな問題はないことを確信いたしました。

 

歩行検討

遂に歩行にむけて検討を開始します!

まずはBLEを介してコントローラのESP32と通信して、地道に足座標を指定して動作確認します。

かなり道のりは険しそうです。。

足形状再検討

歩行検討の際に足を交差させるときに接地してる足を下げるとバランスを崩して前方に転ぶので足先を長くすることにしました。

歩行検討

新しい足で歩行動作を検討しました。

 

足の交差に成功し、一歩踏み出すことができました!!
以下は10倍速動画です。

おわりに

ここでは足の形状の検討を実施して安定性を向上し、足を交差させての一歩を踏み出すことができました。

次は手動によるものではなくシーケンスをプログラムしての歩行を目指します。
なるべく早い周期での歩行を目指したいと考えております。

それではまた。

次の記事

SHISEIGYO-1 Walker 参 を実現させたい俺4 ー歩行検討2ー

SHISEIGYO-1 Walker 参 を実現させたい俺2 ー倒立実現ー

0
0

前回はシリアルサーボLX-244を用いて片足動作を確認しました。

SHISEIGYO-1 Walker 参 を実現させたい俺1 ーサーボ味見ー

 

精度も良くSHISEIGYO-1 Walker の実現に使えそうと判断しましたので、ここでは更に検証を進めます。

 

 

両足構成

シリアルサーボLX-244を追加購入し、片足4つずつ計8個のサーボを用いて両足動作を確認しました。

前回同様に専用のコントローラを介してArduino UNOで制御しています。

力強く非常にスムーズでいい動きです。

 

リアクションホイールも搭載してみました。
こちらはESP32で直接 シリアルサーボLX-244を制御しています。

サーボのトルクも十分で全く問題ないようです。

 

リアクションホイールによる倒立

足先をかまぼこ状にして、倒立動作を確認します。

 

倒立動作を確認しました。しかし若干安定度に欠けます。

 

フライホイールを2枚から3枚に増やしてみました。

 

重心前後運動

倒立の安定度確認や足の構成の調整チェックを重心の前後移動動作で実施しました。
もろもろ調整しつつ動作確認。

 

足の形状や取り付け位置を調整して安定して重心移動ができるようになりました。

 

おわりに

無事にリアクションホイールによる倒立で重心移動まで確認できました。
シリアルサーボLX-244の動作精度には全く問題がないと現状では考えております。

ここからは歩行に向けて検証進めたいと思います。

次の記事

SHISEIGYO-1 Walker 参 を実現させたい俺3 ー歩行検討1ー

SHISEIGYO-1 Walker 参 を実現させたい俺1 ーサーボ味見ー

0
0

これまで2機種のリアクションホイールによってバランスする2足歩行ロボットを製作してきました。

初代のSHISEIGYO-1 Walker は歩行には成功しましたが使用したシリアルサーボ(KRS3301)のトルクが十分でなく、重心が低くゆっくりとした動作となりました。

 

二代目のSHISEIGYO-1 Walker 弐 は高トルクのPWMサーボ (RDS3218) を採用し素早い動作が可能となりましたが、サーボの動作角度の精度が低く足を交差させる歩行は断念しました。

 

いつかは高トルクで高精度のサーボモータを入手し完全版のSHISEIGYO-1 Walker 参 を実現したいと考えておりました。

近藤科学のシリアルサーボではKRS2572が高トルクであり、恐らく精度も高いと思われます。

但し、非常に高額です。。。

 

SHISEIGYO-1 Walker 参 の実現はしばらく難しいと考えておりました。
しかし先日 高トルクで低額のシリアルサーボを見つけましたので、ここではそのサーボの精度を検証してみましたので報告いたします。

 

 

シリアルサーボ LX-224

以下のシリアルサーボ LX-244を購入しました。トルクも十分で価格もPWMサーボと変わらないです。

サイズはPWMサーボ RDS3218 と同じです。

 

専用のコントローラも購入しました。

 

動作はコントローラと専用ソフトを使用して割と簡単にできました。サーボIDを割り当てたり、動作のシーケンスも組むことができました。

 

精度比較

LX-244の動作精度を PWMサーボ RDS3218 と比較してみました。

シリアルサーボ LX-244のほうは明らかに制動がかかっており精度もバッチリのようです。
上の実験ではLX-244の動作速度を最速で実施しているので若干オーバーシュート気味です。これは動作速度の調整で改善できそうです。

動作精度もさることながら各種パラメータを取得できることもシリアルサーボの魅力ですね。

 

片足構築

LX-244を3個使用して足を構築しました。
制御は専用コントローラにArduino UNOから信号を送って実施しました。

マイコンからの制御は以下を参考にしました。

 

屈伸動作

力強く割と滑らかな動作が実現されました。

 

コレはSHISEIGYO-1 Walker 参 の実現も夢ではないかもしれません。
引き続き検証進めます。

次の記事

SHISEIGYO-1 Walker 参 を実現させたい俺3 ー歩行検討1ー

クローズドループ正弦波駆動 その2 ーブラシレスモータ駆動への道6ー

0
0

前回は磁気エンコーダを用いたクローズドループ正弦波駆動で位置指定による回転追従動作を確認いたしました。

スマート靴占い 『 IしたoTんきになぁ〜れ 』

 

ここではクローズドループ正弦波駆動による回転速度を指定した回転動作を目指します。

 

クローズドループ正弦波による回転

以下が理解しやすい図でした。

 

正弦波の振幅を上げて回転トルクをあげて回転位置をフィードバックして正弦波の周期を制御します。

矩形波駆動の時にも参考した書籍も上図と同じフローでの正弦波駆動が紹介されていました。

 

コレを参考に磁気エンコーダでロータ位置を検知しつつ正弦波の振幅を調整してみたのですがうまく回転できませんでした。

エンコーダから回転スピード算出して正弦波周期を変えたり、エンコーダ値を正弦波の位相に対応させてフィードバックなどいろいろ試しましたがダメでした。

 

勉強

どうしてもうまくできないのでリフレッシュと理解を深めるために書籍を購入しました。

こちらの書籍の正弦波駆動も正弦波の振幅調整で回転速度制御が紹介されていましたが、正弦波の印可が半波のみで実施されていました。

全波 vs 半波

正弦波の印可方法は全波が良いのか半波が良いのか比較してみました。
全波と半波の正弦波をブラシレスモータの3相に120°位相をずらして印可します。

 

全波印可の方が明らかにスムーズにまわっています。半波は矩形波駆動とあまり変わっていない印象を受けました。

ここでは全波印可を採用します。

 

検討

書籍の方法がうまくいかないため別手法を考えます。
書籍によって使用しているモータやエンコーダの仕様が異なるので仕方のないことかもしれませんが
今さらモータ学習用キットを購入するのもシャクなので、独自に方法を探ります。

前回の位置指定を応用して、位置の指定を周期的に可変させて回転動作を保つ方法を検討しました。

 

可変抵抗で回転速度指定し、コントローラで回転位置をループで制御して回転させています。

正弦波の振幅は所望回転位置とエンコードの値の差でのP制御で自動で決定します。
高速になると差が大きくなるので必然的に振幅が上昇します。

起動時にオープンループで回転させてエンコーダのオフセット検出して、後のクローズドループ制御に利用しています。

上の動画ではエンコーダ1周の値を7分割して正弦波を生成している(使用しているブラシレスモータの極数が14 [7ペア])ため、負荷かかって周期がずれてもそのまま回転してエンコーダとの差で振幅上昇して過電流が流れる問題がありました。こちらは改善が必要です。

 

クローズドループ正弦波駆動による回転

先ほどの機構を改善してさらにBlynkアプリでBLEで回転を制御できるようにしました。

構成

構成は前回と同様です。

 

Arduinoコード

 

最新版のBlynkではBLEが使用できないので、以前のバージョンのBlynkレガシーを使用してBLE通信しています。

疑似正弦波を生成するためにドライバ駆動ピン(IO25~27)はledcWriteを用いて20kHz PWM出力します。分解能は10ビット(0~1023) (L. 72-80)。

モータの回転位置rotData をデュアルコアのcore0で検出しています。
1周の分解能を14bitから9bit (512)にしています (L. 46)。

可変抵抗でモータの位置period を0~511で指定します  (L. 67)。

起動時に1周期分オープンループで回転させて位相のオフセットを導出します (L. 97-120)。
正弦波1周期はエンコーダの1周の分解能 512/7≒73としています(使用しているブラシレスモータのロータの極数は14 [7ペア])。

位相のオフセット導出後はクローズドループで回転し続けます (L. 122-158)。
オフセットを加味した指定の回転位置 iとエンコーダによる実際の位置の差diff を導出し (L. 123-126)、正弦波の振幅を係数Kをかけて算出します(L. 128, 129)。

エンコーダの値は7分割して使用しています(512/7≒73)。
これによって正弦波の周期からモータ回転がずれても過電流が流れることを回避しています。

U相はオフセットを加味した指定の回転位置 iとして、
V相とW相はそれぞれ120°づつ位相をずらします (L. 131-137)。

位相と振幅に従って正弦波を生成します (L. 140-146)。

ループのディレイ時間periodによって回転速度を制御します (L. 148)。

BottunStateによって正転/逆転を判断し。指定する回転位置 iのインクリメント/デクリメントを判断します (L. 150-157)。

Blynkアプリで、モータ回転方向BottunStateと回転速度period、正弦波振幅のPs制御係数KをBLEで受信します (L. 51-62) 。

 

おわりに

ついに若干変則的ではありますがクローズドループ正弦波駆動による回転制御を実現できました。

いろいろやってみた結論としては回転位置の検出及びフィードバックにはロータの磁極自体をセンスするホール素子の使用がベストと気づかされた。

しかしロータの磁極数や位置はモータによって異なるので、磁気エンコーダと後付け磁気センサによる方法は汎用性は高くなるとも言えます。

正弦波駆動によって低速回転をマスターできたので今後応用を考えたいと思います。

次の記事

50日後にセンサレスベクトル制御してみたい俺 (前編)