トドお父さん通信 -2ページ目

トドお父さん通信

北部九州在住 高BMI中高年のオタク趣味の活動記録


おもちゃ病院で、トランジスタ回路セミナーを開催したのは昨年の4月から10月です。

 

しばらくお休みして、2年目のセミナーを4月から第4土曜日に筑紫野市のカミーリヤで

開催しています。


去年の5名はそのまま、2名新規に参加されたので、合計7名のメンバーになりました。
人数が増えるとサポートが大変なので、これぐらいの規模感がいいですね。

 

お題は、昨年のトランジスタ電子回路から、より実践的な「センサ・駆動系マスター

 (アナログ系) 」としました。

 

4月の第一回は新規参加者のために電子回路の基礎のおさらい、第二回はスイッチの

動作について勉強しました。

 

今回は、いよいよセンサの一つとして光センサを取り上げ、Cdsとフォトダイオードの

動作原理とその応用です。

CDSは光で抵抗値が変わり、フォトトランジスタ・ダイオードは光で電流が変わります。

画像
 

いつものように、ブレッドボードを作ってハンズオンしながら、フォトセンサを

理解していきます。

画像
 

この回路をブレッドボードで作ります。

画像
 

思惑通りいかないことが起きました。
「先生、明るくなってもLEDが消灯しません!」

10kΩとCDSを直列接続している接点の電圧をテスターで調べます。
明るくても1V以上でています。

「これはCDSのばらつきです。暗時のCDSが2MΩのものと500kΩのものが混じっています。2MΩのものはこの室内の明るさ(1000llxくらい?)では
3kΩくらいになります。」「ペンライトを当ててください、消灯しますか?」「消灯しました!」

 

 

という掛け合いがあったあと、「10kΩを22kΩに変えてください」で解決しました。

つぎにフォトダイオードで、光起電力を測定します。

使ったのが赤外フォトダイオードなので、ペンライトではあまり反応しませんね。太陽光にあててみると電流がuAレベルで増えます。

画像
 

みんなあまり知らないことですが、発光ダイオード(LED)も光を当てると発電します。デジタルテスタで即手するとペンライトの光で2V出ました。

PN接合にバンドギャップ(1.1eV)を超える光を当てると電子と正孔(ホール)が発生して、電子はNに、ホールはPに移動して電圧が現れる。

なんて説明すると受講者は引いてしまうので、「太陽電池の原理と同じですよ!」って説明しました。

ちなみにセミナー資料は下のGoogleドライブに入れています。
https://drive.google.com/.../16K2dGDyTI.../view...

でも、この辺は不思議ですね。セミナー資料を作るときにAI先生に相談します。「バンドギャップの1.1eVってなに?」

ChatGPT回答;

「1eVのエネルギーは1.602 × 10^-19 J(電子1個に1Vの電位差)

1C(クーロン)は1 / (1.602×10^-19)の電子=6.24×10^18 個

(アボガドロ数)

 

実はこの

6.02×10^23

(アボガドロ数)

1.602×10^-19

(電子の電荷)

は関係があります。

 

6.02×10^23 × 1.602×10^-19

≈ 96485

これが化学で出てくる

ファラデー定数

です。」

なんか学生の時と同じでわかったような、わからないような説明ですね。

 

エネルギー(J)=電流x電圧x時間

 

電流はC/t(クーロン/時間)電圧は電圧V 、時間が消えて

J=CxV になります。

 

電力の定義、P(電力 W)=V(電圧)xI(電流)は

実は時間が隠れていて、1W=1J/s、1J=1Ws なんですね。

 

3600秒累積すると皆さんが電力代請求される 1Whになります。

みたいな内容が理解できて、頭が少し混乱しましたが勉強になりました!

 

電子1個の1eVのエネルギーは1.602 × 10^-19 Jから始まるんですね。

学生のころに戻って自分に教えてやりたいですね!

 

学生時代にはバラバラだった知識(物理・化学・電気)が「ファラデー定数」や

「エネルギーの定義」で一つに繋がっていく感覚。

