Доброго времени суток.
Сижу разбираюсь с ацп МК Atxmega128a1.
Опишу суть проекта:
1)Две силовые установки(далее СУ), в них по 1 ПНЧ(преобраз напр.-частота) к которому подключен оптопередатчик.
2)2 оптоприемника подключенные к ногам МК (портА)
МК должен считать количество импульсов приходящих с СУ и сравнивать их между собой. В случае отличия одно от другого(на 20%) выдавать индикацию.
СУ к сожалению находится далеко от моего местоположения.
Но у меня есть оптоприемник и оптопередатчик.
Опыты показали что оптоприемник без сигнала выдает порядка 0.25В.
При подаче питания на оптопередатчик с оптоприемника выходит ~1.6, 1.7 В
Учитывая что питание МК 3.3В(платы готовы), то этих диапазонов не достаточно чтобы увидеть на ноге 1 или 0.
Т.О. нужно использовать АЦП.
Решил попробовать максимально разобраться с АЦП.
Первый шаг:
Нашел atmel examle adc 1(в составе AVRStudio).
Смысл example заключается в настройке ADCA на режим работы internal_input, и измерение TEMPSENSE. (12 бит)
На порт d повесил USARTD0 в режиме rs232.
Измерения и вывод на rs232 выполены циклом.
Значения идут 39, 38 при комнатной температуре 24.
(формула рассчета
t = (result_adc*35
/(калибровочное значение при 35
- 273
)
При нагревании увеличивается и наоборот.
Что меня смущает - значение скачет в интервалах 1-2 градуса и значения температур ~40 C(многовато)
Может ктонибудь мерял какие значения идут?
Вторым этапом нарыл тут на форуме листинг АЦП с ноги МК (в режиме SINGLEENDED - Внешний положительный (несимметричный) входной сигнал)
Результат АЦП 12 бит, опорное напряжение внутренний 1В.
Результат измерения вывода оптоприемника без сигнала (по вольтметру 0.246) скачет от 0.3 до 0.5 (проскакивают иногда и 0.1 и 0.6).
Думал это связано с помехами - подключил всё через аккумулятор 3В(убрать 50 герц от 220 сети) - результат тот же.
При подаче 1.5В - как пологается уходит в максимальное значение 1В(без преобразования 4095)
При подаче GND 0.1 - 0.2В (без преобразования ~100-200)
Не могу понять неужели такая низкая точность АЦП или мне рыть гдето в неправильном написании кода???