ロ技研秋のブログリレー2020の4回目の記事です。
こんにちは.皆さん,回転数計測してますか?
ロボットの関節がどれくらい曲がったかや,タイヤが何メートル進んだかを知るには,それを駆動するモーターがどれくらい回転したのかを知る必要があります.
一般的にこの測定にはエンコーダーと呼ばれる機器を使用することをご存じの方も多いでしょう.
一口にエンコーダーといっても色々な種類が存在しますが,これらは主に「磁気エンコーダー」「光学式エンコーダー」「容量性エンコーダー」に分類できます.
今回は構造も簡単でモーターが発生させる磁気の影響もうけにくい「光学式エンコーダー」を自作していきます.
光学式エンコーダーは,光をスリットディスクに当ててスリットの間を抜けた光を検知する透過型と,光を放射状の模様を持つディスクに当てて反射した光を検知する反射型に分けられます.
多くの簡易自作エンコーダー先駆者パイセンたちはディスクの製作が簡単な反射型を作ってらっしゃるように見受けられますが,
反射型は分解能を挙げづらいという難点があり,実際にロボットに使うために作るには実用に耐えがたいというのが実際のところです.
一方で透過型はスリットディスクを用意する必要はありますが,反射型と比較して分解能が上げやすいため,将来的にロボットに使用することを考えるとこちらの方が実用的といえるでしょう.
ロ技研内においては以前に簡単な光学式エンコーダーを自作している部員もおり,
実際に透過型のエンコーダーの自作が可能なことはわかっていますが,正転・逆転の判別ができない問題点がありました.
そこで,今回は正転・逆転の判別+原点合わせができるエンコーダを作っていきます.
- 構造
透過型のエンコーダーの構造は下の図の様になっており,「光源」,「スリットディスク」,「受光素子」で構成されています.
スリットディスクは1枚で済みますが,正転・逆転の判別と原点合わせのために受光素子は3箇所必要です.
3つの受光素子の内,2つはディスクに等間隔に開いているスリットを検知し,1つはディスクを1周する内の1箇所だけ開いているスリットを検知します.
このとき前者の素子から得られる信号はA相,B相と呼ばれ,後者の素子から得られる信号はZ層と呼ばれます.
A層とB層の信号はスリットの半分だけズレていて(位相差を持たせていて),これにより正転時と逆転時で得られる信号の順番が変わるため,エンコーダーは正転・逆転の判別ができるようになるのです.
- 光源・受光素子について
今回はこの光源と受光素子については一体で提供されている「フォトインタラプタ」を使用します.
秋月電子通商で1個20円で手に入ります.50個まとめ買いだと1個当たり10円で買えます.
安くていいですね~
- スリットディスクの製作
続いてスリットディスクについてですが,たくさんのスリットを全て均等に手作業で切っていくのは現実的ではありません.
エンコーダーの分解能を挙げようとすると必然的にスリットは細かく,多くなっていきます.
試しに,約1mm幅のスリットを100個持つスリット板を3Dプリンタで出力してみました.
一見きれいにできているようにも見えますが,スリットの形状が均一でなく左上に至ってはスリットが潰れかけています.
これではA相B相の位相差が場所によって変化してしまい,正しく値を取得できません.
そこで次に同様の条件のスリットディスクを樹脂板から部室のCNCフライスで削り出してみました.
削り出しで作るとスリットが非常にきれいに開いていることがわかります.
これであれば十分実用にも足りるでしょう.
しかし,切削に時間がかかるため大量に制作するのには向いていません.
早く,簡単に,正確なスリットディスクを製作する方法を色々と検討した結果,
最終的に下の写真のようなスリットディスクを製作することができました.
これは紙をレーザー加工機で切り抜いたもので,1枚の製作は1分ほどで完了しました.
スリットの形状も正確でゆがみもなく,十分実用的なクオリティです.
レーザー加工機自体は3Dプリンタ程一般的な工作機械ではなく個人で導入できる程安価なものではありませんが,渋谷にあるFabCafe等のものづくり系のコーワーキングスペースに設置してある場合があります.
今回のスリットディスクの加工は短時間で終わるため使用料もそれほどかからないでしょう.
- 回路
はじめに示したように,エンコーダーはデジタルな値で回転角を示す必要があり,理想的には信号は矩形波になります.
しかし先に紹介したフォトインタラプタは厳密にはアナログな値を出力するため,出力に閾値を設けてデジタルな値に変換してやる必要があります.
さて,矩形波に変換するにあたってシュミットトリガ付きのインバーターを噛ませてやりたいのですが,一つ問題があります.
というのもシュミットトリガの閾値によっては元の信号のHighとLowの時間が等しくても,出力のHighとLowの時間が異なる場合があります.
これを出力のHighとLowの時間も等しくなるようにするには閾値の値を調整できるようにする(ヒステリシスコンパレータ)か,元信号のレベルを調整できるようにする(減算回路)方法がありそうです.
今回は後者で作ってみます.
今回設計した回路がこちら👇
オペアンプで元信号に減算処理を施したうえでシュミットトリガ付きインバーターで矩形波&差動信号にしています.
差動信号の受信側はラインレシーバICを使っているだけで特に面白みもないので省略.
- 製作
製作過程の記録を残していなかったので3分クッキング形式でいきます
で、できたのがこちら
きたない。
流石にブレットボード上では配線が汚いので,Elecrowでプリント基板を発注してコンパクトに実装したのがこちら
Beautiful…
あれほどごちゃごちゃしていて汚かった回路がこんなにコンパクトになりました.
面積も小さくなり場所も取りません.
ちなみに,スリットディスクが見当たらないのは基板が固定されているカバーの内側に収納してあるからで,こうすることで外界からの光の影響や汚れを防止することができます.
このエンコーダーは家に転がっていたブラシレスモーターのケツに直付けされており,厚みも薄いので装着していても気になりません.
- 動作
ブラシレスモーターを回転させたときのエンコーダーの信号を以下に示します.
回転速度は3000rpm(モーター側センサレス制御の設定)でエンコーダーのスリット数は100個です.
非常にきれいに波形が取得できていることがわかりますね.
A相とB相の位相はきちんとスリット半分だけずれ,HighとLowの時間も等しくなっています.
回転数を6000rpmにまで上げても問題ありません.
以上から,今回自作したエンコーダーは十分機能することがわかりました.
下にこのエンコーダーを利用してモーターの位置制御をしている動画を貼っておきます.
- 最後に
いかがでしたか?今回は正転・逆転&原点位置を測定できるエンコーダーを作ってみました.
エンコーダーは購入しようとすると何かと高くつくので,そこそこのクオリティのモノが安価に自作できるのは何かと都合がいいですよね.
私は早速これを使ったロボットを設計しようかと思います.
みなさんも快適なモノづくりライフをお送りください.
では.
これがquadrupedにつながるんですね?
楽しみです。