いまだからわかるんでしょうかね。

 

本当に、「教うるは、学びの始めなり」ですね。
セミナー開くと自分の勉強になるのが、セミナー講師の励みになります!

https://chatgpt.com/.../6a3ddc29-f5b8-83ee-8027-eb50adbe7ad0

最後に、「障害児の遊び支援」活動をしているおもちゃドクターから、

「Mさん、今回のトランジスタでスイッチを作る件ですが、教えて下さい。」
とのこと。

画像
 

聞くと、「TTP223というタッチセンサを使って、おもちゃの犬のスイッチのON/OFFをしたい。」とのこと。

TTP223の出力そのままでは、大きな電流をON/OFFできません。


トランジスタかFETで電流(電圧)増幅’(スイッチ)する必要があります。

次回が、ちょうどタッチセンサの回なので、その時に説明しましょう!
ということになりました。

来月のお題がこれできまりましたね。


関連記事
【おもちゃ病院】トランジスタ回路ハンズオンセミナー(第3回)を計画中です

 

【おもちゃ病院】トランジスタ回路ハンズオンセミナー第2回を計画中です

 

 

おもちゃ病院でトランジスタ回路ハンズオンセミナーを実施しました(第1回)

 

 

最近は、おもちゃ病院で使う小型のツールを作っています。
・導通チェッカ(ChaNさんの導通チェッカをTiny402に移植)
・水晶チェッカ(100MHz周波数カウンタ付き)
・「信号みえ太」簡易オシロ付きロジックチェッカ
最初に作ったChaNさんの導通チェッカが、タカチのSW-53という
小型ケースを使っていたので、このサイズにこだわって作っています。

前回 簡易オシロができたので、信号源が欲しいな?という発想で
今回は超小型のファンクションジェネレータを作ることにしました。

今回も元ネタは、TechnoblogyのDavidさんの「Tiny Function Generator」
です。

 

画像
 

8年前の記事で、ATTINY85内蔵のPLLを使って64MHzクロックでPWM波形を作ることで、各種波形を1~5kHzまで出しています。
波形や周波数の変更はロータリーエンコーダを使っています。

これを現代のNew Tinyに置き換えたらどうかと思いました。
ATTINY1614はクロックは20MHzでPLLもってませんが、8bit DACを持ってます。
なんなら、AVR DDシリーズなら、クロック24MHz(外部32MHz)まで使えて、10bit DACを内蔵しています。
またAVR32DD20なら、手持ちで持っています(フラッシュ32MB, 20ピン)
マルツで調べるとAVR64DD14なら、14ピンで¥265(税込¥292)でTINY1614 ¥215と¥50くらいしか変わりません。

画像
 

まずは、手持ちのAVR32DD20をブレッドボードベースでUIとファームを
開発し、その間にAVR64DD14を注文する作戦をとることにしました。

今回の超小型ファンクションジェネレータの仕様は下記のようにしました。20kHzは出せませんが、10kHzでもおもちゃ修理用としては十分です。

ショート時もOKなように470Ωの抵抗を介して出力しますが、ジャンパで
0.01uFのコンデンサを繋いで、CRによる1次のローパスフィルタを構成可能にします。計算では1/2πCR=33.7kHz 10kHzまで出力は落ちないでしょう

  • 0.91’ OLEDディスプレイ(128x32)を使う (元記事と同じ)

  • 出力波形:サイン波、のこぎり波、三角波、矩形波

  • 周波数範囲:10kHz~1Hz(10kHz時、10サンプル)

  • 出力電圧:3Vpp 470Ω

  • フィルタ:CR 1次フィルタ あり/なし はジャンパピンで選択

  • 電源ON/OFF: 専用ソフト電源スイッチ

  • Sleep:120秒以上操作なしか、電源SWでSleepに入る

  • 波形選択・周波数変更:3接点サムスイッチを使用(信号みえ太と同じ)
    左(DOWN)中央(波形選択)右(UP)
    中央長押し(1秒)で周波数変更桁を変更可能
    桁変更時は、LEDが高速点滅

  • 設定値記憶(EEPROM)は今回使用せず(1k サイン波で起動)

  • 外形: 53 x 36 x 11 mm(ケースはタカチ SW53使用)

  • 電池・消費電流:CR2032コイン電池・使用時10mA、Sleep 1uA

    前回メモリの心配がありましたが、今回はメモリは潤沢にあるので大丈夫でしょう。
    DACを使うので、タイマー割り込み周期がそのまま波形のサンプル出力周波数に影響します。

    最初は320kHzで試験して、どこまでいけるか確認します。
    サンプル周波数が320kHzなら、20kHzくらいまで出力できますね。
    1周期で16ポイントを確保できます。

    100kHzに落としても、10kHzで10ポイント。
    オリジナルのTINY85の16kHz割込みで5kHzの出力に比べると
    相当の性能アップが見込めます。

    信号みえ太はArduinoのMegaCoreを使いましたが、今回はAVR開発の
    王道、ATMEL Studio(現MicroChip Studio)を使って開発します。

