« 2012年5月 | トップページ | 2012年7月 »

2012年6月の2件の記事

2012年6月18日 (月)

マルチメーターP-10にUSBシリアルをつけたデータロガー完成

 P-10とは、秋月で¥1000で買える激安のマルチメーター(テスター)のことである。3つほど前の当ブログ記事(「グラフィック気圧計ソフト開発の合間に道草」5/3/2012)で、このP-10のシリアル測定データをフォトカプラーを経由して取り出したことをご紹介した。

 シリアルデータは取り出せただけで、その解析はまだである。グラフィック気圧計やマイクロステッピング制御の腕時計自動巻き機が完成して少し手が空いたので、これを片付けることにした。

P10 気圧計の天気予報ロジックも、気になってはいるのだが、グラフが出たことで、ちょっと意欲が下がっている。気圧の2日間の推移を見ているだけで、だいたい当たる。人間の予報力もなかなかのものである。

 もっとも、この2日間の予報は完全に外れた。気圧が低いところからどんどん上がってきている。天気が回復しそうだ。しかし、テレビやラジオでは、梅雨前線の北上で雨になるという予報をしていた。前日、「がた老AVR天気測候所」は、「高曇りで雨降らず」を宣言して就寝したが、次の日、予報どおり早朝から雨が降っていた。完敗である(6/12記)。

やっぱりWENS20-T互換だった。シリアル出力がおかしい(6/12/2012)
 それはともかくP-10である。ウェブに詳しく情報が出ていて、すんさんからも、P-10と同じフォーマットで、PCのフリーのデータロガーソフト(Ts Digital MultiMeter Viewer)が動くという別のテスター、WENS20-Tを解析したページのURLも教えてもらった。

 しかしP-10を少しテストした限りでは、このPCのデータロガーソフトは動かなかった。双方のデータシートをざっと見ていただけだが、データフォーマットが微妙に違うような気がする。

 データロガーなら、パソコンでなくSDカードをつけたマイコンで開発しても良いのだが、せっかくPCに充実したフリーのデータロガーソフトがあるのにこれを使わない手はない。暫くは、このPCロガーソフトを動かすことを前提に色々な方法を考えることにした。

 そういうことなら、Tiny2313あたりにUARTを2チャンネル設定して、データの翻訳をやらせる方法が一番簡単だ。2313はハードでUARTを持っているし、ここでのソフトUARTは何度も動かしている。

 データストリームも、P-10の速度は2400bpsと遅いので出力側を38.4Kにでもしてしまえば、フロー制御は考える必要がない。プロトコルも非常に簡単で、14バイトが定期的に送られてくるだけである。このなかにテスターのLCD表示面のデータが全て入っている。

 事務所での空き時間を利用して設計をはじめ、擬似コーディングで大体の流れは簡単に出来た。あとは、細かい変換仕様である。P10のデータシートを印刷し、さらに、フリーのデータロガーがサポートしているWENS20-Tのフォーマットも印刷してひとつづつ詳細に調べ始めた。

 ところが、調べれば調べるほど、このフォーマットは同じなのである。確かに、細かいところ、WENS20-Tには、RS232Cの表示ビットがないことや、MやKがない(これは記載していないだけかもしれない。WENS20-Tのスペックは個人の解析による)などが違うが、最初、合っていないと思っていた測定レンジの部分は、ビット単位に整理してみれば全く同じだった。

 今まで、フォーマット違いだと思っていたが、どうも、動かない原因は別のところにありそうだ。ということで、まず、現在出ているデータを検証することにする。シリアルの入出力をバイナリーで見ることができるフリーの端末ソフトAcknowrich(アクノリッチ)で、P10のシリアル出力を調べてみた。

