目次

モータ用テストベンチ

モータに程よい負荷を与える.
トルク,回転数を計測することでモータの機械出力や特性カーブを描くことができるようになる.

筐体

ミスミのアルミフレーム5シリーズ(最大M5のネジが使える),20mm x 80mmでってみる. Cナビでモータ固定用のアングルブラケット作れそう?
トルクメータが自由回転できる程度の高さは確保しておくこと,40mmあれば良さそう. しかしあまり低いと今度はブラケットをアルミフレームに固定するキャップボルトにレンチが挿入できなくなるので注意する.
結局50mm確保することで一度作った. これをきにPBのショートヘッドのやつ一本買おうかな.
負荷用モータはMaxonのDCX35Lを使うことにする.ブラシモータで80W,ECFlat45の負荷には丁度いいだろう.
あと難しい制御考えなくていいし.
EC45FlatもDCXもネジはM3の3mmくらい.プレートの厚みが5mmな8mmのネジを買おう.

制御基板

Nucleo32をさして使う基板を作る.
FREERTOSのCLIが使えるようになったのでこれでコマンドはそれっぽく投げることができそう. UARTがポーリング処理なのでmorebetterを考える.

インクリメンタルエンコーダ

回転数を計測する.シングルエンド,差動入力両方に対応できるようにMaxonのコントローラのエンコーダ入力回路周りをパクる.
STM32G4のTIM2を使う.エンコーダのインデックスモードがあるのでこれを有効に.

トルク計測

±5Vのアナログ信号.トルクモニタTM700は24bitのADC積んでた. 今の知識だと分解能だけ高いADC使ってもろくに性能出せる気がしなかったので,分圧抵抗で凌ぐことにした. ±5Vフルスケールを0~3.3Vに変換するように分圧抵抗を調整.
電源を投入するタイミングでマイコンの入力ピンに負の電圧がかからないようにダイオードを取り付けた.
マイコンの入力インピーダンスとか気にする必要ありそうだけどまた次改良するときに考える.
トルクモニタをもう少し分解して回路をリバエンしたい.

LTSpiceで回路のシミュレーションをした. ±5Vフルスケールを0~3.3Vに変換できそう.
R3(6kΩ)の抵抗とC1(5pF)のコンデンサはstm32内部の入力インピーダンス等価回路.このコンデンサの電圧をAD変換する.
あとはGNDと3.3Vにツェナーダイオードつけてクランプできるようにしておくか.

ブレーキ励磁回路

電磁ブレーキを駆動する.使用するブレーキはHB-10の予定.
電流は多くても1A流せれば良いので,電流計測もそれくらいの範囲で十分.
FET使ってソレノイド回路みたいにしようと思ったけどゲートドライバとかゲートドライバ用の電源とか作るの考えるのが面倒だったので,秋月で買えるモータドライバICのA4953を使うことにした.実際に接続するのは片方のハーフブリッジのみでよい.

ブレーキ電流計測

電流も片振幅でいい,TIのINA180を使うことにする.
運用が24Vの予定に対し,最大入力電圧が26Vなのでローサイド側にシャント抵抗を取り付けるようにする.
シャント抵抗50mΩ,INA180のゲインは50V/Vのものを使用する.(INA180A2)
計測可能は最大電流は $$ 50{\rm m}Ω × 50 × i = 3.3 {\rm V} $$ $$ i = 1.32 {\rm A} $$ となる.
最大電流の50%ほどである.
構成として,ブレーキの片方にモータドライバICの出力を接続し,もう片方に電流検出回路を接続する.
もっと単純にできたかもしれないが,この構成であればブレーキに流れる電流がモータのスイッチングに関係なく計測可能であるためこの構成にした.

STO

市販のサーボアンプにあるような停止入力をつけてみる.
ブレーキ電流を抜く用.
TIM1を用いてハーフブリッジを駆動してブレーキ電流を制御するので,この入力をTIM1のBRK2入力に接続し,割り込りが入るようにすればよさそう.
他の回路とかから制御できるように,フォトカプラを噛ませて信号を絶縁しておく.
TLP785をかませる.とりあえず秋月にある&KiCadのライブラリに入っていたという理由だけで選んだ.同じフットプリントならどのフォトカプラでもいい.