ブレッドボードでUI検討を行う

まずは、ブレッドボードにタクトスイッチと0.91' oled表示器を組んでみます。

回路図はこちら
主要部品はAVR32DD20、128x32 oled表示器、LED、タクトスイッチx4です。

画像
 

ブレッドボードに組んだ状態はこちらです。
3連サムスイッチの代わりにタクトスイッチを使ってます。
上からSEL、UP、DOWNスイッチです。一番端の赤いスイッチは電源スイッチです。

 

ソフトUI検討

DDSの実装の前に、まずはUIの検討を行います。
波形の表示は、信号みえ太で作ったDrawLine()、キャラクタ表示はDrawChar()を使います。
上半分を波形名と波形のグラフィック、下半分は周波数とHz表示、それと表示桁です。
表示桁以外は2倍角なのでだいぶ見やすいかと思います。

ファーム説明

ここまでのファームを説明します。
まずは、main.cのコメントです。AVR32DD20でAVR64DD14にあるピンだけを使ってピンを配置しました。

画像
 

① CPUのピン設定

画像
 

UPDI用のPF7は使えないので、空きピンはRESET用のPF6だけです。
この2つはFUSE変更が必要なので、使わない方がいいでしょう。

② クロック設定
信号みえ太では、Arduino IDEが裏で設定していましたが、ATMEL Studioでは自前で設定する必要があります。(FUSEも同様。今回はデフォで使用)

画像
 

③ TCB0でmillis()の実装
TCB0でmillis()を作ります。24MHzクロックなので24000回クロックをカウントして、1mS毎に割り込みを入れます。

画像
 

④ メイン表示の処理
つぎはメイン表示の処理です。

画像
 

128x32bitで縦は4ページx8bitです。7x5bitのフォントを2倍角で表示すると14x10bitになります。
上16bit、下16bitに分けて表示します。
下は周波数表示と桁位置表示(1倍角)です。
14bitなので上下1bit余りますから、一番下は桁のカーソル表示に使います。

画像
 

2倍角スムース表示
2倍角の場合はエッジがギザギザしないように、これもDavidさんの力作スムーシングビッグフォントを使わせてもらいます。

画像
 

これを使うときは、コードで DrawStringSmooth()を宣言します。

⑤ スイッチ入力
スイッチ入力は、信号みえ太と同じピンチェンジ割り込みを使います。
SEL、UP、DOWNはPDn、電源(PWR)SWはPAnを使います。
それぞれの割り込み処理は、信号みえ太では割り込みハンドラーで処理していました。
今回はTCB1で高速割り込みを使いますので、スイッチによる割り込みはフラグを立てるだけにして、スイッチの処理はメインループのKey_Event()処理で行うようにしました。

画像
 

信号みえ太のように割込み処理内で_delay_ms()遅延処理があると、他の割り込みが入らなくなるので、リアルタイム応答がメリットである割り込みの意味がなくなってしまいます。
この方がシンプルで、次回述べるキーイベント処理でのDDS割り込みを止めてのブロッキング処理の見通しが良くなります。