Ws000001 ありゃりゃあ、全然規定のフォーマットのデータではない。このテスターのデータの特徴である上位4ビットが1から順番にふられるデータの形をしていない。それとは似ても似つかないデータなのだ。そうか、普通の端末では、規定のデータでも字化けしてしまうので、正しいデータかそうでないかの判別が出来なかったのだ(注意:掲載したAcknowrichの画面は正しいデータが出たときのものです。不正の時の写真行方不明

 うーむ、どこが悪いのだろう。やはりマイナスに振らないRS232Cデータは読まないのだろうか。しかも、データは化けているが、規則性があり、いかにも正しいように見える。こうなると、とことん調べないと気がすまなくなってきた。ロジックアナライザーを持ち出した。DTRのプラス電位を電源にしたフォトカプラーの出力でデータを調べる。

TTLの出力は正しいデータが出ている(6/13/2012)
 なんとなんと、ここは、以前調べた規定データフォーマットのとおりだ。ここまでは大丈夫なのだ。とすると問題はこの先である。もしかすると、このTTLデータを正式なシリアルデータにすれば、WENS20-Tで動く、フリーのロガーは動くのではないか。まず、これを試してみよう。

 残っていた手段、TTL-UARTをUSB仮想端末にする秋月のアダプターで、この出力をつないでみた。なんと見事にフリーのロガーソフトTsDigital Multimeter Viewerが動いた。レンジを電圧から、抵抗にしても大丈夫だ。問題なく表示が変わる。MやKもちゃんと出る。

Ws000000_2 データ不正は、やはりTTLからRS232Cに正しく変換されていないことが原因であることがはっきりした。負電圧までやはり振らないと駄目なのか。でも、無理せずに、このUSBアダプターを使えば問題は解決する。フォトカプラーの電源もVbusからとれるし。

 ただ、この秋月のUSB-TTL(UART)アダプターは¥950と少々お高い。しかも少し大きくてP-10の中に入らない。それに手元には、BeagleBoardのRS232Cアダプター用のソケットをつけた基板が出来上がっている。もうちょっとUSBを使わず今のままで何とかならないか考えてみた。

 TTLからシリアルに変換することでは、以前、負電圧にしなくても、簡易なRS232Cインターフェースをインバーターを使って動かしたことがある。これは負電圧を作っていない。単に正論理のUARTをインバーターで逆にしているだけである。

 このインターフェースは、ChaNさんのいう邪悪な規格なのだが(HとLは、+5Vと0V。規格では±15V。ADM3202などのシリアルアダプターは±9V)、問題なく動いた。ただ、STマイクロのシリアルライター(Flash Loader)は動かなかった。

TTLからシリアルフォーマットにするときにおかしくなる(6/13/2012)

 今度の回路はフォトカプラーでシリアルデータは負論理に既になっている。まずRS232C規格に少しでも準拠するため、電池を入れて、HighとLowが正負の電圧になるようにする。フォトカプラーのエミッタと信号線の間に単3の電池を入れ、片側を-1.5Vにする。しかし効果は全くなかった。これによるデータの変化が全く見られないというのも気に入らない。何か他に原因があるのか。

 DTRからの電源が悪さをしているのかと、ここを独立した電源で供給する。しかしこれも変化なし。TTLからシリアルへの変換がうまく行っていない。オシロや、ロジアナで測ると、TTLのシリアルデータは正しく出ているのに、これをRS232Cに載せると、だめだめなデータになってしまう。

 ノイズやハードの原因でおかしくなるなら、データは暴れるものだが、出てくるデータはいかにも、もっともらしい一定のデータで、P-10のレンジを変えると、ちゃんとそれに見合う別の一定のデータが出る(これもでたらめだが)。

 USBではなく、本来のRS232Cにもしてみた。以前作ったTTLからRS232Cに換えるアダプター(ADM3202使用)で出力をRS232Cにする。予想したとおり、ちゃんと正しいデータが出て、PCのフリーソフトのロガーが問題なく動いた。

 結局、問題は、今、使っているパソコンのシリアルインターフェースがこのフォトカプラーからの出力データ(オシロで4.8V と0.2V)をRS232Cシリアルとして認めていないということである。電子工作の世界からどうも違う世界に足を踏み込んだような気がする。それにいまどきシリアルにこだわるのもいただけない。USBにしてしまった方が汎用性が高い。

シリアルは諦めてAitendoのUSB-TTLアダプターを使う(6/14/2012)
 そんなことでウェブで情報を探すうち、液晶安売りで有名なAitendoで恰好のパーツを発見した。ここは、最近、販売商品のレパートリーが大幅に増え、凄いことになっている。

S_p6155009 Aitendoで見つけたものとは、USBの仮想シリアル用のアダプターで入出力がTTLのものである。秋月の変換ケーブルに使われているProlificの石を使ったもの(¥500)と、定番のCP2102のもの(¥600)の2種類がある。小さくてP-10に入りそうだ。

 どちらもUSBコネクターがUSB-Aのオスプラグというのが気に入らないが(PCに直接付けろということか)、秋月や他のお店のUSB-TTLアダプターと較べると破格の安さだ。

 家族と日本橋のデパートに行く用事を作って、ついでに久しぶりにAitendoの直営店を覗いた。ここは7月から木曜も休みにするようで、ウィークデイだったので客は私だけ。中国人の女性店員も一人。目的のアダプターはなかなか見つからず、思い切って店員に聞いて見たらすぐ案内してくれた。ただの素人の店員ではなさそうだ。

 良くわからないのでTTLアダプターは2つとも買った。ついでにUSBの各種ソケットが山盛りになっていたのでミニBタイプの表面実装のものも買った。ちょっとしたアイデアがある。帰って来てまずアダプターを早速テストする。ブレッドボードのジャンパー接続だが問題なく動いた。

USB-TTLアダプターを加工する(6/15/2012)S_p6155018
 Aitendoの基板の改造にとりかかる。まず、USBのAプラグを取り外す。PCインターフェースのソケットに挿せば良いということだろうけれど、ケーブルがTTLシリアル線になってしまう。ここはUSBケーブルの方を使って、Bソケットで受けるというのが筋だろう。

 どうせなら、ミニBにしてしまおうと考えている。これなら小さくてP-10にも楽に入る。普通のUSBケーブルをP-10に差せばログがとれるなんてスマートだ。嬉々として工作に入る。

 Aコネクター(プラグ)の取り外しは、例の低温ハンダを使う。それでもDIP部品なのではずすのに結構手間がかかった。ミニBソケットはこの外した跡地にはハンダ付けしない。別の両面基板の切片を用意し、そこへミニBソケットをハンダ付けする。基板同士はスルーホールのハンダ付けで固定する。

 わざわざ別の基板を用意したのは、ソケットの抜き差しには大きな力がかかるのでしっかり固定したいからである。USBミニBソケットの固定ピンの位置はMIL規格で、4つとも汎用基板のパタンにぴったり合致する。がっちり固定したあと基板同士を接続すれば強度は十分だ。

 表面実装のミニBソケットの端子ピンは0.5ミリピッチでハンダ付けには少し苦労する。しかも、少し奥まったところにある。0.2ミリUEW線であらかじめ、4本分をハンダ付けして引き出しておく。念のためカプトンテープをピンの下に敷く。このあたりが芸の細かいところ(自賛)。

S_p6155019 UEW線は、基板のスルーホールを利用して裏に回し、所定のピンにハンダ付けする。ソケットとコネクターはちょうどピンアサインが逆になるので、気をつけないといけない。 フォトカプラーの部分は、思い切って全部作り直した。USB-TTLアダプターの出力ピンを逆U字型に折り曲げて、同じようにそこへフォトカプラーをつけた切片に半田付けする。

 3つのサブ基板で出来たP-10のシリアルUSBアダプターが完成した。出来栄えに満足する。こういうガジェット(小品)の工作は、何故かうきうきする。簡単な回路である。動作はブレッドボードで確認済みだ。いそいそとテストに入った。S_p6165021

 だがしかし、世間はそう甘くはなかった。こいつが動かないのである。USBの電源の赤いLEDが点くので電源部分は合っているが、PCでUSB仮想COMが開かない。結局、いくつもの以下の思い違いミスが見つかって、やっとミニBソケットにつけかえたロガーアダプターが動き始めた。
・USBミニBのピンアサインをしっかり間違えていた。何か、前も同じ間違いをしたような。
・USBケーブルに不良品があった。こいつ、前もトラブルを起こしたような。捨てよう。
・フォトカプラーの極性を間違えていた。3、4のエミッター、コレクターが逆。やれやれ。

P-10の中にUSB-TTL一式を実装するのは結構大変(6/16/2012)
 単品では完成したが、P-10本体に組み込む工作が残っている。これが意外に手間がかかる。プラグの抜き差しを伴うので、このアダプターはしっかりケースに固定する必要がある。

 ケースへの固定は、Aコネクターの固定用穴を広げ、2ミリネジでケースに直接固定する予定である。組み込む前に、裸のまま動かしたくなり、以前HT7750Aを使って作ったDC-DCコンバーター(乾電池ひとつでLEDを点ける)の電圧の動きをログする。うん、これは楽だ。

 固定は、とりあえず加工の楽な板(あ、ベニア板です)の切れ端を使って、ハンダ付けの盛り上がったところをナイフで削り、板が裏側に密着するようにし、2ミリセルフタッピングネジで固定した。木片はケースに接着するが、ネジでとりはずしが出来るようにしておく。

 思ったように楽に出来たが、木がやわらかすぎる。あと1~2回でネジがバカになるだろう。そのときは、やわらかいABS樹脂か何かで作り直そう。

 ケースに入れてみる。あちこちが干渉する。ナイフで片っ端から削りだしてぴったりはいるようにした。ここまで来ると、試してみたくなる。思い切って、木の切片を接着してしまった。出来た穴からUSBプラグを差し込む。おお、かっこよく入った。写真を撮る。

S_p6165024

PCのドライバーを替えて完動(6/17/2012)
 いよいよテスト。また、こいつが動かない。何でだ。どこかがはずれたか。おやあ、いつのまにかUSB-COMポートが画面に出てきた。このあいだはUSBケーブルが不良だったのだが、どうもおかしい。接触不良でもない。

 動いたり、動かなかったり、機嫌が悪い。ProlificのPCのドライバーを秋月の変換ケーブルを買って以来、更新していないのに気付いた。もしかすると、このドライバーが古いのかもしれない。秋月のケーブルはちゃんと認識する。デバドラの日付をみると2007年だ。このAitendoのUSB-TTLは2011年製で、これは替えてみる価値はある。

S_p6165026

 結果は、やはりドライバーが古かったせいだった。ドライバーを取り替えると、前の動かなかったUSBケーブルでもちゃんと認識した(捨てないでよかった)。

 さあ、これでP10のシリアル接続によるデータログができるようになった。ブレッドボードのまわりは見違えるようにすっきりし、データログが気楽にできるようになった。これまでにかかった費用は、

USB-TTLアダプター   Aitendo   ¥500
USB ミニBソケット     Aitendo       ¥50
フォトカプラーPC817    秋月     ¥20
抵抗2ヶ 基板切れはし         (手持ち)

P10_usb_ser

 今度は安くついて満足である。配線図はフォトカプラーの部分だけであるが、念のため掲載しておく。もしかすると、フォトカプラーの出力をバッファー(インバーター2つとか)に通せば、シリアルは通るかもしれないが、いまさらテストする気はない。

| | コメント (8) | トラックバック (0)

2012年6月11日 (月)

マイクロステッピング制御の自動巻き機完成。ソースの公開

逆転は簡単だったが、高周波音が気になる(5/29/2012)
 前の記事で、ステッピングモーターのマイクロステップ制御の逆転は面倒だと書いたが、余り難しく考えず、制御ループをそっくり1セット増やし、そこに逆転のシーケンスを作って切り替えれば良いということに気づいた。

 フラッシュサイズは増えるけれど、ロジックは簡単だ。処理時間の増えるところはループの最初に正転か逆転かの判断ロジックが入るだけだ。位相基準PWMにしたので、PWMのサイクルは1msを越える。ここでの少々の遅れは全く問題にならない。

 ソースコードの追加は、ものの10分もかからなかった。X、Y、*X、*Y(*は逆相)の励起の順を、X、*Y、*X、Yに変えるだけである。UARTモニターに回転方向を替えるコマンドを追加してテストする。おおう、モーターはあっけなく逆転を開始した。

 勢いに乗って、運転制御のロジックも入れてしまうことにする。市販の自動巻き機のロジックは、10分程度を単位に、正転逆転を繰り返し、同じ程度休んで、また繰り返すというタイプのようだ。結構休んでいる時間が多い。

 こちらの運転制御もだいたいこのやりかたを真似して様子を見ることにする。p(pause休止)、r(right 右)、l(left 左)といった文字を運転モードの定義に使い、この文字列を替えるだけで運転モードが定義できるようにする(例えば、rlpとすれば、右、左、休止を繰り返す)。

 問題は、タイマーが足らないことである。2313はタイマーを2つ持っているが、すべてPWMに使うので、こうした運転制御のための専用のタイマーを使うことが出来ない。PWMのタイマーで、PWMを動かしながら、これを実現しなければならない。

 これは、PWMのオーバーフローの度に加算されるカウンターを新設して、それを数えれば簡単に長時間測れる。それより、これでモーターの回転速度を可変にすることは出来なくなってしまうのが痛い。PWMの周波数を可変にしようとすると、時間が正確でなくなる。タイマーのオーバーフロー値が変ってしまうからだ。

S_p6095007 まあ、今変えなければならないということではないので先へ進む。フレームに固定された本番機でのテストが済んでいない。これまでのテストは、もうひとつ買ってあった予備のモーターで行っている。シャフトに時計を入れる容器をつけた本番機が、実際にどんな動きや音になるかはやってみないとわからない。

 うーむ、懸念していた通り、導電シートに置いた裸の時は全く無音だったのだが、本番機の方はフレームと容器が共振して、置いてある机にも音が伝わり、PWM周波数(キャリアー)の1Khzの音がかなり大きくなり気になる。ちょうど裸の時、じかに机の上に置いた時のような音である。

 キュルルルルという音だ。振動も少しある。共振だけでなく、容器をつけて、少し負荷がかかっているのも音が大きくなった要因かもしれない。

静音対策を色々考える(5/30/2012)
 昔、ハンズで買った2ミリ厚のゴムパッドがあったので、これをモーターの固定面の形に切ってクッションを作り、これを介してフレームに固定してみる。気持ち、音は小さくなったようだが、目の醒めるような効果はない。一方、机に伝わる音は、フレームの底に、薄いゴム足を4つつけると、かなり小さくなった。

 それでも、裸の時のように耳を近づけなければ音がしないというような静かさではない。PCのファンの音より明らかに大きい。デジタル制御のときの、何か重いものを無理に動かしているような重苦しい音ではないので、それほど不快感はないが、音が高いので、こっちの方が気になるという人もいるだろう。

 高周波音の軽減は、どうしたら良いのだろう。機械的な対策は限りがある。電気的には、PWMのパルスをならすLPF(ローパスフィルター)が効果があるとは思うが、裸の時、コンデンサーをはずすと振動が少なくなり、音が静かになった経緯がある。どうもこのあたりが良くわからない。

 一方、運転制御の方は、順調に動いた。正転、逆転、休止の20秒ほどの1分サイクルを、数十回(30分)程度、動かせば、ほぼ1日分のネジを巻いたことになるはずである。ただ、フラッシュサイズがそろそろ一杯になってきた。

 Tiny2313は便利な石なのだが、フラッシュサイズが小さい(2KB)のが難点だ(フラッシュサイズが2倍の4313というのが出たが、こいつは¥100では買えない)。ChaNさんの軽くて便利な書式付出力関数xprintfを使うのを止めたり(軽いといっても300バイトは消費)、テスト用のコードをはずしたりしてサイズを広げる。

 UARTから、パラメーターを各種いじれるようにしたかったが、フラッシュサイズが足らない。何とか、総運転時間の変更だけはUARTから出来るようにしたが、運転モードの変更までは無理なようだ。まあ、これはソースコードを公開するので、コンパイルしなおしてもらえば良い。

 運転制御が曲りなりに出来たことで巻き機は、実用に近づいた。運転が終わったあとはSleepで待つ。今までUARTのコマンドでやっていた自動巻き時計のネジの巻上げを、PCの横で電源を入れっぱなしにしてテストが出来る。楽だ。

 止まった後は、アイドルスリープだが、モーターを含めた電源はACアダプターのつもりなので、消費電力については心配していない(電池は使わない)。でも運転中と停止とではLEDの色を変えると良いかもしれない。

 残るは、ブレッドボードの回路から、実際の巻き機への基板実装である。部品棚から、基板や、コネクターをとりだした。あれこれレイアウトを考える。久しぶりのハード工作だ。なぜか心がはやる。少しスランプから脱したのかもしれない。

実装版をソフトパワースイッチにする(5/31/2012)
 ハードの部品の準備でスイッチを選んでいて、もう少しソフトに手を入れることにした。単なる電源スイッチで、運転の再開にスイッチを入れ直すのは芸が無い。運転制御をスマートにするため、普通のスイッチではなく、タクトスイッチの長押しで電源がはいり、運転時間が終わると、自動的にパワーダウンモードになる、いわゆるソフトパワースイッチを取り入れることにする。

 LPFを実装するかどうかは最後まで悩んだ。LPFは、モーターの高周波音(1khz)を落とす有力な手段ではあるが、これで、完全に音は消えるかどうかの保証はない。このあたりはアナログの世界である。そう簡単ではない。

 FETは、どこかの閾値を境にスイッチングするはずで、ゲートの電圧に完全に比例してドレーンの電流が流れるわけではない。しかもモーターのコイルは逆起電力で負荷が大きく変化し(誘導負荷)、モーターが入力した電圧どおりの動きをするかは保証の限りではない。

 とりあえずは、簡易なLPFが入るようなレイアウトを考えて基板の大きさを決めていき、実際にどうするかは、LPFの定数を徹底的に洗ってから実装することにする。

 問題は、ソフトパワースイッチである。CHANEYのガイガーカウンターのときの実装も苦労したが、今度は、さらに難しい。タイマーは2つともPWMに使われており、ガイガーのときのように、専用のタイマーを用意し、スイッチ割り込みでタイマーをスタートさせて時間を測るなどというような悠長なことはやっておられない。

 スタートの時はPWMがまだ動いていないのでタイマーは使い放題だが、止める時はモーターをまわしつつ、運転時間の処理とスイッチの時間測定を同時にしなければならない。ちょっと考えただけで頭が痛くなる。

 しかし、難しい、出来ないとなると、余計やりたくなるというのが性分である。何とかならないかあれこれ考える。実は、これが電子工作の一番の楽しみになっているのかもしれない。車で、道が渋滞すると、何とか抜け道を通って先に進めないか常に考え、家族から馬鹿にされている。カーナビの普及で面白さは半減したけれど、車に乗っている時の楽しみの一つだった。

 Whileループで時間が経つのを待つわけにはいかない。モーターが止まってしまう。タイマーを動かしながら、スイッチが押された時からの時間を把握するロジックをあれこれ考える。

 今度も、風呂の中で良いアイデアが浮かんだ。2バイトの変数を常時タイマーでカウントアップさせておきスイッチ割り込みで、そのスナップショットをとって、その差を時間とするアイデアである。これならタイマーは動かしっぱなしでも時間差がとれる。

 変数が不幸にしてオーバーフローするときは、最大数から引き算する。変数はms単位なので、2バイトの変数だったら、こういう機会は30秒に1回である。おーし、これはうまくいきそうだ。早速やってみよう。

最後の最後でソフトパワースイッチが動かない(6/1/2012)

 コーディングは順調に済んだ。まず、タイマーを動かしたまま、スイッチ長押しの時間が測れるか、UARTを使ってテストする。スナップショットの時間がうまく効いているか。モーターが廻りながら、スイッチを押す。良いぞ。UARTから押しただけの時間が表示された。

 もしかしたら、極く当たり前の定番のやりかたなのかも知れない。しかし少なくとも自分で考えた独自の方法である。こうしてうまく行ったときの爽快感がたまらない。電子工作の醍醐味である(まあ、殆ど自己満足の世界だが)。

 念のため、30秒に一回しか起きないはずの繰り上がりのときのテストもする。何回かやるうちに、繰り上がりの時のみ表示される数字がコンソールに出た。時間も問題なく正しい。よーし想定どおりだ。絶好調。

 いよいよ、最終的な、スイッチ長押しでの電源ON/OFF、所定の運転時間でパワーOFFになるコードの開発である。コーディングは、前のソフトパワースイッチのモデルがあるので簡単だった。鼻歌交じりでコーディングを終える。気楽にテストに入った。

 ところがこれが動かない。全く同じ方式なのに動かない。UARTも当然動いていない。やれやれ、LEDか何かでどこまで動いているか調べていくか。ソースコードにLEDのON/OFFのステートメントを挿入していくのがこういうときの常道だが、何故かあまり気が進まない。

 ちょうどそのとき、AVR Dragonのデバッガーを思い出した。Dragonは正月にZIFソケットに付けた裸の石で1Wiredebugをテストしたまま何もやっていない。今のように全く動かない時こそ、デバッガーが役に立つときである。どこで止まっているか、どこでループしているかぐらいは必ずわかる。実機に応用する絶好のチャンスだ。ISP端子にDragonをつないでやればデバッグが出来る。

S_p6024993Dragonが見事解決(6/2/2012)
 棚にしまってあったDragonをいそいそと持ち込んで準備に入る。ケーブルはISPなので簡単だ。うーむ、ターゲットの電源はどうするのだろう。今度のターゲットはモーターを制御する。USB(Dragon側)からのVccには重い負荷だ。

 ターゲットの電源を本体から出すのなら、DragonのISPでのVccラインをはずせば良いはずだ。ただ、心配なので念のため、とりあえずターゲットの電源を切ったままDragonとつなぐ。おやあ、ケーブルをはずしてあるのにターゲットの電源LEDが点いてしまうぞ。ふーむ、おかしい。

 何か、気持ちが悪いので、ターゲットの電源を使わずにDragon側から供給することにする。万が一にでもPCやDragonを壊してしまっては大ごとだ。モータードライバーの方の電源は、あらかじめ切っておいた。ブレッドボードなので簡単に出来る。

 何回かの試行錯誤の上、AVRStudioからDragonによるプログラムロードに成功した。AVRStudioの画面はデバッグ画面になった。動かしてみる。今度のソフトは時間要素がないので素直に動いていく。おお、最初の初期化は順調に終わった。スイッチを押す。良いぞ。スイッチの外部割込みルーチンに制御が移った。

 しかし、タイマーのところで、わけがわからなくなる。本来のプログラムは2秒、スイッチが押しっぱなしであることを判断してメインの処理へ行くはずだが、デバッガーは延々とスイッチ割り込みとの間を往復する。

Dragondbg ふーむ、何故スイッチ割り込みに戻るのだ。わかった! レベル割り込みがかかったままになっているからだ(レベル割り込みでスイッチが押されるのを待ち、スイッチが押されたら、すぐ割り込みモードを立下りに切り替え、多重割り込みを防ぐことになっている)。

 ソースコードをもういちど丹念に調べ直す。すると、割り込みモードを変えるところが、sleepが終わった直後でなく、1ステップ遅れていることがわかった。これだこれだ。ここはsleepの直後にモードを変えないと、再び割り込みが起きて、ループ状態になる。おーし、Dragonが役に立ちそうだぞ。この仮定が正しければ、Dragonの初手柄だ。

 プログラムを修正する。割り込みモードを変えるステートメントを1行ずらしただけである。テストする。見事プログラムはスイッチを2秒押しっぱなしにすると電源が入りモーターが廻り始めた。

 いやあ、気分が良い。Dragonのデバッガーがヒントになって問題が解決した。ただ、Dragonは結構、気難しい。一旦止めて、もう一度、動かそうと思ったら、ちゃんとISPモードに戻したにもかかわらず、2回目のデバッグはターゲットを認めない。Dragonの電源を入れ直すと、元へ戻ったけれど。まあ、役に立ったのだから、とりあえずはこれで良い。

PWMキャリヤーの音を静かにする(6/5/2012)
 運用テストを続けている。30分も廻せば、自動巻き腕時計は、全く腕に巻かなくても動作を続けてくれるようだ。ただ、動かしていると、やっぱりPWMの高周波音(位相基準PWMにしたので1/2の1khz)が気になる。

S_p6074994 意を決して、LPFを入れることにする。といっても、CR一段の簡単なフィルターである。何種類かの抵抗とコンデンサーを用意して、実際に本番機(時計ケースが鳴る)を動かし、オシロで波形を見る。ひとつひとつブレッドボードで確かめる。

 オシロの波形の綺麗なものがやはり音が静かになるようだ。 ただ、振動は必ずしも音と一致しない。振動が大きくてもケースの共振周波数域より低い時は音が小さくなる。ただLPFで確かにキュルキュル音は殆どなくなった。

 しかし振動は大きくなる。色々なコンデンサーや抵抗を取り替えた結果、0.47μFと10KΩの組み合わせが、この回路では一番静かになった。これを採用することにし、ブレッドボードから基板への工作を開始した。

実装版が遂に完成(6/7/2012)
 フレームにつける基板の実装が完成した。久しぶりに、半田ごてを握って丸々1日かかった。最近メガネを換えたのだが、やっぱり工作を始めた5年前に較べると視力が落ちている。半田付けが思うように行かない。今度はモーターの配線で撚り線を使うのでなおさらだ。

S_p6095000 短いところの撚り線は特に難しい。それに耐熱のチューブを持っていないので、半田付けの熱でカーブのところのチューブが切れてしまう。撚り線コードを手で押さえて半田付けを終わると、爪の形で被覆が切れている。うまくいかないものだ。

 ただ、アートワークを念入りにやったおかげで配線間違いはひとつもなく一発で動いた。暫く試運転。うーむ、モーターが熱を持つ。明らかに前より発熱が多い。なぜだろう。モーターの振動は確かに、前の裸で回していたとき(LPFなし、ダンプ抵抗4.7Kのみ)より大きくはなっている。

S_p6095005BSch3Vで回路図を描く(6/10/2012)
 回路図をBSch3Vで作成した。ソースコードは、UARTがChaNさんのISP-UARTなので、ちょっと迷ったが、マイクロステッピング制御の参考になるかと思うので、あえて公開することにする。回路図は、例によってあまり自信はない。まあ、これで動いているからということで厳密なところはご勘弁いただきたい。

2313winder_2

 特記するとすれば、CPUの電源にLCフィルターをつけたこと(ブレッドボード上で、モーターの回転中にたまにCPUがリセットするのをこれで防止できた)ぐらいで他は何もない。

 主な部品仕様と機能仕様をまとめておく。部品の値段を集計したら、既製品と余り変わらなくなった。ま、自作なんてこんなもんである。

自動巻き時計の巻き器の部品仕様

モーター: ユニポーラステッピングモーター(ST-42BYG0506H) 秋月電子 ¥1000

モータードライバー: MP4401                    秋月電子   ¥200

制御プロセッサー;  Atmel ATTiny2313                      秋月電子   ¥100

フレーム:3ミリアクリル板70×190ミリ(¥525の1/4換算)      ハンズ   ¥131

時計収容容器: 径70×深さ65のアクリル円筒          ハンズ   ¥180

固定ジョイント: シャフトと容器固定(内径6ミリ、外6ミリネジ)  千石3号館  ¥550

基板: 片面汎用基板ガラエポ 47×72ミリCタイプ        秋月電子      ¥60

電源: DC 5V  スイッチングACアダプター 2A          秋月電子             ¥600

その他部品は、回路図参照のこと。

機能仕様:

(1)タクトスイッチの長押しで、時計を入れる円筒が左右に回転し、自動巻き時計の
  ネジを巻く。回転速度は、37rpm(毎分)。

(2)デフォルトでは、30秒正転、30秒逆転、10秒休止のサイクルを30分継続し、その
  後電源が切れる(パワーダウンモードに入る。消費電流0.6μA)。

(3)ISP-USRT(ISPケーブルを使ったUART)を経由した、UARTモニターで、「nX」(X
  は、1から9までの数字)で、X0分の運転時間設定可能。

(4)運転途中でもタクトスイッチの長押しで、電源を切れる。

参考: CPUクロック 4Mhz(クリスタル)
      タイマー0、1のプリスケール 8
      PWM   8ビット位相基準  キャリアー周波数 977hz
                              1/(256×2×(8×1/4000000))

以下に、ソースコードをAVRStudioのプロジェクトフォルダーの形で固めたものを置きます。
中には、回路図ファイルと、サインカーブを作るのに使ったEXCELファイルも入っています。

「WNDR2313.zip」をダウンロード


| | コメント (2) | トラックバック (0)

« 2012年5月 | トップページ | 2012年7月 »