「ADALM2000」タグアーカイブ

ブラシレスモータと格闘 ーリアクションホイールへの道1ー

前々からリアクションホイールによる姿勢制御に興味があり、2020年6月号のトラ技からJAXAの3軸姿勢制御モジュールの連載も開始され自作してみたい欲が爆発中でございました。

 

  http://www.kenkai.jaxa.jp/research/innovation/triaxial.html

↑凄いですよねコレ。10cm立方らしいです。

 

この道の目的

JAXAのような小型の3軸姿勢制御モジュールは到底無理ですので
1軸の姿勢制御モジュール(倒立振子)の実現を目指します。

将来的には以前製作したスマート靴占い装置に実装したいと考えております。
靴を空中に投げた際にその地点の明日の天候データを受信し、リアクションホイールで靴の着地姿勢を制御したいのです。

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

AliExpress

Twitterで姿勢制御キューブがAliExpressで売ってることを教えていただきました。

 

1軸制御が23,455 円
3軸制御が43,912 円

とのことで恐らく破格の安さなのでしょうが、それでも私には買えない価格です。
あと自作したいので完成品には興味持てないということもございます。

 

もうすこしAliExpressをまさぐると以下のモータとフライホイールだけの商品を見つけました。自作派の私にピッタリの商品ではないでしょうか。

タイプ 3: フライホイールの直径: 80 ミリメートル、dcブラシレス光学エンコーダ (ロングタイプ)
を購入いたしました 。

 

ブラシレスモータ ID-549XW

AliExpressで6/13に購入し7/21に商品が到着しました。

 

モータの型番にはID-549XWとありましたが情報がほとんどなく
これまたAliExpressでID-549XWの販売ページを見つけ、そのページの以下の画像のみが頼りになりそうな情報でした。

 

読めない箇所もありますが。。実機で試行錯誤しながら動かしてみました。

エンコーダ動作

上の写真でA相、B相は光学エンコーダの出力で左から3番目の青線がロジック電圧だと予想できましたのでADALM2000で観測してみました。

配線の状態は以下の通りです。
 左から1番目 (信号A相):オシロ 1 Ch
 左から2番目(信号B相):オシロ 2 Ch
 左から3番目(ロジック電源):5V印可
 左から7番目:GND

モータの軸を回すとA相、B相からパルスが出力され、回転方向によって位相が変わることを確認できました。

上記情報によると1周で100パルス出力します。

回転動作

回転のさせ方がよくわからなかったのですが、モータ電源に6V以上印可しPWM信号印可でやっと回転を確認しました。

配線の状態は以下の通りです。
 左から1番目 (信号A相):オシロ 1 Ch
 左から2番目(信号B相):オシロ 2 Ch
 左から3番目(ロジック電源):5V印可
 左から4番目(回転制御):オープンで時計回り、プルダウンで反時計回り
 左から5番目(PWM入力):20kHz、ON Duty 0%で最高速度、100%で停止
 左から6番目(ブレーキ):プルダウンで回転停止
 左から7番目:GND
 左から8番目(モータ電源):12V印可

ID-549XW配線

以上より、モータの配線内容を理解することができました。

 

M5ATOMでエンコーダ動作制御

モータの素性を把握できましたので、リアクションホイールへの道の第一歩としてM5Stack ATOM Matrixでエンコーダ出力を観測し、モータの回転数をカウントしてみました。

モータとATOM Matrixの配線は以下の通りです。
 左から1番目 (信号A相):G22
 左から2番目(信号B相):G19
 左から3番目(ロジック電源):3.3V
 左から7番目:GND

動作

モータの軸を回転させATOM MatrixのLEDに回転数を表示させています。

Arduinoコード

ロータリーエンコーダのA相、B相端子をそれぞれ ATOM Matrixnのピンに接続して出力変化で割り込んで回転数を検出します。

以下の記事で紹介されたコードを使用して回転位置を観測しています。

ロータリーエンコーダを使う part 1 : 外部割込みとチャタリング対策

 

M5Stack ATOM MatrixのLEDに回転カウント数を表示するためにFastLED_NeoMatrixライブラリを使用しました。
FastLED NeoMatrixライブラリを使用するためには Adafruit-GFX なども必要となります。

Arduino IDEのライブラリマネージャでFastLED NeoMatrixをインストールすれば必要なライブラリも同時にインストールされます。現在(2020/7/30) FastLED NeoMatrixライブラリのバージョンは1.1.0です。

また表示用のフォントとして Adafruit-GFXライブラリのOrg_01フォント を使用しています。

 

 

おわりに

フライホイール付きのブラシレスモータを入手しましたので、
これで1軸の姿勢制御モジュールの実現を目指したいと思います。

ひとまず次回は現状私が保有している知識のみで実現できるか試してみます。
慣性センサで角度を導出し、PID制御でモータを回転させて倒立するか試してみます。

