아날로그 입력 핀을 통한 4 비트 버스 주소 선택 : Monte Carlo 시뮬레이션은 중복 된 주소 값을 보여줍니다.


16

ATtiny44 마이크로 컨트롤러로 마스터 논문에 소형 센서 PCB를 설계했습니다 . 내 응용 프로그램에 약 200 개의 보드가 필요하며 16 개는 항상 컨트롤러 보드에 로컬로 연결되어 있습니다. 전체 네트워크는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

컨트롤러와 센서 보드 사이에 통신하기 위해 1 핀 버스 (타이밍 기반)를 작성했습니다. 유일한 문제는 센서 보드에 데이터를 컨트롤러 보드에 보낼 때 센서 보드에 네트워크의 위치를 ​​알 수있는 주소가 있어야한다는 것입니다.

ATtiny에 1 핀만 남았 기 때문에 4 개의 점퍼 설정에 따라 아날로그 전압을 생성해야하는 점퍼 기반 DAC 회로를 고안했습니다. 센서 회로가 값 (47, 470, 1k, 3k, 4k7, 10k, 100k 및 220k)을 사용하고 생산을 위해 최적화하고 싶기 때문에 DAC에 대해 아래 값을 사용했습니다 (기본적으로 100k, 50k, 20k 및 10k) ). 점퍼 설정에 따라 0V에서 760mV 사이의 멋진 값을 제공해야합니다. 정확히 ATtiny의 내부 1.1V 레퍼런스를 사용하여 아날로그 전압으로 읽어야했습니다. 시작시 ATtiny는이 전압을 읽고 그 위치를 알아야합니다.

개략도

이 회로 시뮬레이션CircuitLab을 사용하여 작성된 회로도

이론적으로 이것은 잘 작동합니다. 저항의 공차를 고려할 때 LTspice 에서 Monte Carlo 분석을 수행 하여 겹치는 영역이 없음을 확인했습니다 (모두 1 % BTW 임). 아래에서이 분석의 사진을 찾을 수 있습니다.

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

이제이 보드를 여러 개 (200 개가 아님) 생산했지만 일부는 주소에 대해 정확한 판독 값을 얻지 못했습니다 (특히 모든 공차가 한 번에 재생되는 높은 주소 영역에서). 가능한 모든 솔루션을 측정하고 마침내 내 문제를 알아 냈습니다. 필자의 원래 분석에는 각 컨트롤러 보드 의 MC7805 를 사용하여 12V에서 로컬로 생성되는 5V 공급 전압의 허용 오차가 포함되지 않았습니다 . 데이터 시트 당 MC7805의 출력 전압은 4.8 ~ 5.2V입니다.

이것을 알아 낸 후 Monte Carlo 분석을 수정했습니다. 이제 다음과 같이 보입니다 :

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

보시다시피 멋진 중첩 영역이 있습니다.이 전압 이이 주소만을 의미한다고 말할 수는 없습니다. 기본적으로 모든 주소는 no로 시작합니다. 8은 잘못된 판독 값을 얻을 수 있습니다 (더 높은 주소의 잘못된 판독 값이있을 가능성이 높음).

나는 것 아니 이미 (I 생산을위한 최적화 할 논문에 관해서는) 보드에 사용 된 것과 다른 저항 값을 추가 할 수있다.

I는 것이다 되지 는 DAC 저항 네트워크를 공급하기위한 기준 전압 (예를 들면, 제너 다이오드)를 추가 할.

내가 할 수없는 더 이상 컨트롤러 보드를 수정 (거기는보다 정확한 전압 레귤레이터 사용).

내가 할 수 여전히 PCB 디자인 / 센서 보드의 회로도를 수정!

프로그램에서 또는 회로를 변경하여 항상 주소를 정확하게 판독하려면 어떻게해야합니까?


