Если я использую схему смещения для сигнала, поступающего на аналоговый вход, повлияет ли это на работу АЦП?
Если у меня есть один сигнал переменного тока частотой 100 Гц, смещенный двумя резисторами 1 МОм (как показано на схеме ниже), а затем вывод на аналоговый входной контакт Arduino UNO с частотой дискретизации UNO около 1 кГц с использованием задержек, будет ли есть ли проблемы с результатом ADC?
(Источник схемы: http://tinyurl.com/ycprqsdx)
В спецификации Atmega328P (микропроцессор UNO) рекомендуется выходное сопротивление не более 10 кОм, как показано ниже. Если бы я использовал пару резисторов 1 МОм в качестве цепи смещения, а затем намеренно замедлял выборку с задержками (т. е. в цикле выполнял аналоговое чтение, затем задержку, затем аналоговое чтение и т. д.), было бы все еще в порядке?
@plu, 👍0
2 ответа
Лучший ответ:
Это даст плохие результаты. Вы не замедляете выборку, вы берете пробы с более длительным интервалом — совсем другое дело.
Arduino использует АЦП последовательного приближения. Он использует часы для управления выходом ЦАП и сравнения этого напряжения с входным напряжением, хранящимся в конденсаторе S&H.
Чтобы конденсатор S&H зарядился до нужного уровня, он должен быть подключен к контакту GPIO достаточно долго. Поскольку есть только один АЦП и 6 аналоговых входных контактов, сначала он проходит через мультиплексор.
Задержка, которую необходимо увеличить, — это задержка между подключением вывода к конденсатору и подключением конденсатора к АЦП. Это называется время приобретения.
Функция analogRead()
последовательно выполняет следующие основные операции:
- Подключите SHC к контакту GPIO через мультиплексор.
- Подождите
- Отключите SHC от GPIO и подключите его к АЦП.
- Синхронизируйте каждый бит от компаратора до регистров результата.
Задержка между каждым AnalogRead просто задерживает подключение SHC к контакту GPIO, а не увеличивает время его подключения к контакту GPIO.
Вам придется манипулировать регистрами АЦП, чтобы выполнить собственную синхронизацию выборки. Или просто уменьшите выходное сопротивление.
Добавление емкости ко входу поможет компенсировать высокое сопротивление, но также образует фильтр нижних частот. Для Arduino с частотой 16 МГц тактовая частота АЦП установлена на 16 МГц/128 = 125 кГц. Каждое преобразование в AVR занимает 13 тактов АЦП, поэтому 125 кГц / 13 = 9615 Гц. Это максимально возможная частота дискретизации, но фактическая частота дискретизации в вашем приложении зависит от интервала между последовательными вызовами-конверсиями.
- Использование Arduino для записи аналоговых сигналов с помощью SPI ADC + проблема с частотой дискретизации
- Регистр ADCH Arduino Uno завис на значении 255 при чтении из ISR
- Как прочитать значение АЦП без общего заземления? (Возможно или нет!)
- Потенциометр отображает только аналоговое значение напряжения 1023 в proteus
- Изменение значения АЦП после изменения значения Timer1 в программе
- Соединение АЦП при создании миди-контроллера (множество потенциометров)
- Максимальная частота, которую можно преобразовать с помощью Arduino Uno?
- Является ли определение функции улучшением скорости а не вычислением среднего значения для каждого аналогового входа отдельно
Спасибо за разъяснение между интервалом отбора проб и отбором проб с более длительным интервалом . Думаю, я также могу уменьшить выходное сопротивление с помощью буфера на основе операционного усилителя., @plu
Да, вы могли бы. Или заменить резисторы 1МОм на 10кОм., @Majenko
Меня беспокоит то, что 100 нФ с 10 кОм эффективно отключат фильтр верхних частот на частоте ~ 159 Гц; для моего приложения мне также нужны эти низкочастотные компоненты., @plu
Увеличить конденсатор, чтобы компенсировать тогда?, @Majenko
Правильно, понял. Так что мои предыдущие 100 нФ с 1 МОм можно заменить на 10 мкФ с 10 кОм., @plu
Ага. T = RC, поэтому увеличьте C и уменьшите R, и T останется прежним., @Majenko