それでは、また次の道でお会いしましょう。

NeoPixel でバーサライタ検討

以前、M5Stack ATOM Matrix で ハンディーバーサライタを製作を楽しんだのですが、LED25個のマトリクスの1列分である5個のLEDしか使用しておらずもったいないなと感じておりました。

回転計を自作

この”もったいなさみ”を解消するべく今回はLED5個から25個に拡張してバーサライタ製作いたしました。

いわゆるNeoPixel系のLEDでのガチのバーサライタ製作は初めてですので、丁寧に段階を踏んで進めます。

 

 

リフレッシュレート

バーサライタはLEDを高速回転で残像を残して絵を投影しますので、
LEDのリフレッシュレートは非常に重要なファクターなります。

以前各種フルカラーLEDのリフレッシュレートを測定しております。

回転計を自作

 
ここではM5Stack ATOM Matrix搭載のLED WS2812B-2020のリフレッシュレートを測定いたしました。

ATOM Matrixを分解してLEDマトリクス基板を取り出しました。
もう後戻りできません。。。。

リフレッシュレート測定方法

LED1個を全白で点灯させて電源-LED間の10Ω抵抗の電圧降下をオシロ(ADALM2000)で測定しリフレッシュレートを測定します。

測定結果

  • 輝度100%

    リフレッシュレート:1.93kHz

     

  • 輝度50%

    リフレッシュレート:1.96kHz

データシートのとおりリフレッシュレートは約2kHzでした。
意外と早いですね。輝度はデューティで制御されておりました。

データシート信じて進めればいいだろとお思いかもしれませんが、
NeoPixel系の製品は何が本物でコピーかがわからないほど製品が存在し
モノによって性能が異なるので念のため測定いたしました。

 

バーサライタの構築

リフレッシュレート的にはバーサライタとして使用するには十分であると判断いたしましたので製作を進めます。

LED加工

ATOM MatrixのLEDマトリクス基板をぶった切って、バー状にしました。
(こっちのほうがよっぽどもったいないわ!)

 4mmピッチ 25セルのLEDバーが仕上がりました!

 
WS2812B-2020

構成

制御には分解した残りのATOM Matrix基板 (ESP32-PICO)を用いており、
構成はほぼ以前のM5Stack ATOM Matrixを用いたハンディーバーサライタPOV1-ATOMと同じ構成です。

LEDを外に出してデータ線をD22に接続しました。
モータの電源は回転速度調整のため外部の安定化電源に接続しました。

 

 

[オモテ]

[ウラ]

 

動作

バーサライタ動作を検証します。

1周分解能調査

まずは1周する間にLED表示変更できる分解能を調査しました。

モータの回転数を目視で残像が残るギリギリの1秒当たり約10回転(600rpm)に設定し、LEDの色を赤→緑→青→黄で変えて表示させました。

LED点灯のライブラリはFastLEDを使用しています。

1周40分解能が限界値となりました。

 

検証

NeoPixelの書き込みプロトコルは以下の通りです。

LED 25セル書き込む時間は 1.25u × 24 × 25 + 50u = 約0.8 msec  となります。

600rpmで回転させると1周にかかる時間は 0.1 sec ですので、

理論上の分解能は 0.1 / 0.8m = 125 なります。
実際にはマイコンの演算時間なども含まれますので実測は40になりました。

NeoPixelの書き込みプロトコルの性質上、SPI入力のLED使用時のように200分解能以上の達成は不可能であるといえます
(今回のようにシリーズにLEDをつなぐ場合)。

あとリフレッシュレート的にも2kHz (0.5msec)なので600rpm 200分解能は厳しいです。

アニメーション表示

ピッチが狭いので比較的見やすいですが、やはり1周の分解能をあげれない点が厳しいです。

結果 実にもったいない。。。

 

おわりに

狭ピッチでリフレッシュレート4kHz以上で
SPI入力の
LEDバーが欲しい!!

E32-SolarCharger の PWM制御 ーベランダ太陽光発電所への道4ー

さてこれまでソーラー充電コントローラの基本機能を学んできましたが、いよいよ発電開始!です。

実際にソーラーパネルとバッテリをつないで動かしていきましょう。

構成

ソーラーパネルと鉛蓄電池をコントローラに接続します。今回は負荷はつなげていません。

 

コントローラと蓄電池の+側の配線には3Aヒューズを挿入しています。

部品

PWM充電方式

以下のサンプルコードを使用しました。
 http://indoor.lolipop.jp/IndoorCorgiElec/E32-SolarCharger/PWM.zip

システム概要

電力モニタ INA219でバッテリの電圧と電流を観測して、スイッチング回路のスイッチングパルス幅を制御(パルス幅変調 PWM)します。

