Всем доброго дня!
Тема открыта для обсуждения применения АЦП ADS1115 в радиолюбительских конструкциях. Китайцы выручают и продают уже готовые платы. Вот и я прикупил уже вторую такую. Первую я использовал в конструкции "Самый лучший измеритель емкости аккумуляторов". Автор Starichok51. Потом посмотрел на нее даташит и решил прикупить второй модуль для изучения и практического применения в одной из конструкций. В программировании я новичок, пишу для МК AVR в AtmelStudio.
Собственно у меня вопрос к тем, кто уже его использовал. Полностью я даташит не осилил, уж больно он непонятный для меня. Для тех, кто начинал программировать и нет соответствующего образования, меня поймут. К примеру даташиты на те же DS18B20, DS1307 по сравнению с даташитом на BMP280 просто детская литература и легко понятны, что и как реализовать. Так вот для меня даташит на ADS1115 оказался еще сложнее. В итоге я помучался и полез искать готовую библиотеку ads1115-driver-master. Я ее адаптировал для себя, заменив работу софтовой шины i2c на twi для ATmega8.
Для инициализации я использовал опорное FS=0,512 мВ (усилитель PGA 8x) и измерять собираюсь с точностью до 0,1 мВ . АЦП настроен на одиночное преобразование, частота дискретизации по умолчанию 128 Гц.
Измеряемое напряжение подключаю между А1 и А3 (А3 соединен с общим проводом платы модуля ADS1115), соответствующим образом сконфигурирован MUX = 010 (AINp=AIN1 и AINn=AIN3). Код работает, напряжение в мВ я вывожу на индикатор. Но есть непонятная странность в работе АЦП и похоже я что-то не учел. Я ожидал ошибок на нижнем пределе измерений, а получил ошибки на верхнем. Входное напряжение на дифференциальных входах контролирую мультиметром. Смог выставить 0,1 мВ от собранного ИОН на TL431 с делителем на 10. Мультиметр показывает это значение и АЦП его выдает. Попробовал выставлять 1 и 10 мВ, тоже без проблем. Показания в младшем разряде довольно устойчивые, не смотря на то, что собрано все на проводах на макетке и не используется усреднение. Но при подаче на вход напряжения 100 мВ АЦП стал врать на 0,5-0,6 мВ в меньшую сторону. Подал 200 мВ, ошибка возросла до 2 мВ в меньшую сторону.
Дифференциальное включение применил потому, что при несимметричном входе я том же значении FS=0,512 мВ я не увидел включения усилителя и АЦП не измерял нормально уже меньше 5-6 мВ. Пробовал найти этот момент в даташите, но не хватает знаний как по электронике, так и тупо знаний английского.
Помогите разобраться, почему возникает ошибки в работе АЦП. Во вложении я приложил исходную библиотеку. Свой код я не привожу, так как не вижу смысла, так как не изменял в исходном ничего касающегося работы с самим АЦП.
Измерял по такой схеме
- Вложения
-
- ads1115-driver-master.zip
- Оригинал драйвера
- (435.79 KiB) Скачиваний: 497