Попробовал ADG506A в действии

Nov 29, 2012 17:02

Сегодня наконец-то у меня появилось время, чтобы проверить, как же работает аналоговый коммутатор. А работает он превосходно.

Итак, я взял макетку, воткнул в нее ADG506A и соединил все аналоговые входы мелкоомными (200..900 Ом) резисторами. К S1 подключил "землю", а к S16 - +3.3В с макетки STM32. Запитал микросхему я старым БП от внешнего HDD (он дает два напряжения: 5В и 12В с общей землей).
Подключил, проверил - работает! Правда, заработало не сразу: после первого запуска все каналы, кроме первого, показывали 0xfff, а первый показывал 0. Сразу понятно, что между первым и вторым каналом плохой контакт у резистора на макетке. Резистор воткнул посильней - пошло напряжение.
Однако, мне не понравился предыдущий алгоритм работы, когда нагрузка опрашивалась постоянно, поэтому опрос всего аналогового хозяйства я повесил на функцию выдачи измеренных значений. Теперь нагрузка будет подсоединяться к АЦП только во время измерения по запросу. Чуть подправленный вариант я положил туда же, все равно исправления минимальны.
Стабильность АЦП получилась уж очень хреновенькая: значения плавают иной раз аж на 20 единиц!
Вот, например, такие получаются показания:

Temperature 0x00 = 0x00 0x00 Temperature 0x01 = 0x00 0x84 Temperature 0x02 = 0x00 0xaf Temperature 0x03 = 0x01 0xdb Temperature 0x04 = 0x03 0x10 Temperature 0x05 = 0x03 0xe4 Temperature 0x06 = 0x05 0xca Temperature 0x07 = 0x06 0x9b Temperature 0x08 = 0x07 0x4e Temperature 0x09 = 0x08 0xd6 Temperature 0x0a = 0x0a 0x04 Temperature 0x0b = 0x0a 0xb4 Temperature 0x0c = 0x0b 0xfc Temperature 0x0d = 0x0d 0xe0 Temperature 0x0e = 0x0e 0xb7 Temperature 0x0f = 0x0f 0xff
А при следующем опросе - такие:

Temperature 0x00 = 0x00 0x00 Temperature 0x01 = 0x00 0x7f Temperature 0x02 = 0x00 0xaf Temperature 0x03 = 0x01 0xdf Temperature 0x04 = 0x03 0x0f Temperature 0x05 = 0x03 0xe4 Temperature 0x06 = 0x05 0xcc Temperature 0x07 = 0x06 0x9d Temperature 0x08 = 0x07 0x5a Temperature 0x09 = 0x08 0xd6 Temperature 0x0a = 0x0a 0x01 Temperature 0x0b = 0x0a 0xb5 Temperature 0x0c = 0x0b 0xfc Temperature 0x0d = 0x0e 0x09 Temperature 0x0e = 0x0e 0xb0 Temperature 0x0f = 0x0f 0xec
В общем, надо будет либо попробовать добавить стабильный источник опорного напряжения (да и измеряемую цепь питать оттуда же), либо вообще использовать внешний АЦП.
Кстати, глянул я, какие же значения сопротивления у платиновых элементов: порядка 20..50 Ом! Т.е. придется все-таки мне еще усилитель городить. Как говорится, как она ни плакала, а все равно померла!

Вот, кстати, даже видео снял на веб-камеру (качество, правда, получилось жуткое: вебка-то дешевенькая).

железяки, stm32

Previous post Next post
Up