2017年7月22日土曜日

tiny 10-DOF GY-91 sensor module

GY-91とは

10軸ものセンサーが小さな基板に実装されていて1000円未満。めっちゃ安いし扱いやすい。
10軸といっても一体何が入っているのか仕様を見てみると、

Technical Specifications

  • Model / Part Number: GY-91
  • Sensor Chips: MPU-9250 + BMP280
  • Interface: standard IIC / SPI communications protocol
  • Operating Voltage range: 3.0V – 5.0V (on-board low dropout regulator)
  • Module size 14.3mm * 20.5mm
  • Resolution: 16bit AD converter, 16-bit data output
  • Gyroscopes range: ± 250, 500, 1000, 2000 ° / s
  • Acceleration range: ± 2 ± 4 ± 8 ± 16g
  • Field range: ± 4800uT
  • Pressure range: 300-1100hPa
  • Using Immersion Gold PCB, machine welding process to ensure quality
  • 2.54mm pitch

Pinouts

  1. VIN: Voltage Supply Pin
  2. 3V3: 3.3v Regulator output
  3. GND: 0V Power Supply
  4. SCL: I2C Clock / SPI Clock
  5. SDA: I2C Data or SPI Data Input
  6. SDO/SAO: SPI Data output / I2C Slave Address configuration pin
  7. NCS: Chip Select for SPI mode only for MPU-9250
  8. CSB: Chip Select for BMP280

ジャイロ、加速度、磁気、気圧があるようです。

他に湿度センサー、GPSセンサー、光度センサー、赤外線センサーなどが必要であれば別途追加すればいいですね。


このセンサーモジュールはArduino用ライブラリが存在してます。

Documents and Downloads





2017年7月16日日曜日

