Странно работает АЦП (...или питание)

Dimanjy
Dimanjy аватар
Offline
Зарегистрирован: 18.11.2013

Здравствуйте! Опять у меня всё странно работает...

Отлаживаюсь я, питаясь от USB. Решил аппаратно приблизиться к готовому устройству, и заменил USB-питание на DC-DC преобразователь (стандартный модуль-понижайка на LM2596 HW-411). И тут началась дичь в АЦП!

Мультиметром меряю на аналоговом входе 0.23 В, а на экран Ардуинка выводит 0.180-0.198 В и всё скачет в этих пределах.

Устанавливаю параллельно питанию электролит на 1000 мкФ. В результате мой показометр устаканивается на значении в 0.196-0.198 В и не скачет. Но это всё равно сильно отличается от 0.23 В, которые стабильно при этом кажет мультиметр. Он показывает 0.23 и от USB, и от DC-DC без кондёра, и с кондёром. Т.е. на вход я ей пихаю "стабильные" 0.23 В. При питании от USB показания были ближе всего к мультиметровым и составляли 0.212+/- В.

Интересно то, что опорное для АЦП я выбираю INTERNAL, который при питании от USB на ARef выдаёт 1.07 В, а при питании от DC-DC поднимается до 1.10 В.

В программу я всегда руками заношу показания ARef, и исходя из него у меня уже расчитывается измеренное напряжение:

#define ADC_REF_VOLTAGE   1.07   // Заношу сюда ARef

//...

// Преобразуем в вольты
float voltage = ADC_REF_VOLTAGE / 1023.0 * (float) ADC;

Делаю всё на минимальных клонах ардуинки, поэтому никаких Vin у меня нету, а есть просто Vcc.

Явно влияет качество питания. Подскажите, как правильно питаться, чтобы АЦП работал стабильно?

А, забыл добавить - усредняю показания скользящим средним с размером окна аж в 32 значения. И всё равно свистопляска...

rkit
Offline
Зарегистрирован: 23.11.2016

Сопротивление сигнальных линий

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Плавающий внутренний опорник - это похоже на бред ! Если это реально так, то надо делать опорным внешнее стабилизированное напряжение.

SLKH
Offline
Зарегистрирован: 17.08.2015

#define ADC_REF_VOLTAGE   1.19

при поверенном вольтметре.

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

SLKH не должно напряжение это меняться от способа запитки чипа ...

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Скорее всего, пила по питанию

SLKH
Offline
Зарегистрирован: 17.08.2015

Komandir пишет:

SLKH не должно напряжение это меняться от способа запитки чипа ...

Какое напряжение? откуда ТС взял константы 1.1.и 1.07?

Есть у мя смутное подозрение... 

SLKH
Offline
Зарегистрирован: 17.08.2015

DetSimen пишет:

Скорее всего, пила по питанию

мобыть. смотреть надо, а осциллографа нет.

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

Dimanjy пишет:

Устанавливаю параллельно питанию электролит на 1000 мкФ.

//...

  И всё равно свистопляска...

Попробуйте LOW ESR. Можно танталовый. Ещё керамический 0.33-1uF параллельно.

Или заменить БП.

 

Dimanjy
Dimanjy аватар
Offline
Зарегистрирован: 18.11.2013

DetSimen пишет:

Скорее всего, пила по питанию

Вот замерил на выходе ARef...

Это то, что удалось разглядеть при питании от USB

Далее то же самое, но при питании от DC-DC

Видно, что помеха примерно одинаковая в обоих случаях. Только DC-DC питание уровнем немного повыше от USB-шного.

Но это уж совсем что-то высокочастотное. Более низкочастотной ярко выраженной пилы мне высмотреть пока не удалось. Были "горбики" при питании от DC-DC, но я их сгладил конденсатором на 1000 мкФ, о чём написал в самом первом посте.

Вот, на периоде в 500us и питании от USB (когда всё нормально с АЦП):

А это при питании от DC-DC на том же периоде:

Ну, т.е. принципиальных отличий нет, кроме более высокого уровня от DC-DC, при котором на ARef показывает немного больше 1.1 В вольтметром и среднее на осциллографе тоже видно - 1.132.

Эти значения я и заношу в программу для расчёта фактического измерения. Даже откинул два младших бита в ADC, как тут на форуме советовали... Но никак не могу добиться хотя бы мультиметровых показаний на входе АЦП :(

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Хреновенько какта.  Керамику ставь

Dimanjy
Dimanjy аватар
Offline
Зарегистрирован: 18.11.2013

SLKH пишет:

Komandir пишет:

SLKH не должно напряжение это меняться от способа запитки чипа ...

Какое напряжение? откуда ТС взял константы 1.1.и 1.07?

Я эти значения измерил на пине ARef при настройке АЦП на INTERNAL.

Первое при питании от DC-DC, второе - от USB. Эти же значение видны на осциллограмме выше - это V среднее.

Dimanjy
Dimanjy аватар
Offline
Зарегистрирован: 18.11.2013

DetSimen пишет:

Хреновенько какта.  Керамику ставь

Но ведь от USB точно также всё хреновенько! Отчего при USB-питании показания "приемлемые", а при смене на DC-DC такое резкое падение показаний при несущественных отличиях? Я суть проблемы понять не могу...

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ну не должно быть пилы на AREF, тем более 5 МГц, кто-то у тебя в питании звенит.  Обкалывай всё керамикой

Dimanjy
Dimanjy аватар
Offline
Зарегистрирован: 18.11.2013

Ещё наблюдения:

Отключил я DC-DC и запитал напрямую от лабораторного трансформаторного блока питания Mastech. При этом потребление на показометре лабораторника выросло до 110 мА (у меня к ардуинке подключен экран 1602 с подсветкой). Когда подключение было Лабораторник->DC-DC->Ардуинка, потребление показывал всего 50-60 мА. Т.е. DC-DC преобразователь явно влияет и на Ардуинку и на показометр лабораторника (заставляет его врать).

При питании от лабораторника опорное напряжение на Aref стало уже 1.11 В, но замеры на аналоговом входе Ардуинкой и мультиметром всё равно отличаются: 0.237 на мультиметре (стоят, как вкопанные), 0.19-0.20 на Ардуинке (плавают).

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Dimanjy пишет:

Но никак не могу добиться хотя бы мультиметровых показаний на входе АЦП :(

Обычно мультиметры не питают от DC-DC, и там проблемы грязного питания в принципе нет. А там где питают, то используют специальную разводку преобразователя, экранируют, ставят на фильтрацию питания дополнительные активные фильтры. Самое простое решение всех проблем -батарейка/аккум.

SLKH
Offline
Зарегистрирован: 17.08.2015

Dimanjy пишет:

SLKH пишет:

Komandir пишет:

SLKH не должно напряжение это меняться от способа запитки чипа ...

Какое напряжение? откуда ТС взял константы 1.1.и 1.07?

Я эти значения измерил на пине ARef при настройке АЦП на INTERNAL.

Я так и думал.

Я полагаю, мы про 328 камень? Нет у него выхода AREF, есть вход с таким погонялом. Используется только в режиме EXTERNAL. Повесь на него конденсатор 0.1 и оставь в покое, замерять на нем напряжение не нужно.

Dimanjy
Dimanjy аватар
Offline
Зарегистрирован: 18.11.2013

SLKH пишет:

Dimanjy пишет:

SLKH пишет:

Komandir пишет:

SLKH не должно напряжение это меняться от способа запитки чипа ...

Какое напряжение? откуда ТС взял константы 1.1.и 1.07?

Я эти значения измерил на пине ARef при настройке АЦП на INTERNAL.

Я так и думал.

Я полагаю, мы про 328 камень? Нет у него выхода AREF, есть вход с таким погонялом. Используется только в режиме EXTERNAL. Повесь на него конденсатор 0.1 и оставь в покое, замерять на нем напряжение не нужно.

Нет, мы не только про 328, но и про 168 и просто про 8. У них у всех есть нога ARef, и я раньше так и думал, что это вход для внешнего опорного, но дело в том, что при выставлении внутреннего опорного на этой ноге волшебным образом появляется примерно 1.1 Вольта. Отсюда я и сделал вывод, что он превращается в выход для контроля внутреннего опорного.

До этого я использовал ARef именно как вход и подавал на него 5.03 В со стабилизатора 7805, но из-за схематического решения с датчиком температуры перешёл на внутреннее опорное, чтобы снизить требуемый коэффициент усиления операционника (опять же, чтобы шумов меньше он производил).

Даже если эта нога и не пригодна для проверки внутреннего опорного, то картины это всё-равно не меняет, потому как в настройках я указываю и 1.115 и 1.09 - это же не может существенно влиять на АЦП. Факт в том, что измеряемое значение ПРОСЕДАЕТ при изменении схемы питания Ардуинки, а эти коэффициенты мало влияют на итоговый расчет. Даже если я поставлю ровно 1.1 -  проседание всё-равно никуда не девается.

 

SLKH
Offline
Зарегистрирован: 17.08.2015

Dimanjy пишет:

о не меняет, потому как в настройках я указываю и 1.115 и 1.09 - это же не может существенно влиять на АЦП. Факт в том, что измеряемое значение ПРОСЕДАЕТ при изменении схемы питания Ардуинки, а эти коэффициенты мало влияют на итоговый расчет. Даже если я поставлю ровно 1.1 -  проседание всё-равно никуда не девается.

 

Вот это поясни: "В программу я всегда руками заношу показания ARef"

Предложение: шунтируешь AREF конденсатором.

Измеряешь при "#define ADC_REF_VOLTAGE 1.19" с переключением питания без изменения формулы.

Dimanjy
Dimanjy аватар
Offline
Зарегистрирован: 18.11.2013

SLKH пишет:

Предложение: шунтируешь AREF конденсатором.

Измеряешь при "#define ADC_REF_VOLTAGE 1.19" с переключением питания без изменения формулы.

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

Попробую сделать, как Вы говорите, но константу эту вообще использовать не буду, а буду смотреть просадку абсолютных значений с АЦП, тех, которые от 0 до 1023.

Dimanjy
Dimanjy аватар
Offline
Зарегистрирован: 18.11.2013

SLKH пишет:

Предложение: шунтируешь AREF конденсатором.

Измеряешь при "#define ADC_REF_VOLTAGE 1.19" с переключением питания без изменения формулы.

Ну вот, зашунтировал ARef на землю через 0.1 мкФ.

На аналоговом входе 0.046 В по мультиметру.

- При питании от USB АЦП - выдаёт 32-34

- При питании от лабораторного БП +5.0-5.1 В - выдаёт вообще 0!

 

rkit
Offline
Зарегистрирован: 23.11.2016

Традиционный повтор для недоходчивых

rkit пишет:

Сопротивление сигнальных линий

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

SLKH пишет:

Я полагаю, мы про 328 камень? Нет у него выхода AREF, есть вход с таким погонялом. Используется только в режиме EXTERNAL. Повесь на него конденсатор 0.1 и оставь в покое, замерять на нем напряжение не нужно.

Почему? В даташите написано: "AVCC or an internal 1.1V reference voltage may be connected to the AREF pin by writing to the REFSn bits in the ADMUX Register".

Т.е. соединяешь AREF с 1.1В и измеряешь сколько там на самом деле, т.к. пот тому же даташиту там может быть от 1В до 1,2В. Многие так делают.

Dimanjy
Dimanjy аватар
Offline
Зарегистрирован: 18.11.2013

rkit пишет:

Традиционный повтор для недоходчивых

rkit пишет:

Сопротивление сигнальных линий

Ну и в третий раз, только по-русски и доходчиво, а-то как в анекдоте:

- Петька, приборы!

- 20!

- Что 20?

- А что - приборы?

ЗЫ: Измеряю входное напряжение прямо на аналоговом пине. Ближе уже только ножка камня.

Dimanjy
Dimanjy аватар
Offline
Зарегистрирован: 18.11.2013

ЕвгенийП пишет:

SLKH пишет:

Я полагаю, мы про 328 камень? Нет у него выхода AREF, есть вход с таким погонялом. Используется только в режиме EXTERNAL. Повесь на него конденсатор 0.1 и оставь в покое, замерять на нем напряжение не нужно.

Почему? В даташите написано: "AVCC or an internal 1.1V reference voltage may be connected to the AREF pin by writing to the REFSn bits in the ADMUX Register".

Т.е. соединяешь AREF с 1.1В и измеряешь сколько там на самом деле, т.к. пот тому же даташиту там может быть от 1В до 1,2В. Многие так делают.

И я говорю - не спроста же там 1.1 В появляется... Вот и ещё одно подтверждение от грамотного человека, кроме схемы в интернетах.

Dimanjy
Dimanjy аватар
Offline
Зарегистрирован: 18.11.2013

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

Питаю от USB - АЦП выдаёт 200-202

Питаю от DC-DC - АЦП выдаёт 195-197

USB питает +4.96 В

DC-DC настроен на +4.96 В

Капец какой-то...

 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Я конечно не спец, но подключая через usb, учитывать надо usb uart преобразователь, так что эксперимент - >"не зачёт". Если уж хочется чистого опыта, берете чистый МК с минимальной обвязкой и тогда уже замеряете все параметры.

Dimanjy
Dimanjy аватар
Offline
Зарегистрирован: 18.11.2013

andycat пишет:
Я конечно не спец, но подключая через usb, учитывать надо usb uart преобразователь, так что эксперимент - >"не зачёт". Если уж хочется чистого опыта, берете чистый МК с минимальной обвязкой и тогда уже замеряете все параметры.

Да, не спец :) Ещё и читать не умеете! Написал же в первом же сообщении, что делаю всё на минимальных клонах ардуинки - это и есть чистый МК с минимальной обвязкой.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Не) чистый МК это не минимальный клон ардуины

