マイコン出力ポートのプルアップ、プルダウン問題 誤パルス出力を避けるために
トランジスタ技術2004年1月号に
『マイコン内蔵I/Oポートによる各種ドライブ回路』
という題で、入出力ポートに対する注意点を載せてもらい
ました。
「定番エレクトロニクス回路140」という特集記事で、
小さな記事がいくつもならんでいます。
その中の一つで、掲載記事は1ページにまとまっています。
出力が不定な、プログラムが走る前のリセット期間に
要注意という内容です。
インターフェースするデバイスにより、プルダウン抵抗
を付けたり、プルアップ抵抗を使ったりということで、
あれこれ解説しています。
あらためて図示しておきます。
まず「Hアクティブ」で使う信号考えます。
ポートを直で使うのではなく、
・駆動電流を増やしたい
・異電圧でドライブしたい
など、インターフェース素子を間にはさむ場合が出てきます。
※例では LEDを負荷にしました。
これはアカンぞ! という例。
ベースやゲートなどの入力インピーダンスを下げておかないと
誘導や隣の信号のパルスを拾ってしまって
「誤作動するかも」です。
「勝手な出力が出てもOKだよ」という回路じゃ限り
面倒でも抵抗を入れておきましょう。
これで、まっとうな「Hアクティブ出力」になります。
バイポーラトランジスタだと「抵抗内蔵トランジシタ=デジトラ」が
使えます。
多信号なら、トランジスタアレイを使いましょう。
入力を安定させる抵抗が入っています。
問題は「Lアクティブ」信号。
昔からある「TTL」は
入力オープンだとHと認識。
Lに引っ張って(GNDに電流を流して)オン。
入力を安定させるにはプルアップ抵抗を。
ストローブ信号など、Lアクティブが多い。
という特徴があります。
TTLでインターフェースするなど、Lアクティブで使う時は
プルアップ抵抗を入れるのが定石になります。
しかし、マイコンのポートを初期化する時にこつが必要です。
・ポートの出力レジスタを先にHに。
・その後からポートを出力モードに。
「先にH」を処置せず、出力モードにしてからHを出力すると、
一瞬のLパルスが出てしまいます。
※このパルスが無視できる回路なら良いのですが
この処置、昔のI/Oチップ「8255」などは
「出力に初期化したらポートはLからスタート」
となっていて、Lアクティブで使うには、不要なLパルスが出ても
大丈夫な回路を構築しておかなくてはなりませんでした。
LEDの点灯回路ならこんな具合です。
間違って「Hアクティブ」で使う回路にプルアップ抵抗を
入れてしまうと、
電源オン→リセット解除→プログラムが走り始める
この間、不要なパルスが出てしまいます。
TTLだから入力をプルアップしたのにHアクティブで使う、
というのはちょっとなぁです。
出てくる余計な信号が悪さをしなければ良いのですが。
LEDだと「一瞬光る」だけで済むのですが、メカを駆動する
ような回路だと、問題が生じるかもしれません。
Raspberry Pi PicoのマイコンRP2040、
「リセットで内蔵プルダウン抵抗が有効になる」は、
・入力がオープンのまま放置されるのを防止
・Hアクティブ出力での不要パルスの防止
この二つの役目があります。
しかし、RP2040を「Lアクティブ出力」で使う時は要注意になります。
内蔵プルダウン抵抗に負けない(抵抗値の小さな)プルアップ抵抗を
使っておかないと、リセットで不要なパルス(L出力)が出てしまいます。
最近のコメント