koheiのおもちゃ修理記録

宇部おもちゃ病院 毎月第2土曜日 13:00~16:00
宇部新天町の西の端、市民活動センターで開院してます。

9/20 LEDのI-V特性などなど

2020-09-20 | PIC・電子工作
さて、楽しい4連休。ですが、おもちゃの入院品も無い。その他やりたい事を消化して、有意義に過ごそう~!
(注:ピンポイントでマニアック過ぎる記事なので、関心のない方は読み飛ばして下さいw。)

ちょっと前に「Qステアのクローン送信機」を作ってみましたが、元プログラム設計者の大泉さんとのメールのやりとりの中で、「LED出力端子に抵抗分圧でチャンネルセレクトさせて、8PINのAttiny13aで作るのがいい!」という提案がありました。
(チャンネル設定読み込み時だけ内部プルアップを掛けて、ADCで電圧を読む。それ以外の時は、内部プルアップを切ってデジタル出力にしてLED点灯に使う。)
スペースも厳しいので、8PINで済むならそれに越したことはない、検討してみました。

実機のSW構造を考慮して、大泉さんとのやりとりの結果、回路はこんな感じを考えました。

実機の回路は、ch-A選択時は、多分接点がどこにも繋がってないと思われます。そこに接点を追加するのはちょっと面倒なので、ch-A選択時にどこにも繋がらずに段階的プルダウンを実現するために、こんな並列抵抗の回路となりました。

まずLT-SPICEで検証してみました。
回路図には繋がってない抵抗が書いてありますが、ベースとなるR5の抵抗値をステップ応答で変化させて、電圧・電流を計算させます。

これによると、LED端の順方向電圧が0.5VぐらいまではLED側にほとんど電流が流れず、電圧はプルダウン側が支配的で、プルアップ抵抗との分圧で直線的に電圧が上がっていく。
0.5Vを超えて0.56Vぐらいになると、今度はLED側が支配的になって、LEDの(低電流時の)順方向電圧でほぼ一定になって、プルダウン抵抗をそれ以上上げても電圧が変わらなくなる。
という計算結果となりました。

電圧の低い所を拡大するとこんな感じ。

黄色の線ぐらいの感じで電圧を設定すれば、チャンネル4つを識別できそうです。

しかし、LT-SPICEがLEDの低電流時のI-V特性を正確に模擬しているかどうか怪しいので(型番も指定してないしw)、次は、実物のLEDのI-V特性を測定してみます。
LEDは「電流の大小によらず、順方向電圧がほぼ一定」という説明が多いですが、それはあくまでもLEDが点灯するような2~40mAぐらいの電流範囲の事であって、それより低い電流域ではそうでもないよなぁ…、と思ってたので、この際で確認します。

普通にLEDに入れる電流制限抵抗をどんどん上げていって、低電流時のLED順方向電圧を測定しました。参考までに手持ちの赤外線、赤色、青色のLEDで測定。

横軸:電流を対数目盛にして、電流を流して発生する順方向電圧は、電流の対数にほぼ比例、という結果でした。ウチで測れる極小まで電流下げても、かなりの順方向電圧が残りますね。
LEDのカタログ上の公称スペック(一部は、袋に書いてあるスペック)は、
①赤外LED:aitendoのYSL-R531FR1C-F1、Vf=1.4~1.6V、If=50mA(Max)
②赤色LED:秋月のLTL2U7SEK-002A、Vf=2.25V、If=20mA
③青色LED:aitendoの5408BC-5MM-BLUE、Vf=3.0~3.4V
です。スペックと比べると、公称のVfより0.4Vほど下げておけば、LED側の影響を無視できそうです。

さらに、手持ちの中で、赤外LEDのVfの個体差も見てみましたが、結論は、同じ型番(の、多分同じロット)だと、個体差はほとんどない。型番の違うLEDだと多少差があるかな、といった感じ。
上述のaitendoの5mm赤外LEDは、手持ちが7個ありましたが、電流制限抵抗を50KΩ入れた状態で、どれも0.933Vでほぼプラマイなし。
もう1種類、秋月の3mm赤外、OSI5FU3A11C、Vf=1.35~1.6V:10個を測ってみたところ、どれも0.910Vでほぼプライマイなし。

最後に、LEDも付けた模擬回路で、マイコン想定側のプルアップ抵抗を30k、51k、81kに変えて、プルダウン側を変えたときの電圧を測定。

マイコンのプルアップ抵抗は、きっちり固定じゃなくて幅があります。Attiny13aのデータシートによると、

となっています。
プルダウン側の抵抗が小さくなると、LEDを点灯させたときにプルダウン側にも流れてロスになる電流が増えるのでおもしろくないので、プルアップ側の抵抗が大きい方が有利です。
Attiny13aの場合、RESETピンだけプルアップ抵抗が高い(より「弱い」プルアップ)ので、このピンを使った方がよさそう。公称で30k~80kΩという事になります。

上の表は、実測結果と、LED側を無視して単純な抵抗分圧で計算した「電圧理論値」を記載していますが、実測と計算値ほぼぴったり。0.7V以下程度であれば、LED側を無視して計算してよいという事になります。
(手持ちのリード型抵抗が1、2、5.1の刻みしかなかったので5.1k、10k、20kを使っていますが、実機組むときはもちょっと細かく刻んだSMD抵抗を使うので、もうちょっと間隔を均一化できると思います。)
Attiny13aのADC分解能は、10bitフルに使えば1024→Vcc3Vなら0.003Vなので、十分電圧差を検出できるでしょう。

これで、一番上の回路図でLED点灯とADCを兼用させたチャンネルセレクトができそうです。
問題は、Attinyの内部プルアップの個体差で判定電圧が変わる点ですが、次のような方法を考えました。
・回路を組んで一番最初に電源を入れる時に、必ずchA選択にしておいて、その時のADC測定電圧をリファレンス電圧としてeepromの#00,#01に書き込む。(電源入れたときにeepromの#00,#01を読み込んで、"FF"なら「リファレンス電圧未設定」と判断して、リファレンス電圧の測定・書込を行う。)
・以降は、そのリファレンス電圧に対する比で、チャンネルを判定する。
これなら、組む前に都度Attinyのプルアップ抵抗の実測をせずに済みます。

という事で、事前準備は完了。あとは実際にプログラムを作ってみるかみないかは…私次第ですw。
コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 9/12 宇部定期開院 | トップ | 9/21 LEDのI-V特... »

コメントを投稿