Я разработал небольшую сенсорную плату для моей магистерской работы с микроконтроллером 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 резистора.
Я больше не могу изменять плату контроллера (и использую там более точный регулятор напряжения).
Я все еще могу изменить дизайн / схему печатной платы сенсорной платы!
Как я могу быть уверен, что всегда получаю правильные показания по адресу (либо по программе, либо путем изменения схемы)?
источник
Ответы:
Согласно вашему моделированию, ваша схема адресации работает нормально до тех пор, пока учитываются только неопределенности в значениях резисторов. Неопределенность напряжения делает его неисправным.
Мой совет состоит в том, чтобы отменить колебания на VCC, используя его в качестве ссылки на АЦП. Вы можете сделать это, запрограммировав
REFS
биты вADMUX
регистре, как объяснено в таблице данных :После перехода к VCC в качестве опорного напряжения для АЦП, то не будет измерять напряжение больше, но соотношение между значениями резисторов, а те, являются точными до 1%. Никаких изменений в схеме не требуется (хотя вы можете увеличить значение R7, чтобы ваши измерения находились в середине диапазона преобразования АЦП), необходимо обновить только встроенное программное обеспечение Attiny.
Если вы все еще хотите переделать сенсорную плату, вы можете заменить свою схему лестницей R-2R, как предложил Cano64:
смоделировать эту схему - схема, созданная с использованием CircuitLab
Это оптимизирует разрешение, сделав все шаги в лестнице равными. Резисторы 1% достаточно точны для построения монотонных лестниц длиной до 5 бит.
источник
Мне пришлось один раз решить подобную проблему. Мне нужно было подключить 4 кнопки к одному аналоговому выводу на Arduino, однако мне нужно было распознавать одновременные нажатия (все комбинации). Я придумал ту же схему, что и вы, затем написал программу для поиска всех возможных комбинаций значений резисторов, чтобы окончательные значения при нажатии кнопок были как можно дальше друг от друга. Угадай, что? Мы облажались, это невозможно сделать. Вот и все, хорошего дня.
Я узнал, что оптимальные значения резисторов для переключателей близки к R, 2R, 4R, 8R, а нижняя часть делителя имеет значение R. Ваша схема уже близка к оптимальной, вам просто нужно заменить R7 на 10 кОм. резистор.
Но есть и хорошие новости для вас. Поскольку вам просто нужно установить адрес (вы не будете управлять коммутатором во время работы устройства), я рекомендую вместо этого использовать коммутаторы SPDT и лестницу R2R .
источник