sadman41
Offline
Зарегистрирован: 19.10.2016

Дак котлет и мух разделять принято.

Отключили ___всю___ переферию, подключили к USB, померяли AREF. Дали на VIN от кроны напругу, померяли. Затем туда же DCDC, померяли.
Только после этого стоит делать выводы.

Dimanjy
Dimanjy аватар
Offline
Зарегистрирован: 18.11.2013

sadman41 пишет:
Дак котлет и мух разделять принято. Отключили ___всю___ переферию, подключили к USB, померяли AREF. Дали на VIN от кроны напругу, померяли. Затем туда же DCDC, померяли. Только после этого стоит делать выводы.

Эээ... Пост #25 не читали?

Dimanjy
Dimanjy аватар
Offline
Зарегистрирован: 18.11.2013

andycat пишет:
Не) чистый МК это не минимальный клон ардуины

Ардуино - это среда разработки + бутлоадер. Средой Ардуино предусмотрена прошивка внешними программаторами через ICSP. Так что минимальная Ардуина - это чистый МК + 1 резистор на RESET + 1 блокировочный кондёр.

rkit
Offline
Зарегистрирован: 23.11.2016

Dimanjy пишет:

Ну и в третий раз, только по-русски и доходчиво

Тебе, тупню, нужно объяснить, что такое сопротивление и как оно взаимодействует с напряжением? Составь монтажную схему, и отметь на ней __ВСЕ__ сопротивления и __ВСЕ__ токи.

Dimanjy
Dimanjy аватар
Offline
Зарегистрирован: 18.11.2013

rkit пишет:

Тебе, тупню, нужно объяснить...

Ты забанен, хам трамвайный. Можешь мне больше не писать ;)

rkit
Offline
Зарегистрирован: 23.11.2016

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