[20日目] 基板を起こしてモータを動かそう

男の子ならいくつになっても動くオモチャって楽しいですよね。エンジンやモータが好物です。電気エンジニアのべーたです。

今回は簡単にモータを回して遊ぶ方法をご紹介します。
趣味で工作をされる方にはArduinoやmbedで動かしている人が多いので、それらとは違うアプローチで動かしてみます。
 

サーボモータを動かす

ラジコンサーボを動かしてみましょう。ラジコンや工作をする方にはおなじみのアクチュエータですね。こんなやつです。

DSC_0677

MG-90S (Tower Pro 社製)

制御回路やモータドライバ、ギアやポジションセンサがパッケージングされている便利なモータです。

電源と、たった1本の信号線を繋ぐだけで動作させられるので簡単に扱うことができます。サーボモータは目標角度の指令を入力すると出力軸が目標角度まで回転します。ミニ四駆に入っているようなブラシモータとは違って何回転も回すことはできませんが、ある角度の範囲内であれば大きな力で指令の向きまで出力軸の向きを変えてくれます。

どんな信号が必要か

一般的な小型のサーボでは電源電圧に4.8から6Vを与えます。位置指令はパルスの長さで与えます。このとき、パルスの長さが1.5ms(ミリ秒)で中央となり、そこから±0.5ms程度でそれぞれ両端まで動くサーボが多いようです。これについては様々な方が解説してくれているのでそちらへ譲ります(「サーボ 動かし方」などでググって下さい)。

ところで、サーボへ入力するパルスの電圧振幅はどれくらいが良いのでしょうか。一般的には、LレベルはGNDでHレベルはサーボに与えている電源電圧でしょう。

では、ちょっと真面目に考えてみます。サーボモータのトルクを目いっぱい使いたい時には6Vの電源を用意するでしょう。しかし6Vの信号を出力できるマイコンはそうそう無いはずです。逆にマイコンが5Vや3.3Vで動作している場合はサーボの電源も合わせて5Vや3.3Vを供給しなければならないでしょうか?

私が実際にサーボモータに6Vを供給し、マイコンから3.3Vのパルスをサーボに与えてみたところ、正常に動作することを確認しました。手元で1台動いたからと言っても100台で正しく動くでしょうか?1000台では……?設計者がもしもこのままサーボを量産で使ったとしたら歩留まりが気になって眠れなくなってしまいます。実際にはどれくらいの電圧の信号が許容されるのでしょうか?エビデンスを残しましょう。

その答えはサーボモータに内蔵されている制御回路を司るICのデータシートにありました。電気エンジニアにとっては非常にメジャーなICメーカに新日本無線という会社があります。このメーカがサーボに内蔵されている制御用ICを製造しているようです(互換品をルネサスや中国メーカも製造しています。電気的仕様もほぼ同じようです)。

では、NJM2611のデータシートを見てみましょう。注目すべきは「電気的特性」の表です。

電気的特性

NJM2611データシートより

「最小パルス電圧」という項目がありました。所謂「Hレベルの入力電圧VIH」と同様のパラメータでしょう。これによると「最小1.85V」とあります。言い換えると、Hレベルが1.85V以上のパルスを与えれば良いということになります。

これで3.3Vや5V振幅のパルスで問題ないというエビデンスが得られました。すっきりしましたね。(どうやら他メーカのサーボコントローラICも同様の入力特性であり、おおよそTTLレベルと考えて良さそうです)
 

マイコンを動かそう

さて、どのような信号を用意すれば良いのかがわかったので実際に信号を作っていきましょう。マイコンからはパルス幅が最小1ms, 最大2msのワンショットパルスを出力することにします。それをタイマ割り込みで20ms程度毎に出力すれば良いでしょう。こういう場合にトラディショナルなマイコンであれば、

タイマのレジスタを探す → ワンショット動作&ピン出力に設定 → コンペア値をセット

というような手順を踏むかと思います。最近の高級な開発環境であればタイマ周りの設定をするAPIが提供されていて、それを叩く方が多いでしょうか。そこで、今回はモータを回すのが目的なので、面倒な設定を考えずに済むPSoC5LPを使ってみます。PSoC5LPとは、ARM Cortex-M3コアとプログラマブルロジックを搭載したマイコンです。このプログラマブルロジックを使うにはGUIで線を繋いでいくだけできます。ペリフェラルを自由に構成することができるため、PWMをたくさん欲しい時に重宝します。他にどのような活用方法があるのかは拙著のプレゼン資料をご覧いただくか、ちょうど PSoC Advent Calendar 2016 が開催されています。こちらを眺めてみると良いでしょう。私が初めてPSoC5を使った時はマイコンのアーキテクチャを意識せずに扱えるのがとても新鮮だったことを覚えています。

今回はPSoC Creator にて提供されているPWMコンポーネントを使います。ツリーからPWMと出力ピン、クロックを持ってきてこのように繋ぎました。リセットを操作するためにControlRegを接続しました。

コンポーネントの配置と配線

コンポーネントの配置と配線

