以下の内容はhttps://tomio2480.hatenablog.com/entry/2025/08/11/234640より取得しました。


豊かな日だったので入力閾値電圧にヒステリシスを持たせる方法を勉強した

この 3 日間,なぜだか非常に豊かな気持ちになって電子回路の勉強をしていました.つまりこれは豊かな日記です.

 
自分たちが富良野市で活動している FuraIT には Arduino 部という括りがあり,そこでは Arduino の用いた工作を中心としたものづくり活動をしています.活動内容は以下のブログでたまに報告されています.

furait.hatenablog.jp

 
Arduino を用いる関係で,電子回路よりもスケッチの方が変更しやすく,試行錯誤の回数を稼ぎやすいです.そのため知識を蓄えられるまでの間は,スケッチの負担が膨れ上がりがちです.電子回路側を工夫して解決できる単純な実装課題であれば,電子回路側を工夫する手段を持っていたいものです.
 
実際,電子回路側の実装手段が乏しいと,Arduino と他デバイス間の配線本数が膨れ上がって接続間違いを誘発したり,スケッチ内の条件分岐や入出力信号の処理が複雑化して,ロジック部分に影響するバグが発生したりと,完動するか否かにも影響しています.
 
そこでいろいろ勉強してもらうために何をネタにしようかなと思っていたところ,各種センサーからのアナログ電圧の入力を Arduino に引き込む際の単純化と安定化をねらって,ボルテージフォロワ,コンパレータ,シュミットトリガあたりをネタに勉強できるとよさそうだと天啓が降りてきました.
 
これらはそのうち,工業高校電気科がやるような 4 時間の実習パッケージとして資料(つまりレポート)をつくって,FuraIT で実習できたらいいなと思っています.
 
このブログでは前段として,自分がなんとなく理解したこれらの概念と理論と実装について,外部リンクをまとめる形で記録します.

 

勉強したことメモ

ボルテージフォロワ

マイコン入力等の測定側回路とセンサー等デバイス等の被測定側回路の間に挟むことで,入力インピーダンスの変換を行い,被測定側の回路に測定側回路による影響を及ぼさせないための仕組みです.オペアンプを使用します.昔発表したことがあるので,資料をリンクしておきます. 以下資料の p.33 からがボルテージフォロワの話です.
 
www.docswell.com  
理論を説明するにあたっては,オペアンプとイマジナリーショート,入力インピーダンスと出力インピーダンスあたりの説明がないと「魔法です!!!」みたいになりますので,そこを補えるようにしたいです.
 
「AC 電圧を直接触りたい」みたいな要望が出てきて,リレーだったり SSR だったりが登場する場合には,回路分離に注意を向けたいよね,というのは直感でわかる人も多いかと思います.
 
しかし,センサーとマイコンの入出力インピーダンスの関係で正しい電圧値が取れないから,回路分離が必要といった話は,どうしても直感で理解するのは難しいです.それこそ,分流,分圧くらいの電気回路の基礎はわかる前提で進みたいので,工業高校電気科一年生一学期くらいの知識は詰め込んでいかないとなりません.
 

コンパレータ

ある基準電圧を定めて,それを以上か否かで出力電圧の高低を切り替える仕組みです.わかりやすくいうと 1 bit の AD コンバータで,比較回路とも呼ばれます.トランジスタなどを使って自分で実装するのもいいですが,そもそもコンパレータ IC があるので,それを使うのがてっとり早いです.

akizukidenshi.com

 
Arduino で,あるセンサーの出力電圧値をアナログ入力で受け,スケッチ内で,ある基準電圧以上か否かを if 文で判定している場合,その部分をスケッチの外に出してハードウェア側で実装し,調整もできるので非常に便利です.
 
閾値をハードコードするとイマイチなときに,もう一度スケッチを書き換えて Arduino に書き込む必要があります.回路で実装すれば,調整部に半固定抵抗を使うだけで,Arduino への書き込み不要でちょうどいい閾値に調整できます.
 
また,具体的に測定していないのでなんとも言えませんが,analogRead を呼び出す必要がなくなるため,動作速度やプログラム容量的にも利点があるのではないかと思います(この辺の検証は後々やるとして......).
 
さらに極端な話,センサーの出力電圧値を元に LED とかの出力デバイスを ON/OFF しているだけなら,マイコンが不要になる可能性も十分あります.Arduino からこれらのロジックを切り離して動作させられます.
 
たとえばセンサーの出力電圧値が一定以上かどうかのインジケータ動作と他の動作ロジックを両方とも Arduino に背負わせなくてもいい場合,インジケータ側はコンパレータに任せてしまってもいいかもしれません.
 
ただこのコンパレータは,基本的には閾値がひとつで,その基準電圧のみを参照して出力を切り替えます.そのため,基準電圧とほぼ同じ値の近くで,ノイズ等により値が細かく上下すると,その細かな変化が出力にそのまま影響し,出力電圧を激しく上下させることがあります.
 

ヒステリシス

対策として考えられるのは,電圧値が低い状態から高い状態に変化する際に切り替える閾値と,高い状態から低い状態に変化する際に切り替える閾値を別々に持つことです.
 
たとえば,0 V から 5 V の幅がある電源電圧に対して,低→高のときは 3.0 V,高→低のときは 2.0 V で切り替えるといった形です.その瞬間の入力値だけではなくて,直前の値によって閾値を変化させます.
 