電流はINA219のIN+, IN-ピン間の抵抗0.01Ωの電圧降下で測定します。今回は負荷は接続しないので観測される電流はバッテリへのチャージ電流となります。
負荷が接続されてチャージ電流より負荷電流のほうが大きくなると観測電流は負の値となります。

サンプルコードPWM制御部

以下がサンプルコードのPWM制御部の記述です。

PWM信号はESP32のledcxxxx関数で生成します。ここではESP32のIO32ピンから周波数3kHzのスイッチング信号を出力します。パルス幅は8ビット(0-255)で指定します。

INA219でバッテリの電圧と電流を観ながらパルス幅をコントロールします。バッテリ電圧目標値は13.8V、チャージ電流 1Aとしています。

  • バッテリ電圧が14.6Vより大きいか、バッテリチャージ電流が1.5A以上であればパルス幅を10減らす。
  • バッテリ電圧が13.8Vより大きいか、バッテリチャージ電流が1.1A以上であればパルス幅を1減らす。
  • バッテリ電圧が13.0Vより小さくバッテリチャージ電流が0.5以下であればパルス幅を10増やす。
  • バッテリ電圧が13.6Vより小さくバッテリチャージ電流が0.9以下であればパルス幅を1増やす。

上記のPWM制御を施してバッテリ電圧を13.8Vにします。

動作

バッテリがほぼターゲット電圧である13.8V付近までジャージされているのでパルス幅はほぼ0に近い状態です。

ソーラーパネルを手で隠すと電圧降下してパルス幅が少し大きくなります。

チャージ時初めのころはバッテリ電圧が12V程度でしたのでスイッチングはフルオン(パルス幅Max 255)でソーラーパネルからの電圧が直接バッテリに供給されていました。

これでソーラー発電でバッテリ充電できることが確認できました。

ソーラーパネル

今回使用したソーラーパネルのSY-M12W-12の仕様は以下の通りです。

  • 最大出力電力 :12W
  • 開放電圧   :21.8V
  • 短絡電流   :0.73A
  • 最大出力時電圧:17.4V
  • 最大負荷時電流:0.69A

最大で12W出力します。最大出力が17.4Vですのでコントローラやバッテリの耐圧はこれ以上にする必要があります。

最大電流値をもとにヒューズやPWM制御時のしきい値も考慮が必要です。

参考

バッテリ

今回は定格容量 12Ah(12V)の完全密封型鉛蓄電池 WP12-12を使用しました。仕様は以下の通りです。

  • 定格容量:12V 12Ah
  • 充電電圧:14.4~15.0V(サイクルユース)、13.5~13.8V(スタンバイユース)

サイクルユースとは普通の充電池のように満充電状態から放電をして一定まで放電後に再充電をくり返す使用で、
スタンバイユースとは常に充電しておいて停電などの非常時に使用する方法です。

WP12-12の寿命はデータシート上は以下のとおりです。

サイクルユース

  • 100% 放電 250 cycles
  • 80% 放電 350 cycles
  • 50% 放電 550 cycles
     

スタンバイユース

  •  3~5年
     

バッテリ寿命は外気温などでも変わるようですし、スタンバイユースは非常時の放電量によっても寿命が変わりそうですね。

今回のベランダ発電では日照時はバッテリチャージしつつソーラーからの電気を使用し、無日照時はバッテリの電気を使用するのでスタンバイユースになります。

無日照時の放電量もケアする必要ありそうです。

参考

E32-SolarCharger の 入力電圧測定 ーベランダ太陽光発電所への道3ー

第3 回となりますシリーズ “ベランダ太陽光発電所への道”。今回もソーラー充電コントローラ E32-SolarCharger の基礎的な動作を学びます。

 

今回は E32-SolarChargerに使用されているマイコンESP32のアナログ入力機能を使用してソーラーパネル入力電圧を測ります。

 

 

ソーラーパネル電圧

ソーラーパネルの電圧は光の照射量によって変わるようです。マイコンでこの電圧を測ってチャージ電圧の制御や照射がない時は動作停止させることができます。

販売元であるIndoor Corgi Elec.社のサイトにソーラーパネル入力端子T1の電圧測定ができるサンプルコードがアップされておりますので試してみました。

 http://indoor.lolipop.jp/IndoorCorgiElec/E32-SolarCharger/VCRG.ziphttp://indoor.lolipop.jp/IndoorCorgiElec/E32-SolarCharger/Load-Sleep.zip

IO36に抵抗10kと1.5kで分圧して電圧入力しています。

測定電圧 = 3.3 * 115 / 15 * analogRead(pinADC) / 4095 + 1.25

1.25は補正値。

動作

入力にはソーラーパネルの代わりにADALM2000の電圧出力ピンを接続しています。

 

1秒おきに電圧測定しています。いい感じに測定できています。

 

おわりに

これでソーラーパネルの発電電圧測定が可能となりました。電圧に応じてバッテリへのチャージ量や無日照時の動作停止などができそうです♪