[C#]BingMAPの使い方

もう手っ取り早くざっくりと。

Step1.アカウント作ってKeyを取得する。
 https://www.bingmapsportal.com/

Step2.UWPアプリのプロジェクトを新規作成する。
XAMLタグで

       

を追加して
maps:MapControlの所にカーソル合わせて CTRL+「.」を押してusing参照を自動挿入してもらう。

これでOK

他、

現在位置を設定する場合、
Geopoint情報を作って
new CreateFromLocationAndRadius(geopoint, zoom)インスタンスを
TrySetSceneAsyncする。

ストリートビューにするには、
map.Center = geopointして
panorama = StreetsidePanorama.FindNearbyAsync(myMap.Center)インスタンスを
map.CustomExperience = StreetsideExperience(panorama)する。

現在位置に移動するには、
マニフェストにlocationにチェックを入れて
Geolocator.RequestAccessAsync();でまずGPSアクセス許可を求める。
Geolocatorインスタンスから現在位置情報を引っ張ってくるのだけど
定期的に位置情報を取得する場合はReportIntervalに更新間隔msをセットすると
PositionChangedイベントが発行される。


参考URL





2017年7月15日土曜日

ブラシレスモータのセンサレス制御について考察

ペア数の違いからセンサレス制御が必要になった理由

 今までセンサありのベクトル制御を行っていたのだが、他のブラシレスモータでペア数が多いブラシレスモータに出くわしてしまった。

ペア数が少ないものだと、

 6P4N?なら正弦波4回転で実際は1回転
 24P22N?正弦波88回転で実際は1回転

となる。

ペア数が少ないものならエンコーダ12bitなら1回転4096分解能なので

 4096/360*4 = 2.84分解能/度

これならエンコーダ基準にして問題なかったのだが、

 4095/360*88 = 0.129分解能/度

となるとエンコーダの分解能が最低でも15bit必要だという事になる。

エンコーダ分解能が足りない場合は、

 ホールICが必要

という結果になった。

でもペア数が多いものだとホールIC搭載モデルって見た事ない気がするので

 センサレス制御が必要

という結論になった。


戦略1:内部位置カウンタを用意する。

エンコーダ基準で制御していた場合は、エンコーダ値から単純に次のUVW波形を計算すればよかったけど、それができないので
エンコーダはあくまで脱調してないかのチェック用。
(もし位置ずれしていたとしても分解能が足りてないので正確な位置に戻せないが、、)

やり方として
 Step1.移動量を算出して、回転させる。
 Step2.予想現在位置とエンコーダ値を比較して脱調してないかチェック
 Step3.脱調した時点、もしくは目標位置到達で停止

回転させるときは、VVVF制御ならセンサなしでも回せるけど
ベクトル制御にするなら現在の電流角を把握する必要があり、センサレス制御が登場してくる。

戦略2:センサレス制御を導入するかについて考える

ゼロクロス点は電気角360度中に6点存在する。
1回転するのに電気角で88回転必要なら6*88=528点ある事になる。
このタイミングで位置ずれを検知してすべり角を補正することが可能となるけども、
これが必要かどうか。

今回の場合、
 出力角360度=エンコーダ4096分解能=ゼロクロス点528個

エンコーダ基準にした場合
 4096<31680 p="">
ゼロクロス点(60度)を最小単位にした場合、
 4096>528=多少粗いけどOK

電気角45度を最小単位にした場合、
 4096>704=多少粗いけどOK

電気角8度を最小単位にした場合、
 4096>3960=OK

となる。

電気角8度でエンコーダ角1分解能取れるなら誤魔化してしまえばいいのかななんて思ってみたり。

ちなみに電気角1度は1/360/88度に相当するので問題ない範疇だったりするので。

結果
エンコーダがあるなら電気角最小単位を1だったのを8などに増やしてしまえば何ら問題ない。





2017年7月10日月曜日

ブラシレスモータ(brushless motor, BLDC)のベクトル制御について

日本語・英語共にまとまった情報がないので、RCラジコンやドローン、ジンバルなどで遊ぶ人が増えてほしいとお思いつつ備忘録として残しておきます。

ブラシレスモータって?
 ミニ四駆とかに使われてるDCモータは電源入れれば回ります。
中にブラシと呼ばれるものがあってそれで磁石のNS方向を自動で変えて回転します。
ブラシレスモータはそのブラシがないモータで、電源入れても回転しないし、線が±2極ではなく、UVW3線になっています。

ブラシレスモータのメリットは?
 ブラシがない事がメリット。このブラシがスイッチの切替するたびにバチバチ火花や逆起電力が発生してノイズがでまくります。そのブラシが内のでノイズは少なくなるのでDCのファンはすべてブラシレスが用いられているようです。

ブラシレスモータのデメリットは?
 電源入れただけじゃ回らないことでしょう。これが敷居を高くしてます。有識者しか回せない、1つ上のモータでしょうか。この辺りはステッピングモータも同じですが、ブラシレスモータの利用者が少ないせいかネット上に豊富な情報はなく断片的だったりします。

どうやって動かすの?
UVWと呼ばれる3線に3相交流を流します。
制御方式は、VVVF制御、ベクトル制御(センサあり、センサなし)の3種類くらいでしょうか。

VVVF制御
 スカラー制御と呼ばれていて、通常のACモータと同じで実際の回転を考慮せず3相交流の周波数を変えて3相交流を供給します。この時、電圧と周波数の比率が一定になるように回転させるのが特徴で、電車の発信音のように低音から高音に変化していく音が聞けます。
回転時にでる高音は、インバータ音。音量は電圧に比例します。
それともう1つ、モータの回転する低音です。モータの回転数=周波数となって出てきて、音量はメカや取り付け方で変わってくるようです。


ベクトル制御
 ブラシの役割と同じ事をエンコーダなどを使ってフィードバック制御でやろうというものです。ブラシの代わりとしてホールセンサを使ったり、エンコーダを使ったり、電流値で観測させる逆起電力を観測してりやり方は色々あります。

 ブラシモータと同じやり方で回すなら、矩形波駆動で十分と思われます。
PC用のDCファンはこのやり方だと思います。
(マブチモータにも言えるのですが、電気を流している状態でモータの回転が止まってるとコイルに大電力が流れて焼けて燃えたりするので注意です。)

 ブラシレスモータは3相交流なので、一般的には正弦波で電源を供給します。
ただ正弦波を供給するだけならスカラーであるVVVF制御になります。
ベクトル制御はエンコーダで現在位置を基準に正弦波を供給します。
ここで新たに進角という概念が出てきます。
 現在位置を基準ベクトル0度とした場合、
  進角が0度ならブレーキ
  進角が±90度なら回転 CW/CCW

となります。
この辺りでDQ変換、クラーク変換、パーク変換と呼ばれてる部分ですが、
平たく説明すればモータの現在位置を知ってから進角を足した3相交流を出力するというものです。
実際に実装する時は3相交流のテーブル作ってベクトルなんて計算せずにやってしまうのですが、原理原則は知って損はないと思います。

センサレス(逆起電力検知)は、ゼロクロス点といわれるちょうどサイン波でゼロになる位置で逆起電力が発生するという事実に基づいて実装されるのですが、
得られる角度はホールICと同じで分解能が低いです。


まとめると、

モータの回転位置を
 気にせず3相交流を流す=VVVF制御
 気にして3相交流を流す=ベクトル制御
  正確な位置が
   必要ならエンコーダ、
   不要ならホールIC、センサレス

という分類に分かれます。


今日はここまで。

2017年7月8日土曜日

ドローンを使って受粉作業する



下記URLを見てびっくりした。

http://www.gizmodo.jp/2017/02/drone-pollinate-like-bee.html


世界中でハチが激変してる中、受粉作業というが重要
超小型ドローンを使って受粉させようという試みである。

この受信作業をどのようにやるのか。
綿棒とかでぐりぐりするのしたり専用ジェルを塗ったり色々思いつくことはあるんだけど、答えは意外と原始的。
ドローンを花びらに向かって落下させるというもの。。

これで成功したと書かれてるけど実用レベルに達していないのは一目瞭然だし
小型ドローンでも1万くらいするので、

・ハチを増やす環境を作る
・ドローン大量稼働して受粉作業の自動化を構築する


さてどっちがコスパが良いのだろうという話になる。


ドローンも基本構成部品で思いつく部品って
コアレスモータ4つ
本体1つ
通信・制御基板1つ
カメラ1つ
バッテリー1つ

くらいなので
これ全部込みで3000円で全自動で30分くらい動いてくれると面白い事になりそう。


Androider