このように直前の状態の影響を受けることを "ヒステリシス特性を持つ" と表現します.今回は閾値が過去の影響を受けるため,"ヒステリシス特性を持つ閾値" と呼びます.ヒステリシスは履歴効果と呼ばれます.電気系の勉強をしている人は,磁気の単元で初めて出会う人も多いのではないでしょうか.
 

シュミットトリガ

このヒステリシス特性を持つ閾値が組み込まれた比較回路のことをシュミットトリガと呼びます.これを利用できれば,ソフトウェア側の考慮点を減らせます.具体的には,バタついた入力を受けて,動作不良を起こさないようなロジックを考える必要がなくなります.単純な ON/OFF の信号を受け取って,何をするかだけ考えればよくなります.
 
最も手っ取り早くシュミットトリガを利用するなら,シュミットトリガインバーター ICを買って使うことになるかと思います.ただこの場合,高低それぞれの閾値電圧値は決められており,この幅でよいかは確認が必要です.この IC はデジタル入力に向けたスイッチ入力のチャタリング防止で用いられることも多いです.
 
ただ,欠点がないわけではなくて,閾値が基準電圧からズレる分,電圧の変動を検知するのも遅くなります.本当なら 2.5 V を基準にその上下で動作を切り替えたいけれども,閾値が上下にズレた分,その電圧に至るまでは直前の動作を引き継いでしまいます.
 
もし,この動作遅延をなくしたいとなると,ラッチ回路を上手に組み込むか,ソフトウェア側で工夫するかしかないかと思います.最終的にマイコンで入力を受ける場合,ラッチ回路をわざわざ組むのは,部品点数の多さであったり回路定数の計算がややこしいこともあり,あまり得策とはいえない気がします.
 
プログラム側で ON/OFF を検知したら一定時間入力を無視しつつ,切り替えロジックを動かすのがいい落とし所なのかなと思います.これらは反応が速い分,誤動作も多くなる気がしますが,実装したいものの要求や要件がどんなものかによって異なるでしょう.
 

シュミットトリガの実装

高低それぞれの閾値電圧値を自分で設定したい場合,シュミットトリガインバーター IC では実現できません.自分で回路を組むことになります.トランジスタを 2 つ使って組む方法インバーターを 2 つ使って組む方法,コンパレータを使って組む方法があります.
 
トランジスタを用いた実装は回路の動作が少し複雑で,トランジスタそのものの動作について知っている必要があります.インバーターを用いた実装は,外からつながる入力と出力が抵抗を介して直接つながってしまい,シュミットトリガ部の入力インピーダンスを高く維持しにくいです.
 
そこで,入力インピーダンスの高いコンパレータを使用した実装に頼ります.単純な比較回路に抵抗をひとつ追加すれば,ヒステリシスを持たせられます.実装の仕方によって,反転型と非反転型の 2 つの方法があります.
 
cc.cqpub.co.jp cc.cqpub.co.jp  
特に理由がなければ,非反転型を選択するとよさそうです.非反転型は信号入力の接続先がコンパレータの入力だけで,それ以外にはつながりません.その関係でコンパレータの入力インピーダンスの高さをそのままいかせます.
 
一方,反転型はインバータによる実装と同じく,外からつながる入力と出力が抵抗を介して直接つながってしまい,入力インピーダンスが低くなります.
 
また,解説する立場としても,他の実装に比べて説明しやすいのもお得です.どうして閾値がコンパレータの出力によって切り替わるのかを把握する段階において,単純に合成抵抗の話に持ち込めるのはありがたいです.
 
特に,マイコンにコンパレータ出力をそのまま入れる場合は,非反転型でも反転型でも,プログラム側で論理を反転させられるため困ることはありません.論理の正負はどちらでもよく,回路的な利点の大きい非反転型を選択するのが妥当かと思います.
 

これらを上手に資料にまとめる......?

普通に学校とかで使える実習資料にできるかな思う一方で,ここまで突っ込んだ話は工業高校ではやらないなとも思っており,どういう形でまとめるのがいいかなぁと思案しております.
 
でもせっかく作るなら電子情報系の学校で使えるちょうどいい尺の資料にしたいので,3 時間か 4 時間の単位で区切って使えるなんかにできればいいなと思っています.
 
できあがったら技術書典とかで出すのがいいかな...... 無料で配ってもいいけど,部品調達して実装実験して,どれくらいの時間が掛かるか見積もる関係で,ちゃんとお金が掛かるんですよね.
 
過去,学校で実習資料をつくっていた経験から,自分でやってみた時間の 1.25 倍から 1.5 倍くらいは最低でも掛かると見込まないと,本当に誰も時間内に完遂しない実習が爆誕してしまうことがわかっています.
 
これを真面目にやっておけば,カンファレンスや普段の勉強会のハンズオンで使える資料になりそうです.地道に完成に向けて教材研究と実習設計をしていきたい気持ちがあるので,ここに未来の自分への圧を記録して終わりにします.
 

2025-08-19 追記

週末にある JMLTFuraIT,月末にあるえびてくに向けて,スライドを錬成したので,追記でリンクを張っておきます.
www.docswell.com  




以上の内容はhttps://tomio2480.hatenablog.com/entry/2025/08/11/234640より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14