n_shinichi’s blog

日々の備忘録、 趣味のあれこれなど紹介 (すみません、メニュー、リンク、カテゴリー分けがうまくできてません、★記事一覧★で見てください...) NHK魔改造の夜ではDンソーのベテランアドバイザーってことで出ました♪

MENU

ポート駆動、GPIO.out_wlt かなり速い♪

仕事がらみの研修での教材用に

ちゃんとした実車のモータをフツーに駆動できるインバータを

作ってみることにした。

GPIO.out_wlt使ってポートの高速駆動した時の波形 50nsでポートを切り替え叩ける

いい感じのモノができたら来年度の学生フォーミュラで

うちの会社のEV機器提供支援してる東京大学等々

 インバータ製作講習やってくれないかって話があるので紹介してみようと思う。

 

去年は手回しインバータでドローンの小さなモータ、

 HV自動車用のモータも回せるの見せたらけっこう好評だった

 

手回しインバータがウケた話はこちら

n-shinichi.hatenablog.com

 

こんどはちゃんとしたHV自動車用モータが回せるインバータで

 同じようにドローンの小さなモータもベクトル制御で回せる

 っての見せれるようにしたいと思う。

 

あー話が脱線してた。

 インバータ、制御はArduino、M5Stackでやってみようかと思う。

 で、以前から気になってたポートを叩くのとかArduinoモノは

 遅い感じを持ってる。

 初心者から使いやすさ優先なんで当たり前だけど。

 

 以前、ESP32で100kHzで割込み掛けてちょっとPID制御モノを

 動かそうとしたら??がいろいろあった。

 その辺はPSoCの方が使いやすい。

 組込み用のモノじゃないからこれまた当たり前だけど。

 

それでもそこそこの速さのモノを複雑な計算あってもESP32、すっごい速い

 使い方にもよるけどfloat演算が整数演算とほとんど速さ変わらない。

 以前どっかにも書いたんだけどこれがすっごくありがたい。

使い慣れた単位の実数で考えられるのは制御がすっごく組みやすい。

 どっかに倒立振子の制御のことで書いたけどパッと出てこない・・・

  備忘録のつもりなのに備忘録になってない。。。

 

あー・・・話が脱線してた。

 

そうそう、ただポートの駆動がArduinoのまんまdigitalWriteだと遅い。

 普段はそれで全然かまわないんだけど

 ちりも積もればになるので

 そんなに手間が掛からないなら速い方法を試しておこうと思った。

 

当面は1kHz,1msくらいの割込みでSPIでの回転角度読み、

 各相、電源電流の読み取りができればいいくらいなのでdigitalWriteでも

 いけるけど、10kHz以上になっていくと気になると思うので今のうちに。

 

digitalWriteでポートをH・・・から、L H L H すると

ポート叩くの切り替えるだけで、だいたい0.3μsかかる。

240MHzで動いてるのに何やってるんだろうって感じ。

その辺はネットでいろいろ解説はあってArduinoの思想から、

なるほどね...なところ。

ポートはM5StackのGPIOの22 で試してます。

SPIのチップセレクトに使ってるくらいで特に意味はないです。

(200ns/div)

でもって、よくお世話になるLangshipのたなかさんとこに

詳しく解説あってポートをもっと直接的に叩く方法が紹介されてます。

lang-ship.com

いろいろ方法はあるみたいだけどそこそこ速くなって

わかりやすく使いやすそうなのが・・・

こちらのGPIO.out_wlt使う方法 かなり速くなって 50nsほど。

 

ほんとはもうちょいしっかりした波形が出てるのかと思うけど

 プローブもいいものではないのでなまってます。  (50ns/div)

 

ちょいとこれ使ってまずはM5Stackで回転センサMA730辺りでSPIの

 チップセレクトに使ってみます。