3
+1 좋은 질문입니다. 마지막 LTspice asc 파일을 pastebin에 제공 할 수 있습니까? 다른 조합을 테스트 할 수 있습니까?
dim

2
좋은 질문, 여기에 지침을 요청하기 전에 실제로 원인을 파악하는 데 도움이됩니다. 이제 질문과 답변은 당신 대신에 지나가는 사람에게 잘 읽 힙니다. :-)
Mast

답변:


19

시뮬레이션에 따르면, 저항 값의 불확실성 만 고려되는 한 어드레싱 방식이 제대로 작동합니다. 고장의 원인이되는 전압의 불확실성입니다.

내 조언은 VCC를 ADC에 대한 참조로 사용하여 VCC의 변동을 취소하는 것입니다. 데이터 시트에 설명 된대로 레지스터 에서 REFS비트를 프로그래밍하면 ADMUX됩니다 .

여기에 이미지 설명을 입력하십시오

ADC의 기준 전압으로 VCC로 전환하면 더 이상 전압을 측정하지 않고 저항 값 사이의 비율과 1 %의 정확도를 갖습니다. 회로도에서 변경이 필요하지 않습니다 (ADC 변환 범위의 중간에서 측정 값을 얻기 위해 R7 값을 늘리고 싶을 수도 있지만) Attiny의 펌웨어 만 업데이트하면됩니다.

여전히 센서 보드를 재 작업하려는 경우 Cano64가 제안한대로 회로도를 R-2R 래더로 교체 할 수 있습니다.

개략도

이 회로 시뮬레이션CircuitLab을 사용하여 작성된 회로도

래더의 모든 단계를 동일하게하여 해상도를 최적화합니다. 1 % 저항은 최대 5 비트의 단조 래더 를 구축 할 수있을만큼 정밀 합니다.


도! 나는 나무의 숲을 보지 못했다. 나는 그 1.1V에 너무 고착되었습니다 ... 많은 감사합니다! 나는 그것을 시도 할 것이다.
KarlKarlsom 2016 년

1
그것을 테스트하고 작동합니다. 큰!
KarlKarlsom

VCC를 AREF로 사용하고 R7을위한 220k 저항으로 테스트했습니다. 나중에 100k, 220k R-2R 사다리를 시도하고 시뮬레이션하여 더 나은 결과를 제공하는지 확인할 수 있습니다. 다시 감사합니다!
KarlKarlsom

3

비슷한 문제를 한 번 해결해야했습니다. arduino의 4 개의 버튼을 하나의 아날로그 핀에 연결해야했지만 동시 프레스 (모든 조합)를 인식해야했습니다. 나는 당신과 동일한 회로를 생각해 낸 다음 가능한 모든 저항 값 조합을 검색하는 프로그램을 작성하여 버튼을 누를 때의 최종 값이 가능한 한 멀리 떨어져 있습니다. 뭔지 맞춰봐? 우리는 망쳐 놓을 수 없습니다. 그게 다야, 좋은 하루 보내세요.

스위치의 최적 저항 값은 R, 2R, 4R, 8R에 가깝고 분배기의 하단에는 R 값이 있습니다. 회로는 이미 최적 값에 가깝습니다 .R7을 10k로 바꾸면됩니다. 저항기.

그러나 좋은 소식이 있습니다. 주소를 설정하기 만하면되기 때문에 (장치가 실행 중일 때는 스위치를 작동하지 않습니다) 대신 SPDT 스위치와 R2R 래더 를 사용하는 것이 좋습니다 .


왜 할 수 없었습니까? 스위치를 (R, 2R, 4R, 8R) 저항에 연결하면 어떻게됩니까? 어떤 조합이 효과가 없었습니까?
Dmitry Grigoryev

그런데 R-2R 사다리는 훌륭한 제안입니다!
Dmitry Grigoryev

+ Dmitry I는 동일한 출력 전압이 너무 가까워 신뢰성있게 구별 할 수 없음을 의미했습니다.
Cano64
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.