Выбор адреса 4-битной шины через аналоговый вход: симуляция Монте-Карло показывает перекрывающиеся значения адреса


16

Я разработал небольшую сенсорную плату для моей магистерской работы с микроконтроллером ATtiny44 . Мне нужно около 200 таких плат для моего приложения, и 16 всегда локально подключены к плате контроллера. Вся сеть выглядит так:

Введите описание изображения здесь

Для связи между контроллером и сенсорными платами я написал собственную 1-контактную шину (на основе синхронизации). Единственная проблема заключается в том, что сенсорная плата должна иметь адрес, чтобы знать ее местоположение в сети, когда я отправляю свои данные на плату контроллера.

Поскольку на ATtiny остался только 1 контакт, я разработал схему ЦАП с перемычкой, которая должна генерировать аналоговое напряжение на основе установки четырех перемычек. Поскольку схема датчика использует значения (47, 470, 1k, 3k, 4k7, 10k, 100k и 220k), и я хотел оптимизировать работу, я использовал следующие значения для ЦАП (в основном 100k, 50k, 20k и 10k ). Что должно дать мне хорошее значение между 0 В и 760 мВ в зависимости от положения перемычки. Именно то, что мне нужно было прочитать как аналоговое напряжение с внутренним эталоном 1.1 В ATtiny. При запуске ATtiny считывает это напряжение и должно знать его положение.

схематический

смоделировать эту схему - схема, созданная с использованием CircuitLab

В теории это работает нормально. Я даже сделал анализ Монте-Карло в LTspice, чтобы подтвердить, что я не получаю перекрывающихся областей, принимая во внимание допуск резисторов (все они 1% BTW). Ниже вы можете найти фотографии этого анализа.

Введите описание изображения здесь Введите описание изображения здесь

Теперь я создал несколько (к счастью, не 200) этих плат, но некоторые из них не смогли получить правильные показания по их адресу (особенно в регионах с более высокими адресами, где все допуски вступают в действие сразу). Я измерил все возможные решения и наконец выяснил свою проблему. Мой первоначальный анализ не включал допуск напряжения питания 5 В, которое локально генерируется из 12 В с MC7805 на каждой плате контроллера. Согласно спецификации, MC7805 имеет выходное напряжение от 4,8 до 5,2 В.

После того, как я понял это, я изменил анализ Монте-Карло. Теперь это выглядит так:

Введите описание изображения здесь Введите описание изображения здесь

Как вы можете видеть, есть хорошие области перекрытия, где я не могу точно сказать, что это напряжение может означать только этот адрес. В основном все адреса начинаются с no. 8 может получить ложное чтение (с более высокими возможностями для ложных чтений для более высоких адресов).

Я не хотел бы добавлять значения резисторов, отличные от тех, которые уже использовались на плате (что касается тезиса, который я хочу оптимизировать для производства).

Я бы не хотел , чтобы добавить источник опорного напряжения (например, диод Зенера) , чтобы питать сеть DAC резистора.

Я больше не могу изменять плату контроллера (и использую там более точный регулятор напряжения).

Я все еще могу изменить дизайн / схему печатной платы сенсорной платы!

Как я могу быть уверен, что всегда получаю правильные показания по адресу (либо по программе, либо путем изменения схемы)?


3
+1 Хороший вопрос. Можете ли вы предоставить где-нибудь последний asc-файл LTspice в папке для вставки? Таким образом, мы можем проверить другие комбинации?
Дим

2
Отличный вопрос, хорошая работа по выяснению, что на самом деле вызвало это, прежде чем просить руководство здесь. Теперь вопрос и ответ - хорошее чтение для всех, кто проходит мимо, а не только вы :-)
Mast

Ответы:


19

Согласно вашему моделированию, ваша схема адресации работает нормально до тех пор, пока учитываются только неопределенности в значениях резисторов. Неопределенность напряжения делает его неисправным.

Мой совет состоит в том, чтобы отменить колебания на VCC, используя его в качестве ссылки на АЦП. Вы можете сделать это, запрограммировав REFSбиты в ADMUXрегистре, как объяснено в таблице данных :

введите описание изображения здесь

После перехода к VCC в качестве опорного напряжения для АЦП, то не будет измерять напряжение больше, но соотношение между значениями резисторов, а те, являются точными до 1%. Никаких изменений в схеме не требуется (хотя вы можете увеличить значение R7, чтобы ваши измерения находились в середине диапазона преобразования АЦП), необходимо обновить только встроенное программное обеспечение Attiny.

Если вы все еще хотите переделать сенсорную плату, вы можете заменить свою схему лестницей R-2R, как предложил Cano64:

схематический

смоделировать эту схему - схема, созданная с использованием CircuitLab

Это оптимизирует разрешение, сделав все шаги в лестнице равными. Резисторы 1% достаточно точны для построения монотонных лестниц длиной до 5 бит.


Doh! Я не видел forrest для деревьев. Я был так зациклен на этом 1.1V ... Большое спасибо! Я попробую это.
КарлКарлсом

1
Протестировал и все работает. Большой!
КарлКарлсом

Я протестировал его с VCC в качестве AREF и резистором 220К для R7. Позже я мог бы попытаться смоделировать 100-килограммовую лестницу R-2R и посмотреть ее, даст ли я еще лучшие результаты. Еще раз спасибо!
КарлКарлсом

3

Мне пришлось один раз решить подобную проблему. Мне нужно было подключить 4 кнопки к одному аналоговому выводу на Arduino, однако мне нужно было распознавать одновременные нажатия (все комбинации). Я придумал ту же схему, что и вы, затем написал программу для поиска всех возможных комбинаций значений резисторов, чтобы окончательные значения при нажатии кнопок были как можно дальше друг от друга. Угадай, что? Мы облажались, это невозможно сделать. Вот и все, хорошего дня.

Я узнал, что оптимальные значения резисторов для переключателей близки к R, 2R, 4R, 8R, а нижняя часть делителя имеет значение R. Ваша схема уже близка к оптимальной, вам просто нужно заменить R7 на 10 кОм. резистор.

Но есть и хорошие новости для вас. Поскольку вам просто нужно установить адрес (вы не будете управлять коммутатором во время работы устройства), я рекомендую вместо этого использовать коммутаторы SPDT и лестницу R2R .


Почему это не могло быть сделано? Что произошло, когда вы подключили свои переключатели к резисторам (R, 2R, 4R, 8R)? Какие комбинации не сработали?
Дмитрий Григорьев

Кстати, лестница R-2R - отличное предложение!
Дмитрий Григорьев

+ Дмитрий Я имел ввиду одно и то же выходное напряжение, слишком близкое, чтобы его можно было надежно различить.
Cano64
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.