⑥ 表示桁(step) 変更処理
キーイベント処理でどのキースイッチが押されたかを判定します。
SELキーだけ、長押し処理で周波数変更の選択桁を変更する処理に入ります。 この時は選択桁は白字に反転文字で数字を表示する必要があります。

画像
 

このモードではLEDも高速で点滅し、UP/DOWNキーで選択桁が上下します。もう一度、SELキーを押すと反転文字が元に戻り、選択桁の下にカーソルがでます。

周波数/波形変更
この状態でUP/DOWNキーを押すと、出力する波形の周波数を変更することができます。
また、SELキーを短押しすると、SINE/SAW/TRI/SQUの順に出力波形が変わります。

Sleep処理
Sleep処理はいつものChaNさん方式のdo{}while() ループです。
タイマーが入るか、電源SWが入るとSleepになります。

画像
 

Sleep前処理をうまくやらないと、Sleep電流が下がらないので注意が必要です。
ここまでのファームは下記のgistにUPしました。
https://gist.github.com/todopapa/c041343b97432571e772db2f981fa427

動作確認

今回設計したUIの動作は下のYoutubeで確認できます。
ここまでにいろいろと試行錯誤しましたが、見やすく使いやすいUIになりました。

今回のまとめ

  • ATMEL STUDIOを使ったAVR32DD20でのUI開発はほぼ完了

  • ロータリーエンコーダから3接点サムスイッチへの移植もOK

  • タイマ TCB1を使ったDDS実装と10bitDAC動作確認は次回に実施予定

  •  

  • Sleep電流の削減はAVR64DD14移植時に再度検討
    ラフ検討では、動作中に10~12mA、Sleep中に数十uAでした。

それでは、次回のDDS実装をこうご期待!
今回は、下記のNote記事と同じ内容になります。

 

 

参考資料

今回はtechnoblogyさんより、下記の記事を参考にしました。Davidさんの素晴らしい仕事に感謝です!
Tiny Function Generator  http://www.technoblogy.com/show?20W6
Tiny Function Generator Sine Wave http://www.technoblogy.com/show?22HF
Two TFT Graphics Libraries http://www.technoblogy.com/show?5N9Y
Smooth Big Text http://www.technoblogy.com/show?3AJ7

 

おもちゃ修理情報のまとめ・備忘録にNoteを使うことを始めました。  
修理記録や電子工作メモをNoteに写真付きで整理しています。

おもちゃ病院での修理記録をまとめました。  
今回は近隣地区のおもちゃ病院で預かったトミカのクレーンゲームを自宅に
持ち帰って修理しました。
 
画像
 
症状は、電源スイッチ入れて起動すると音声のあと、バケットがカチカチを
繰り返すのみで、次に進まない、というものです。
 
このクレーンゲームの修理は2回目なので、たぶんバケットの原点位置を検出
するリミットスイッチが動作していないと思われます。

透明のフタを開けると、安全のためのインターロックスイッチが働いてモータ
が回転しないため、基板にジャンパーしてフタを開けても動くようにします。 
(黄色の部分です。電線が来ている2か所をジャンパ線で接続します)
画像

先端のバケット部分を分解しました。
画像
バケットを動かすモータと、2つのリミットスイッチです。
バケットが閉じるほうは白線で、バケットが開く方は紫線です。
初期動作でバケットが開くですが、これを検出できていません。
紫線のどこから切れている可能性が高いです。 

画像
 
ビンゴ、クレーンからアームが出ている根本で紫線の一本が切れていました。
この処理では切れますよね。(線のカバーがない)
構造的な問題だと思われます。 多芯の可とう部分に使われるケーブルを使って
欲しいですが、おもちゃってコスト厳しいですからね。

画像
細いジュンフロン線を数cmジャンパ線にしてつなぎました。
潤滑性のいいと思われる、テフロンテープで巻きました。
 
これでファイナルアンサーです。
修理完了、お疲れ様です! 
インターロック基板のジャンパ線を外すのを忘れないようにしてくださいね。