FC2ブログ

爪車

ヒト型ロボット 205 ちいさめのモータドライバ

ちいさめのモータドライバを開発しています。

主要部品は、
マイコン:STのSTM32L431CCU6
プリドライバ:TIのDRV8323H
MOSFET:ON SemiのFDMD8260LET60
シャント抵抗:VishayのWSL10204L000FEA
です。
STM32L5がでたら乗せ換える予定です。

20190514.png

20190526.jpg

3D描写ライブラリを公開しました。

ロボット開発に用いていた3D描写ライブラリをGitHubで公開しました。

いまのところ、Ubuntu 18.04でのみビルド&動作確認をしています。

ScreenshotSimpleDemo.png 

emscriptenでもビルドできるので、Webブラウザで動かせます。
20190406.png

暇なときに、サンプルやドキュメントを追加していきたいと思います。

今月は進捗なし。

磁気シールド

リング型の磁石と磁気式エンコーダを組み合わせて、減速機の減速後の回転角度を直接計測しているのですが、どうもモータの磁石の影響をうけてエンコーダの値が変動してたので、磁気シールドでモータの磁力を遮蔽してみました。
20181102_2.jpg
20181102_1.jpg
出力軸にリング型の磁石を取り付けていて、ケース側のエンコーダで計測するようにしています。

試してみたのは、磁気シールドシート(日立金属のMS-FR 470-100M-T0、エコロガのMS5000M)です。(MS-FR 470-100M-T0を切り売りしているのが、エコロガのMS5000M)
20190210_1.jpg

モータを手で回した時のエンコーダ(14bit)の出力値です。
エンコーダ用磁石は固定しているので、出力値は変動しないのが望ましい状態での計測。
20190210_2.png
ちゃんとした計測ではないのであくまで参考程度ですが、シートを複数枚重ねるとはっきりと磁気遮蔽の効果がみられます。
また、磁気シールドシート自体も磁石にくっつく素材なので、エンコーダにシールドを近づけると、エンコーダの値が変動します。

最終的には、磁気シールドシートを4枚重ねてモータと減速機の間に挟み込むようにしました。 
20199212_1.jpg
20190212_2.jpg

出力軸のエンコーダ出力値。(モータほぼ一定の速度で回転。)
エンコーダがoff-axis配置なので、非線形な値になっています。
20190212_3.png
シート入れる前


20190212_4.png
シート4枚入れた後

エンコーダの値のがたつきが多少改善されました。

本来だと、この出力軸のエンコーダの値をそのまま減速後の回転角度として使用できればよいのですが、off-axis配置で非線形なのと、多少の値のがたつきがあるため、エンコーダの値から一意に出力の回転角度を特定できませんでした。
そのため、出力軸のエンコーダの値とモータ側のエンコーダの値を用いて角度を求めるようにしました。

いろいろ方法はあると思いますが、今のところ以下の方法で回転角度を求めています。
出力軸14bitの上位10bitとモータ側14bitの上位4bitを組み合わせた14bit長のindexを持つテーブルに事前に求めた角度計算用の値を入れておいて、実行時はその値をテーブル引きして角度を求める。
index = (0xFF0 & reducer_14bit) | (motor_14bit >> 10)
angle_14bit = (0x3FFF * rotation_table[index] + motor_14bit) / reduction_ratio




ブートローダ

RS485経由でファームウェアのアップデートができるようにブートローダを作りました。
STM32にはもともと組み込みのブートローダがあるのですが、RS485ドライバ送受信切り替えのためのDriverEnable信号が操作できないので自前で実装しました。

ROMをブートローダとメインのプログラムとブート情報を保存する領域に分けて、ブートローダはブート情報領域を読んで、メインプログラムの情報が書き込まれていれば、メインプログラムを起動。
ブートローダでのファームアップデートは、ビルドしたメインプログラムのバイナリの先頭にブート情報をくっつけて、STM32CubeProgrammer経由でFLASH書き換えするようにしました。
(ブートローダのファーム書き換えプロトコルはSTMのアプリケーションノートAN3155をもとに実装)

ブート情報は、ブート情報の識別子としてのマジックナンバー(8byte)と、メインプログラムのサイズ(4byte)、チェックサム(CRC32)(4byte)、ブート情報のチェックサム(CRC32)(4byte)で構成。

ROMの配置はいまのところこんな感じです。(RAMは共用)(STM32L432KB)
FLASH_BOOT   (rx)  : ORIGIN = 0x8000000,  LENGTH =  18K
FLASH_INFO   (rx)  : ORIGIN = 0x8004800,  LENGTH =   2K
FLASH_MAIN   (rx)  : ORIGIN = 0x8005000,  LENGTH = 100K
FLASH_DATA   (rx)  : ORIGIN = 0x801E000,  LENGTH =   8K

メインのプログラム起動中にファームアップデートする場合は、ブート情報の領域を消去してからリセットし、ブートローダを起動するようにしてそこからアップデートするようにしています。

来年はサーボをたくさん作らないと。

ヒト型ロボット 204 サイクロイド減速機

今開発中のサイクロイド減速機(中サイズ)の中身はこんな感じです。



20181129_2.jpg

20181129_3.jpg

20181129_4.jpg

20181129_5.jpg


ヒト型ロボット 203 BLDCモータドライバ基板

今月はBLDCモータドライバ基板を作っていました。



20181028.jpg



ヒト型ロボット 202 ブラシレスジンバルモータ追加購入

ブラシレスジンバルモータを追加で何種類か購入しました。


ヒト型ロボット 201 ブラシレスジンバルモータ進捗

ブラシレスジンバルモータ用のモータドライバの設計が3枚目になりました。

・1枚目
電流センサとして、AllegroのACS70331を採用しましたが、エンコーダ用の磁石の磁力の影響を受けて
電流センサの値が変動してしまいました。
ホール効果を使った電流センサなので冷静に考えてみれば当たり前ですが、使うまで気が付きませんでした。

・2枚目
電流センサはTIのINA240とシャント抵抗の組み合わせにしましたが、
エンコーダとして採用したAKMの磁気回転角センサAK7452が入手困難(DigiKey在庫切れ)になり、
追加での複数枚基板作成が年末以降まで不可に。

・3枚目
エンコーダをInfinionのTLE5012Bに変更して、現在発注した基板の到着まち。

1枚目と2枚目の基板はElecrowに発注しました。
月曜日の深夜に発注(Rush 48h + ステンシルあり)で土曜日着だったので、
週末設計して翌週末実装といったちょうど良いペースで進められました。

3枚目は、急ぎでもなかったので、少し冒険して初めて利用するALLPCBに発注してみました。

Top|Next »

HOME

tsumehashi

Author:tsumehashi
FC2ブログへようこそ!

05 | 2019/06 | 07
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -