3Dプリンタの活用」カテゴリーアーカイブ

UPDI Programmer を作る

今更も今更ですが、現在の 8bit AVR シリーズのプログラミング方法は 3線式 ISP から 1線式の UPDI へと切り替わっています。かつて AT90S 時代からお世話になった ISP プログラマでは書きこめず、1万円近くする PICkit 4 のようなデバッガが必要な気がして、最初は敷居が高く感じました。

実際には、UPDI プログラマは USB-シリアル IC を使って非常に簡単に作成できます。pyupdi がそのようなプログラマの例です。ISP プログラマの作成は一般的にマイコンが必要だったため、”卵と鶏の問題”がありましたが、その意味でも UPDI の方が敷居は低くなっていると言えます。私はいろいろあって普段は PICkit 4 を使っているのですが、安価なプログラマがあると活用の幅が広がります。


今回製作した UPDI プログラマ
の写真は上記です。特に意図はなかったのですが、ケースに UPDI と書くのは既存のケースと似てしまいました。

複数電圧に対応する回路を追加する

USB シリアル IC の CH340N を使用して作成します。オリジナルの回路では、USB-シリアル側の IO 電圧と AVR の電源電圧を合わせなければいけません。AVR はトレラント IO (VDD より高い入力電圧の対応) ではないので、広い電圧範囲に対応するためには、中間にレベルコンバータを入れる必要があります。