パルス幅の分解能を10us単位にすると扱いやすそうだったのでクロック入力は100kHzとしました。8bit幅なので0.01msから2.55msまでのパルスを生成できます。続いてPWMコンポーネントをダブルクリックして表示されるダイアログを設定します。

PWMコンポーネントの設定

PWM

PWMコンポーネントの設定

こんな感じにしてみました。

ポイントは Run Mode を “One Shot with Single Trigger” にするところでしょうか。デフォルトの “Continuous” のままでは間髪入れずにパルスが出続けてしまいます。ワンショット動作であれば、Trigger後に1つしかパルスが出ないので、トリガをソフトウェアから適切なタイミングで与えるようにします。
 

基板を作る

サーボを動かせそうな目処が立ったので、せっかくなので基板を起こしてみます。そのほうがたくさんのサーボを接続するのが楽です。

最近は無料でもそれなりの機能をもっていて、回路図から基板ガーバ作成までできるソフトウェアが増えてきました。CircuitMaker(オススメ)KiCAD(日本語文献が豊富)DesignsparkPCBなどが流行っているようです。更に、格安で基板を作れるサービスも増えてきました。スイッチサイエンスPCB(日本語で利用可)やSeeedStudioのFusionPCB(オプション豊富で安い)、ElecrowのPCB Prototyping service(基板だけでなくステンシルも安い)などが非常に安価に利用可能です。5cm角の両面基板なら10枚で10ドル程度から製造してくれます。ユニバーサル基板と変わらない値段ですね。

では、まずは好きなCADを使って回路図を引きます。PSoCはIOピンを非常に自由に割当可能なのでざっくり適当に引きます。

回路図

これを

ここから基板を引きます。モータ用電源はマイコンとは分離してアートワークするのがポイントです。

基板

こうして

こうしてできたデータを今回はElecrowで製造してみました。基板が9.5ドルと送料がOCSで13.23ドルでした。

こうじゃ

こうじゃ

部品をはんだ付けして完成です。

要求電流の見当がつかない上に、電流をたくさん流せるような電源コネクタを用意するのが面倒だったので、横着して圧着端子直付けにしてしまいました。良い子のエンジニアは真似しないでくださいね。これは後々サーボの評価とキャリブレーションに使う予定です。
 

ソースコード

PWMやControlRegはAPIを使って操作します。APIのリファレンスはデータシートを読んでいただくとして、叩く必要のあるAPIは以下で済みそうです。

void PWM_Start(void)

void PWM_WriteCompare(uint8/16 compare)

void ControlReg_Write (uint8 control)

これらを、タイミングよく操作するために一定間隔で割り込みを発生させます。プログラマブルロジックをなるべく消費したくないので、ARM系CPUが必ず持っているSystickと呼ばれるカウンタを使ってみます。設定は以下です。

CyIntSetSysVector(15,<割り込みルーチンへのポインタ>);

SysTick_Config( (<バスクロックの周波数>) / <割り込み周波数>);

これらを使ってサイン波のテーブルを順次読み出すようにしてみました(ソースはこちら)。

動作確認ができました。この基板はサーボをたくさん接続できるようにしたので、せっかくなので繋いでみます。Creator上でコンポーネントを並べます。コピペを多用します。

PWMコンポーネント1つあたり2本のPWMを出せます

PWMコンポーネント1つあたり2本のPWMを出せます

コードも同様にコピペで増やします(ソースはこちら)。

それぞれのサーボが独立して動いているのがおわかりいただけるでしょうか。ハードウェアタイマを使って16本のPWMを出力しています。他のマイコンではなかなかできない芸当ですよね。

この状態でもまだまだ半分以上のリソースが余っているので50本以上のPWMを出力することができそうです。サーボに限らず一般的なDCモータやブラシレスモータも楽に駆動できそうです。
 

たくさんのモータを回しています

という事で、絶賛開発中のタチコマには20を超えるモータが搭載されています。現在は様々なアクションを楽しんでいただけるよう調整を行っています。もちろん、機能はモータだけではないですよ。これからの発表を是非楽しみにしていてください。

ぼくタチコマ

ぼくタチコマ

※写真は開発中のものです。
 

Reference:

Cerevo Blog: 「攻殻機動隊」に登場するタチコマを現実世界に再現するプロジェクトを開始
Engadget Japanese: Cerevo、1/8スケールの『タチコマ』をニコニコ超会議で披露。クラウド経由で学習内容の並列化機能も搭載予定?

[20日目] DOMINATOR MAXI を魅せる基礎技術

Cerevoで電気設計をしております,丸山です.タイトルにもありますが,開発コードネーム「DOMINATOR MAXI」の電気設計を担当しております.

この製品がどういった製品なのかをご存じない方は上記リンク先のリリース記事をお読み下さい.

さて,この製品を開発するにあたり,弊社代表の岩佐を含め,もちろん私自身もサイコパスのファンであり,放映されていたアニメは視聴していました.劇中に登場する「ドミネーター」は,エンジニア視点から見ると,所謂メインフレームであるシビュラシステムにネットワークを介して接続し,様々な情報を処理するための端末と言うことができます.その設定やギミック等に興味を惹かれていました.

