アナログ入力ピンを介した4ビットバスアドレスの選択:モンテカルロシミュレーションで重複するアドレス値が表示される


16

ATtiny44マイクロコントローラーを使用して、修士論文の小さなセンサーPCBを設計しました。アプリケーションにはこれらのボードのうち約200個が必要で、16個は常にローカルにコントローラーボードに接続されています。ネットワーク全体は次のようになります。

ここに画像の説明を入力してください

コントローラーとセンサーボード間で通信するために、私は自分の1ピンバスを作成しました(タイミングベース)。唯一の問題は、センサーボードにデータをコントローラーボードに送信するときに、ネットワーク内の位置を知るためのアドレスが必要になることです。

ATtinyには1つのピンしか残っていないので、4つのジャンパーの設定に基づいてアナログ電圧を生成するジャンパーベースのDAC回路を思い付きました。センサー回路は値(47、470、1k、3k、4k7、10k、100k、および220k)を使用し、生産のために最適化したかったため、DACには以下の値(基本的には100k、50k、20k、および10k)を使用しました)。これにより、ジャンパー設定に基づいて0 Vから760 mVの間の値が得られます。ATtinyの内部1.1 Vリファレンスを備えたアナログ電圧として正確に読み取る必要がありました。起動時にATtinyはこの電圧を読み取り、その位置を知る必要があります。

回路図

この回路のシミュレーションCircuitLabを使用して作成された回路

理論的には、これは正常に機能します。抵抗の許容差を考慮すると、LTspiceでモンテカルロ解析を行って、重複領域がないことを確認しました(すべて1%BTW)。以下に、この分析の写真を見つけることができます。

ここに画像の説明を入力してください ここに画像の説明を入力してください

今、私はこれらのボードのいくつか(幸運なことに200ではありません)を生産しましたが、いくつかは(特にすべての許容値が一度に再生される上位アドレス領域で)正確な読み取り値を取得できませんでした。すべての可能な解決策を測定し、最終的に私の問題を見つけました。私の最初の分析には、各コントローラーボード上のMC7805で12 Vからローカルに生成される5 V電源電圧の許容誤差は含まれていませんでした。データシートごとに、MC7805の出力電圧は4.8〜5.2 Vです。

これを理解した後、モンテカルロ分析を修正しました。これは次のようになります。

ここに画像の説明を入力してください ここに画像の説明を入力してください

あなたが見ることができるように、私はこの電圧がこのアドレスを意味するだけであると断言することはできません素敵な重複領域があります。基本的に、noで始まるすべてのアドレス。8は、誤った読み取り値を取得する可能性があります(より高いアドレスの誤った読み取り値の可能性が高い)

私は考えていない、すでに(私は生産のために最適化したい論文用として)ボード上で使用されているものとは異なる抵抗値を追加したいです。

私は考えていない DACの抵抗ネットワークを供給するために電圧リファレンス(例えば、ツェナーダイオード)を追加したいです。

私はできませんそれ以上のコントローラボードを変更(およびそこより正確な電圧レギュレータを使用します)。

私がすることができますまだPCB設計/センサボードの概略を修正します!

(プログラムによって、または回路を変更することによって)アドレスで常に正しい読み取り値を取得するようにするにはどうすればよいですか?


3
+1いい質問です。どこかのペーストビンで最後のLTspice ascファイルを提供できますか?他の組み合わせをテストできますか?
薄暗い

2
素晴らしい質問です。ここでガイダンスを求める前に、実際に何が原因であるかを解明するための素晴らしい作業です。質問と回答は、あなただけではなく通り過ぎる人にとって良い読み物です:
マスト

回答:


19

シミュレーションによれば、抵抗値の不確実性のみが考慮される限り、アドレス指定スキームは正常に機能します。失敗するのは電圧の不確実性です。

私のアドバイスは、ADCのリファレンスとして使用することにより、VCCの変動をキャンセルすることです。データシートで説明されているように、レジスタREFS内のビットをプログラムすることでこれを行うことができます。ADMUX

ここに画像の説明を入力してください

ADCの基準電圧としてVCCに切り替えると、電圧は測定されなくなりますが、抵抗値とそれらの比は1%の精度になります。回路図を変更する必要はありませんが(ADCの変換範囲の中央で測定値を取得するためにR7の値を増やしたい場合があります)、Attenyのファームウェアのみを更新する必要があります。

それでもセンサーボードを再加工する場合は、Cano64が提案するように、回路図をR-2Rラダーに置き換えることができます。

回路図

この回路のシミュレーションCircuitLabを使用して作成された回路

これにより、ラダー内のすべてのステップが等しくなり、解像度が最適化されます。1%の抵抗は、最大5ビットの単調ラダーを構築するのに十分な精度です。


ど!私は木の森を見ませんでした。私はその1.1Vにとても夢中になりました...どうもありがとう!やってみます。
カールカールソン

1
それをテストし、動作します。すごい!
カールカールソン

VCCをAREFとして、R7に220kの抵抗を使用してテストしました。後で100k、220k R-2Rはしごをシミュレートして、さらに良い結果が得られるかどうかを確認します。再度、感謝します!
カールカールソン

3

同様の問題を一度解決しなければなりませんでした。arduinoの1つのアナログピンに4つのボタンを接続する必要がありましたが、同時押し(すべての組み合わせ)を認識する必要がありました。私はあなたと同じ回路を思いついたので、ボタンを押したときの最終値ができるだけ離れるように、可能なすべての抵抗値の組み合わせを検索するプログラムを作成しました。何だと思う?私たちはめちゃくちゃです、できません。それだけです、良い一日を。

スイッチの最適な抵抗値はR、2R、4R、8Rに近く、分周器の下部の値はRであることがわかりました。回路はすでに最適な値に近いので、R7を10kに置き換えるだけです。抵抗器。

しかし、良いニュースがあります。アドレスを設定するだけでよいため(デバイスの実行中はスイッチを操作しません)、 代わりにSPDTスイッチとR2Rラダーを使用することをお勧めします。


なぜそれができなかったのですか?スイッチを(R、2R、4R、8R)抵抗器に接続するとどうなりましたか?どの組み合わせが機能しませんでしたか?
ドミトリーグリゴリエフ

ところで、R-2Rはしごは素晴らしい提案です!
ドミトリーグリゴリエフ

+ Dmitry私は、同じ出力電圧は、それらを確実に区別するには近すぎることを意味しました。
Cano64
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.