シリアルエンコーダ入力

SPIやSSIのエンコーダを計測する.
SPIを使えば計測可能.
基本的にReadOnlyなのでクロック線とデータ線のみでいいはず.
産業用のシリアルエンコーダは多くが差動信号のため,差動入力に対応しておく,といってもRS485トランシーバを使えばいいだけであるけど.
SPIは熱電対計測用のMAX31855と兼用であるため,CS的なものを実装する必要があることを思い出した.
DE,/REピンがあるタイプの全二重のRS485トランシーバを使い,トランシーバの入出力を制御する.
1ピンで制御できればいいけど,それぞれに必要な信号が反転しているので,一つMOSFETを噛ませて信号を反転させることで対応する.

RS485

RS485
stm32のハードウェアDEを有効にして使う.
ピンヘッダで終端抵抗の切り替えをできるようにしておく.
大きな理由はないけどDynamixelのEHコネクタとピンアサインは同じ.
5Vトレラントなので安い5VのRS485トランシーバICでいいだろう。 通信速度は1Mbpsあれば十分だと思う。

温度計測

ブレーキとかモータの温度を計測できるように、熱電対を取り付ける.
たいていならK型熱電対でいい。 オンセミのMAX31855Kでいいだろう。

コネクタ

基本的にターミナルブロックで接続する.
どれくらいの大きさ(ピッチ)にすれば適正か読めなかったけど,コネクタやピンヘッダでも取り付けられるように2.54mmピッチのものを多めにしてく.
熱電対とブレーキの端子は5.08mmピッチのものにしておく.
Digikeyやmouserで買えるやつか型番をきちんと調べておくこと.
HRSのコネクタはカタログがクソみにくい.適合コネクタ(プラグ側)は以下の2つ

misumiの機械用ロボットケーブル,中身がジュンフロン線で屈曲性も良さげだった.

作業ログ

設計ミスを見つけた。 アブソリュートエンコーダと熱電対の回路は同じSPIにつながっているけど、アブソリュートエンコーダのトランシーバICを5V電源のものにししてしまった。 この結果データ出力の電位が5Vになってしまい最悪熱電対用のICが壊れる可能性あり。
アブソリュートエンコーダのICを3.3Vにつなぐようにしないとなぁ… Nucleoにのってたレギュレータの出力電流どれくらいだっけ。 ちょっと不安になってきた。 → 500mAあるから大丈夫だな

インクリメンタルエンコーダもプルアップする抵抗値を同じにしていた。 本来であればここは別の抵抗値なのに。

基板届いてもいないのに修正の設計が収束した.
発注してしまってもいいが基板きてから現物見てミスを見つけるかもなので部品出しをやることにする.

インクリメンタルエンコーダ,多分どこかのタイミングで左右が全て入れ替わっていたことが判明. 電源とGNDが逆になってるし信号の±も全部逆になっていた.
差動レシーバの出力設定を間違えていた.片方のピンだけでいいやって思っていたのが間違っている方につながっていた. SPIにつながっているデバイス(シリアルエンコーダ,熱電対)の物理的な動作テストはできた.両方ともデータ帰ってきていたので多分大丈夫.

マクソンモータつなげてブレーキ回路のテストも行った.電流計測アンプがサチるくらいまでは電流流せていた. といっても計測範囲がすごい狭いのでまぁそんなもんかという感じ.電流プローブほしいなぁ

Nucleo32に左右のピンを接続するジャンパがいた.これが邪魔なので取り払った.

トルクメータからのパルス入力を確認した.Duty比が 50%ではなかったのは意外だった.
アナログのトルク入力も確認できた.現状では±5Vを1V±1Vとなっている.
0V ~ 3.3Vのフルスケールを使えているわけではないがこの回路の動作原理が間違っていないことは確認できたので良しとする.