サイコパス第二期の放映は今からちょうど一年前であり,当時はまだ私がCerevoに入社する前でした.当時,ドミネーターに魅せられてしまった私はとうとう,所有する3Dプリンタでドミネーターを作る程でした.しかしながら,メカなんて素人の私には非可動でLEDが光るだけのモックを作るのが精一杯でした.

そして時は流れ,今年の春に私はCerevoに入社しました.するとどうでしょう,隣りに座っているエンジニアがデスクで一日中サイコパスのアニメを見ているではありませんか.初めは,かくほどまでに自由な社風であるものかと驚いたりしたものの,私がDOMINATOR MAXIのプロジェクトにアサインされることにより直ぐにその理由はわかりました.(実際に非常に自由でフレキシブルな労働環境ではあります).まさか再び仕事でドミネーターを作ることになるとは思っても居ませんでした.同僚がオフィスで食い入るようにアニメを見ていたのも開発業務の一環であった訳です.


さて,前置きが長くなりました.

製品の企画段階では販売する対象ユーザがどんな人であるかを検討しますがDOMINATOR MAXIでは,それは主に作品のファンとなります.私もファンの一人であるため,できるだけ作品に忠実なものを作ろうと努力しています.そこで,私が開発していくうえで拘ったポイントをご紹介します.


サイコパス第一期冒頭で常守が初めてドミネーターを握ったシーンを覚えているでしょうか.

グリップを握るとイルミネーションがふわっと点灯し,ユーザー認証が始まるシーンです.

これを再現すべく,DOMINATOR MAXIには「静電容量センサー」を搭載しました.

GripSensor

Grip基板とDominatorMaxi
※写真は開発中のものであり,製品版はよりディテールアップしています.この試作機はあちこちでデモしているため,ご覧のようなユーズド感が出ています.

このGrip基板はグリップ部を光らせるだけでなく,グリップを握ったことを検出するセンサーを兼ねています.これが左右に入っているのでサウスポーの方も執行することができます.ご安心下さい.

そして,実際に反応する様子はこちら.

動画ではパッと点灯していますが,今後のチューニングでふわっと光るようになります.


また,想定しているユーザさんの中にはアニメファンの方はもちろんのこと,コスプレイヤーさん(以降レイヤーさん)も想定しています.

レイヤーさんの多くはその様子を写真に撮ったりしてSNS等や写真集を制作することで交流されているかと思います.となると,この製品は様々な場面で写真に撮られる事になる筈です.

そこで,この製品には1台あたりにおよそ180個のフルカラーLEDを使用していますが,LEDを写真に撮った時に,時としてカメラマンが予期した画と違う写りになってしまう現象がしばしば起こります.そのため,DominatorMaxiでは写真に撮っても問題が起きないよう考慮した設計を予め盛り込んであります.

では,LEDを写真に撮った時に不思議な画が撮れてしまう現象をご紹介します.

次の2枚の写真を御覧ください.どちらも同じ日の同じ場所で同じ条件で撮影された写真です.

traffic signalDSC_0501

違いは一目でわかるかと思いますが,上の写真では中央の自動車用信号が全く消えてしまっています.この信号は点滅式ではなく,肉眼では右の写真のように赤く光って見えています.

これはLEDのフリッカ(点滅)に起因する問題です.信号機の場合には駆動回路の信頼性(長期に渡って故障しない)設計のため,電源の周波数(関東では50Hz)に依って高速に点滅を繰り返していることによって起こります.

では,信号機の様子をスロー再生で見てみましょう.最大で1200fpsで録画したものを30fpsに引き伸ばして再生しています.

おわかりいただけたでしょうか.

スローで再生すると点滅している様子がよくわかりますね.このLEDが消えている瞬間を捉えると上の写真のように「目で見えているものと写真が違う」現象が起きます.

似たような現象は他にもあります.例えば,電車内の行き先表示もスローで見るとこのように見えます.

これは大量のLEDを少ない配線で点灯させるために「ダイナミック点灯」という手法を使っているためです.最後のスローを見ると1行づつ点灯しているのがわかりますね.こちらも写真に撮るとまだらに表示が抜けたように写ることがあります.(鉄の人たちの間ではベストに写るシャッタースピードが研究されているらしい)

PCやスマートフォンのLEDにもふわっと光るLEDが搭載されていることがあります.こちらをスローで見てみましょう.”Thinkpad” の ” i ” に仕込まれたLEDがふわっと点灯している様子です.

これは点滅を繰り返しているうちの,点灯している時間を調整することで目に見える明るさを調整するPWM(パルス幅変調)という方式を使っている様子です.これからクリスマスの時期ですが,イルミネーションに多く使われています.

では,最後に DOMINATOR MAXI を見てみましょう.

いかがでしょうか.

LEDのチラつきは皆無ではないでしょうか.お買い上げいただいた際は安心して写真を撮りまくってくださいね.


 

公式サイトにてメールアドレスをご登録いただいた方にDOMINATOR MAXIに関する先行情報をお届けしています.
http://dominator.cerevo.com/ja/