ちょうどいいレベルコンバータが手元になかったので、4-Input AND の日立 HD74LV21A をレベルコンバータのように使いました。CH340 を VCC = 5V で動かす場合、VOH = 5V, VIH = 2.3V となっています。HD74LV-A は 2-5.5V 動作、入力 5V トレラントなので、これを AVR 側の電源で動かすことで、2.3-5V 程度の電源範囲に対応します。(VBUS の誤差を許容する場合は、およそ 2.5V – 5.5V になるでしょう。

ついでに、プログラマとして使わないときは UART モニタとして使えるよう、スイッチでプログラマ、モニタを切り替えられるようにしました。ただしこの機能は今のところあまり使っていません。頻繁にプログラム書き換えを行うとき、PC 側のターミナルの接続、切断操作が煩わしいことが理由です。

作成した回路図を下記に示します。D1 はシリコンダイオードではだめで、小信号用 SBD を使用します。D2は直接 VTG で駆動せず、Tr で受けて 5V 側で駆動した方がよかったですね。

ロジックは 74LV21 でなくても、論理が反転しなければ何でもいいです。接続が少し妙ですが TSSOP をユニバーサル基板に手配線する都合でこのようになっています。


UPDI_schematics_PDF

実際に動かした限りでは、AVR の VDD = 1.8V 付近でも動作するようです。一応、USB 未接続の状態で VTG を入れることはできません。直ちに壊れることはないでしょうが。いろいろ考えると、レベルコンバータとして設計された IC を使用する方がよいかもしれません。私の使用状態ではこの回路で十分です。

回路の実装

マイコンの書き込み

プログラマは Python ベースの pymcuprog を使用します。python がインストールされている環境で、

pip install pymcuprog

とやればインストールできます。実行には Windows 7 以降が必要で、試した限り Windows XP 環境では動かないようです。

マイコンの接続チェックは、プログラマを接続して電源が入った状態で

pymcuprog ping -t uart -u com7 -d attiny202

のようにすれば、正しく動作しているかどうかわかります。-u で USB-シリアルに割り当てられた COM ポートを指定します。-d のデバイス指定はどうも必須のようです。

書き込みは、-f オプションで hex ファイルを指定して

pymcuprog write -t uart -u com7 -d attiny202 -f UPDI_Test.hex --erase --verify

のようにすれば OK です。

Microchip Studio から使う

Microchip Studio の場合、Project Property の Tool で Custom Programming Tool を選択してコマンドを入れれば、IDE から書き込みができると思います。

pymcuprog write -t uart -u com7 -d attiny202 -f "$(OutputDirectory)\$(OutputFileName).hex" --erase --verify

(実行結果)

保管用のICレールの止め具を作る

いまどきの製品で DIP IC を使うことは少ないでしょうが、
DIP IC はレール(あるいはマガジンと呼ばれる)に入ってメーカから出荷されていました。

IC レール

レールの両端はプラスチック製の止め具(エンドピンと呼ばれる)や、上の写真のような塩化ビニルやシリコンゴム製の止め具(エンドプラグと呼ばれる)で固定されます。
東芝とか沖電気は黄色、三菱やTI はグレーと、メーカによって色はさまざまでした。

IC レールのいろいろな止め具

私はレールのまま IC をたくさん保管していますが、
日本の高温多湿の環境では、レールを長期保管するとエンドプラグの劣化が問題になります。

劣化したストッパの例

製造から 10年、20年経過すると、エンドプラグは硬い樹脂と液体に分解してしまいます。
液体は油分なので、水分のように金属をさびさせることはありませんが、
もちろん蒸発することもなく、IC は油でべたべたになってしまい、
止め具としての機能もなくなってしまいます。

そこで、軟質のエンドプラグをプラスチックのエンドピンに置き換えるべく、
3D プリンタで止め具を作ることにしました。
φ3.2 の穴にはまるような形状で止め具を作成します。

止め具を3Dプリンタで作る

たくさんプリントアウト

作成した止め具に変えたICレール

IC レールにドリルで穴を開け、もとの止め具の代わりに作成した止め具を差し込みます。
PLA が何年持つかわかりませんが、20年もののエンドプラグよりは安心して保管できますね。
通常の止め具と違い、薄いので裏から差し込むこともできます。

モデルデータ

 

シンセリコーダーの製作 その2

GW を利用してシンセリコーダーの改良をしていました。

上がプロトタイプ1号機、下がプロトタイプ2号機です。
1号機では指検出にメカニカルスイッチを使用していましたが、2号機ではタッチセンサに変更しています。
あわせて、基板配置の変更、センサキャリブレーションの自動化と、マウスピースの設計変更を行いました。
マウスピース部分は 3D プリンタで出力しています。

このプロジェクトではおもちゃではなく楽器を作りたいので、息の検出は当然肝となる部分で、いろいろ試した結果気圧センサを使用しています。
マウスピースと気圧センサは試行錯誤の結果、上記写真のように取り付けています。
気圧センサの出力は、横にある LM324 で増幅してマイコン (ATmega8) に入力されます。
基板は以前製作した便利な細長ユニバーサル基板を使用しています。

指使いを検出するタッチセンサには上記写真に見えるように、ピンヘッダを使っています。
タッチセンサ(メカニカルな接点を使用しないスイッチ)は大きく分けて非接触型と接触型に区別されます。
静電容量を利用する非接触型はそれなりに広くパターンを設ける必要があり、リコーダーのサミング(穴を半分だけ空けること)検出が難しそうなので採用しませんでした。
接触型にもいろいろあり、商用周波数からのノイズを拾うものや、接触抵抗を検出するものがありますが、今回はセンサ端子の浮遊容量に電荷を貯め、端子の電荷が指を通して放電されることを検出する方式を採用しています。

上から。

基板に誤って触れるとセンサが誤検出するので、サイドカバーをつくってつけました。
どうも直径に対して長さが足りない気がしますが、「リコーダー 寸法」とかで検索しても値が出てこないのであまり気にしないことにします。

下側の穴(左手親指)はサミング検出のため、上記写真のように 2 組のセンサ接点を配置しています。

ちょっと演奏しづらかったので、片方の接点のみ位置を微妙に調整しました。
これで大分、リアルリコーダーの感覚に近づきました。

太陽電池駆動式・導通チェッカの製作


太陽電池で駆動する導通チェッカを作りました。
電池不要でメンテナンスフリーかつ常時電源 ON なので、テスタで導通チェックするときのように、いちいちスイッチやレンジを切り替える必要がありません。
作業机の上に 1 つ置いておけば、使いたいときすぐ使えて便利です。

Schematics (PDF)

Source Code (AVR Assembly for ATtiny11L / ATtiny13A)

上図に回路図を示します。測定電流 1mA (パルス測定) で、約 100 Ω以下のときブザーが鳴るようになっています。消費電流の関係で BOD やリセット IC を使用していないので、うまく起動しないときはテスタリードで RESET ピンをタッチしてください。

MCU は ATtiny13Aを使用しています。当初は ATtiny11L を使用予定だったのですが、このチップは WDT 用クロックを内蔵 RC 発振器として共用しており、電源電圧により発振周波数が 10 倍以上変化するという致命的な問題があるため、途中で tiny13A に変更しました。プログラムはアセンブラですが、GCC でアセンブルできるようになっています。

この製作のキーパーツはアモルファス太陽電池で、松下のアモルトンの 3V 出力品 (開放時 4V) を使用しています。アモルファス太陽電池は通常の単結晶シリコン太陽電池と感度特性が異なり、可視光域の感度が高いため、室内の蛍光灯下の動作に適しています。いわゆるソーラー電卓に使われている太陽電池ですが、電卓用の 1.5V 品ではなく、3V 品を採用しています。

蛍光灯下の動作に適していますといっても、太陽電池の出力はたかだか数 10 uA しかありません。圧電ブザーの駆動には数 mA の電流が必要なので、電気二重層コンデンサに一度充電してまかなうことにしています。

プログラムのだいたいのダイアグラムを上図に示します。テスタリード開放のとき Power Down Sleep モードに入り、INT0 割り込みを待ちます。このときの消費電流は 1uA 以下です。抵抗値のチェックはコンパレータを使用して、0.1V 基準電圧と比較します。


ケースの中身はこんな感じで、見てのとおり適当な基板の切れ端に実装しています。
テスタリードとケースは 3D プリンタで作成しました。テスタリードの先っぽは MAC8 CD-2 です。

 

 

3Dプリンタで半固定抵抗のつまみを作る

試作品の動作中に半固定抵抗を調整するとき、毎回ドライバを差し込んで・・・というのはいかにも操作性が悪く、ダイヤル式のつまみがほしい。
もちろんつまみ付きの基板取り付け型 VR は存在しますが、入手しづらかったりサイズが大きかったり、何かと使いづらいのです。

そんなわけで、下図のような半固定抵抗用つまみのモデルを 3DCAD で作り、先日買った 3D プリンタで印刷します。
うちに大量ストックしている NOBLE の VM6CK という VR がおあつらえ向けの形状(摺動子と連動する円形カバー、太く深いドライバ溝)だったので、それにマッチするようモデリングしています。

プリントするとこんな感じ。

便利に使えています。