Оглавление:
- Шаг 1. Что такое AD-конвертер?
- Шаг 2. Используемые ресурсы
- Шаг 3: АЦП ESP32
- Шаг 4: Используемая схема
- Шаг 5: Используемый знак
- Шаг 6: данные, полученные с помощью осциллографа
- Шаг 7. Данные, полученные с помощью осциллографа (файл CSV в Excel)
- Шаг 8: данные, полученные АЦП
- Шаг 9: данные, полученные ADC - Excel
- Шаг 10: Сравнение рамп для набора высоты
- Шаг 11: приравнивание количества образцов
- Шаг 12: Заполнение пробелов - линия тренда
- Шаг 13: Заполнение пробелов - полиномиальная кривая 2 степени
- Шаг 14: Заполнение пробелов - оценка функции
- Шаг 15: преобразование напряжения осциллографа в эквивалентное значение для сравнения с АЦП
- Шаг 16: сравнение двух полученных рамп
- Шаг 17: Поведение разницы показаний АЦП (ОШИБКА)
- Шаг 18: поведение разницы при считывании АЦП - поиск корректирующей функции
- Шаг 19: Использование другого программного обеспечения
- Шаг 20: Константы и настройка ()
- Шаг 21: цикл () и функция коррекции
- Шаг 22: Использование функции исправления PolySolve
- Шаг 23: Захват с коррекцией - последовательный порт плоттера
- Шаг 24: вычислительные затраты
- Шаг 25: Тестовый код - Настройка () и запуск цикла ()
- Шаг 26: тестовый код - цикл () и обработка
- Шаг 27: тестовый код - цикл () - результаты
- Шаг 28: Тестовый код - используемые функции
- Шаг 29: файлы
Видео: Знаете ли вы о настройке АЦП ESP32 ?: 29 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:52
Сегодня я собираюсь поговорить о более технической проблеме, но я думаю, что каждый, кто работает с ESP32, должен знать: проблема регулировки чтения АЦП (аналого-цифровой преобразователь). Я считаю это важным, потому что при выполнении «измерения», особенно с помощью прибора с аналоговым выходом, вы должны быть абсолютно уверены в том, что показания выполняются правильно.
Поэтому в сегодняшнем видео мы проведем измерения с использованием «аналого-цифрового преобразователя» ESP32, проследим расхождения преобразования и применим метод настройки / калибровки АЦП.
Шаг 1. Что такое AD-конвертер?
АЦП - это схема, способная переводить аналоговую (непрерывную) величину в цифровые (дискретные) значения. Что это обозначает? Это означает, что в то время как цифровые значения могут принимать только дискретные значения, образованные комбинацией нулей и единиц, аналоговая величина может принимать любое значение в пределах диапазона. Например, если мы измерили напряжение идеального элемента AA, мы могли бы найти любое значение от 0 В до 1,5 В, поскольку это аналоговая величина. Выходное состояние идеальной лампы должно принимать только два состояния (выключено или включено), что является дискретной величиной. Поскольку микроконтроллеры работают с использованием этой дискретной логики, нам нужна схема, способная переводить аналоговую величину в цифровую (или дискретную).
Шаг 2. Используемые ресурсы
• Одна карта Lolin32 Lite v1.0.0
• Осциллограф Tektronix TDS1001C для захвата
• Один USB-кабель для ESP32
• Осциллограф Hantek DSO4102C в качестве генератора сигналов
Шаг 3: АЦП ESP32
Согласно данным Espressif, чипы ESP32 могут иметь разницу +/- 6% от одного чипа к другому в результатах измерений.
Кроме того, преобразование НЕ имеет линейного ответа для каждого доступного диапазона для чтения. Espressif предоставляет метод калибровки и предлагает пользователям использовать другие методы, если они сочтут это необходимым для достижения желаемой точности.
Мы выполним сбор данных, а затем покажем отклики АЦП и пример применения математического процесса для считывания настройки.
Есть несколько (более простых или более сложных) способов выполнить эти исправления. Вам решать, что лучше всего подходит для вашего проекта.
Показанный здесь будет иметь иллюстративную цель и попытаться затронуть интересные моменты, которые можно заметить во время настройки.
Шаг 4: Используемая схема
Я использовал осциллограф с генератором сигналов до 25 МГц, Hantek DSO4102C. Мы сгенерировали волну, которую считывали аналого-цифровой преобразователь ESP и осциллограф. Собранные данные были записаны в CSV и в электронную таблицу, которую я оставлю в конце статьи для загрузки.
Шаг 5: Используемый знак
Мы выбрали низкочастотный трапециевидный сигнал, который позволяет получить доступ к рампам, которые проходят через весь диапазон преобразования. Это позволяет использовать большое количество образцов на этих пандусах.
Шаг 6: данные, полученные с помощью осциллографа
Изображение захвата производилось осциллографом. Данные хранились в файле csv. Обратите внимание на небольшую кривизну на подъеме и спаде сигнала.
Шаг 7. Данные, полученные с помощью осциллографа (файл CSV в Excel)
Здесь у нас есть образцы.
Шаг 8: данные, полученные АЦП
Изменяя скорость передачи последовательного порта, мы можем просматривать данные, захваченные АЦП. Обратите внимание на деформацию трапециевидного сигнала.
Данные, полученные на последовательном плоттере Arduino IDE
Шаг 9: данные, полученные ADC - Excel
Используя более высокую скорость и последовательный терминал, мы можем зафиксировать значения и применить их в Excel для наших сравнений.
Шаг 10: Сравнение рамп для набора высоты
Сравним две аппарели двух зацепов.
Обратите внимание на кривизну на обоих пандусах.
Также обратите внимание, что для одного и того же пилообразного сигнала у нас есть намного больше отсчетов ESP32, чем с осциллографа.
Шаг 11: приравнивание количества образцов
Поскольку ESP32 предоставил большее количество выборок, чем осциллограф, нам необходимо уравнять эти значения, поскольку они будут служить индексом для сравнения двух кривых.
Для этого проведем прямое сравнение.
У нас есть 305 отсчетов для линейного нарастания осциллографа и 2365 отсчетов для линейного нарастания АЦП.
Поскольку линейные изменения имеют один и тот же диапазон, мы можем сказать, что у нас есть примерно 7,75 отсчетов АЦП для каждого осциллографа.
Умножение индекса каждой выборки осциллографа дает ту же кривую, но с индексами, эквивалентными АЦП и перераспределенным данным.
Чтобы заполнить недостающие данные для новых позиций, мы применим кривую, которая статистически соответствует известным данным.
Шаг 12: Заполнение пробелов - линия тренда
Выбрав известные данные (синие точки), щелкнув, а затем щелкнув правой кнопкой, мы выбираем: «Добавить линию тренда…»
В появившемся окне выбираем Тип Полинома (порядка 2 будет достаточно).
Мы также проверили параметры «Просмотр уравнения на диаграмме» и «Отображение значения R-квадрата на диаграмме».
Щелкаем «Закрыть».
Шаг 13: Заполнение пробелов - полиномиальная кривая 2 степени
Excel дает нам две новые части информации; уравнение второго порядка, которое лучше всего соответствует данным, и уравнение R-квадрата, которое количественно оценивает эту адекватность.
Просто помните, что чем ближе к 1, тем правильнее уравнение.
Не будем углубляться в математику, давайте просто воспользуемся ею как инструментом.
Шаг 14: Заполнение пробелов - оценка функции
Давайте заполним пробелы в выборке данными, полученными с помощью уравнения. А затем сравните их по пунктам.
у = -9E-08x2 + 0, 0014x + 0, 1505
R² = 0 9999
Напряжение осциллографа = -9E-08 * index2 + 0, 0014 * index + 0, 1505
Шаг 15: преобразование напряжения осциллографа в эквивалентное значение для сравнения с АЦП
Давайте воспользуемся этим, чтобы также преобразовать значение напряжения осциллографа в эквивалентное значение АЦП.
Поскольку максимальное значение, полученное в ADP ESP32, было 4095, что эквивалентно показанию 2,958 В для того же индекса, мы можем сказать, что:
Каждый вольт в измерениях осциллографа равен примерно 1384,4 единиц AD. Следовательно, мы можем умножить все измерения осциллографа на это значение.
Шаг 16: сравнение двух полученных рамп
Визуализация различий, полученных в двух показаниях.
Шаг 17: Поведение разницы показаний АЦП (ОШИБКА)
Кривая ниже показывает, как разница в показаниях АЦП ведет себя в зависимости от измерения. Этот сбор данных позволит нам найти корректирующую функцию.
Чтобы найти эту кривую, мы просто наносим на график разность, найденную в каждом измерении, как функцию каждого возможного положения AD (от 0 до 4095).
Шаг 18: поведение разницы при считывании АЦП - поиск корректирующей функции
Мы можем определить в Excel функцию коррекции, добавив линию тренда, теперь более высокой степени, до тех пор, пока она не будет в достаточной степени соответствовать нашим данным.
Шаг 19: Использование другого программного обеспечения
Другое интересное программное обеспечение для определения кривых - PolySolve, которое можно использовать прямо по ссылке: https://arachnoid.com/polysolve/ или загрузить как приложение Java.
Он позволяет применять полиномиальные регрессии более высокой степени и предоставлять форматированную функцию, а также другие функции.
Чтобы использовать его, просто введите данные в первое текстовое поле. Данные должны следовать в порядке X, Y, разделенных запятой или табуляцией. Соблюдайте осторожность при правильном использовании точки в качестве десятичной точки.
Если введенные данные правильно отформатированы, в следующем поле появится диаграмма.
Вот как прошла кривая ошибок АЦП.
В этом окне будет представлен результат регрессии, включая данные об адекватности функции, которые, в свою очередь, могут иметь несколько форматов вывода: как функция C / C ++, список коэффициентов, функция, написанная на Java, и т. Д.
Примечание. Обратите внимание на десятичные разделители.
Шаг 20: Константы и настройка ()
Я указываю здесь GPIO, используемый для аналогового захвата. Я инициализирую последовательный порт, а также контакт, определенный для аналогового захвата.
const int pin_leitura = 36; // GPIO используется для аналогового ввода void setup () {Serial.begin (1000000); // Создание последовательного порта для отладки pinMode (pin_leitura, INPUT); // Pino utilizado para captura analógica}
Шаг 21: цикл () и функция коррекции
Мы фиксируем отрегулированное напряжение и печатаем значения с правильными поправками или без них.
void loop () {int valor_analogico = analogRead (pin_leitura); // реализация захвата из тензора //Serial.print(valor_analogico + f (valor_analogico)); // очистить значения для отладки (COM CORREÇÃO) Serial.print (valor_analogico); // сохранить значения для отладки (SEM CORREÇÃO) Serial.print (","); Serial.print (4095); // cria uma linha para marcar o valor máximo de 4095 Serial.print (","); Serial.println (0); // cria uma linha para marcar o valor minimo de 0}
Обратите внимание в строке 12, что у нас есть возможность распечатать данные с добавлением разностной функции f (analog_value).
Шаг 22: Использование функции исправления PolySolve
Здесь мы используем функцию PolySolve внутри Arduino IDE.
/ * Режим: нормальный Полиномиальная степень 6, 2365 пар данных x, y Коэффициент корреляции (r ^ 2) = 9, 907187626418e-01 Стандартная ошибка = 1, 353761109831e + 01 Форма вывода: Функция C / C ++: Copyright © 2012, P. Lutus - https://www.arachnoid.com. Все права защищены. * / double f (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2) + -3.470360275448e-07 * pow (x, 3) + 2.082790802069e- 10 * pow (x, 4) + -5.306931174991e-14 * pow (x, 5) + 4.787659214703e-18 * pow (x, 6); }
Обратите внимание на замену десятичного разделителя на запятую.
Шаг 23: Захват с коррекцией - последовательный порт плоттера
Шаг 24: вычислительные затраты
Для выполнения полиномиальных вычислений процессор должен справиться с этой задачей. Это может привести к задержкам в выполнении, в зависимости от исходного кода и доступной вычислительной мощности.
Здесь мы видим таблицу результатов теста с использованием многочленов с несколькими степенями. Обратите внимание на разницу между временем, когда функция pow () использовалась, и когда она не использовалась.
Шаг 25: Тестовый код - Настройка () и запуск цикла ()
Здесь у нас есть код, использованный в нашем тесте.
void setup () {Serial.begin (1000000); // Запуск последовательного порта для отладки} void loop () {float valor_analogico = 500.0; // хм доблесть arbtrario float quantidade = 10000.0; // количество chamadas float contador = 0.0; // contador de chamadas
Шаг 26: тестовый код - цикл () и обработка
Я использовал функцию micros (), чтобы получить значение в микросекундах.
// ============= инициация или процесс float agora = micros (); // марка начального экземпляра while (contador <quantidade) {// v (valor_analogico); // função vazia // r (valor_analogico); // função com retorno // f0 (valor_analogico); // грау 0 // f1 (valor_analogico); // грау 1 // f2 (valor_analogico); // грау 2 // f3 (valor_analogico); // грау 3 // f4 (valor_analogico); // грау 4 // f5 (valor_analogico); // грау 5 // f6 (valor_analogico); // грау 6 // f13_semPow (valor_analogico); // grau 13º SEM função POW // f13_comPow (valor_analogico); // grau 13º COM a função POW contador ++; } agora = (micros () - agora) / quantidade; // определение интервала очередности перехода // ============= финализация процесса
Шаг 27: тестовый код - цикл () - результаты
Мы печатаем значение, возвращаемое функцией 13 класса с POW и без него, для сравнения, а также интервал обработки.
// показать доблесть, возвращаемую из функции grau 13 com e sem POW для сравнения Serial.print (f13_semPow (valor_analogico)); // grau 13º SEM функция POW Serial.print ("-"); Serial.print (f13_comPow (valor_analogico)); // grau 13º COM функция POW Serial.print ("-"); // очистить интервал выполнения процесса Serial.println (agora, 6); }
Шаг 28: Тестовый код - используемые функции
Пустые функции (только с возвратом) степени 0 и 1.
// FUNÇÃO VAZIAdouble v (double x) {} // FUNÇÃO SOMENTE COM RETORNO double r (double x) {return x; } // FUNÇÃO DE GRAU 0 double f0 (double x) {return 2.202196968876e + 02; } // FUNÇÃO DE GRAU 1 double f1 (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x; }
Функции 2-го, 3-го и 4-го классов.
// FUNÇÃO DE GRAU 2double f2 (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2); } // FUNÇÃO DE GRAU 3 double f3 (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2) + -3.470360275448e-07 * pow (x, 3); } // FUNÇÃO DE GRAU 4 double f4 (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2) + -3.470360275448e-07 * pow (x, 3) + 2.082790802069e-10 * pow (x, 4); }
Функции 5-го и 6-го классов.
// FUNÇÃO DE GRAU 5double f5 (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2) + -3.470360275448e-07 * pow (x, 3) + 2.082790802069e-10 * pow (x, 4) + -5.306931174991e-14 * pow (x, 5); } // FUNÇÃO DE GRAU 6 double f6 (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2) + -3.470360275448e-07 * pow (x, 3) + 2.082790802069e-10 * pow (x, 4) + -5.306931174991e-14 * pow (x, 5) + 4.787659214703e-18 * pow (x, 6); }
13 класс функционирует с помощью военнопленного.
// FUNÇÃO DE GRAU 13 USANDO O POWdouble f13_comPow (double x) {return 2, 161282383460e + 02 + 3, 944594843419e-01 * x + 5, 395439724295e-04 * pow (x, 2) + -3, 968558178426e-06 * pow (x, 3) + 1, 047910519933e-08 * pow (x, 4) + -1, 479271312313e-11 * pow (x, 5) + 1, 220894795714e-14 * pow (x, 6) + -6, 136200785076e-18 * pow (x, 7) + 1, 910015248179e-21 * pow (x, 8) + -3, 566607830903e-25 * pow (x, 9) + 5, 000280815521e-30 * pow (x, 10) + 3, 434515045670e-32 * pow (x, 11) + -1, 407635444704e-35 * pow (x, 12) + 9, 871816383223e-40 * pow (x, 13); }
13 класс функционирует без использования военнопленных.
// FUNÇÃO DE GRAU SEM USAR O POWdouble f13_semPow (double x) {return 2, 161282383460e + 02 + 3, 944594843419e-01 * x + 5, 395439724295e-04 * x * x + -3, 968558178426e-06 * x * x * x + 1, 047910519933e-08 * x * x * x * x + -1, 479271312313e-11 * x * x * x * x * x + 1, 220894795714e-14 * x * x * x * x * x * х + -6, 136200785076e-18 * x * x * x * x * x * x * x + 1, 910015248179e-21 * x * x * x * x * x * x * x * x + -3, 566607830903e- 25 * x * x * x * x * x * x * x * x * x + 5, 000280815521e-30 * x * x * x * x * x * x * x * x * x * x + 3, 434515045670e- 32 * x * x * x * x * x * x * x * x * x * x * x + -1, 407635444704e-35 * x * x * x * x * x * x * x * x * x * x * х * х + 9, 871816383223e-40 * х * х * х * х * х * х * х * х * х * х * х * х * х; }
Шаг 29: файлы
Загрузите файлы:
Я НЕТ
Таблица
Рекомендуемые:
Как сделать АЦП текущим значением: 5 шагов
Как измерить ток АЦП: в этой инструкции мы опишем, как реализовать 8-битный аналого-цифровой преобразователь (АЦП) в SLG46855V, который может определять ток нагрузки и взаимодействовать с MCU через I2C. Эта конструкция может использоваться для различных приложений измерения тока, таких как
Руководство по настройке VPN Premium для ВЫСОКОСКОРОСТНОЙ ЗАГРУЗКИ и Ладно стриминг от REO: 10 шагов
Руководство по установке VPN Premium для ВЫСОКОСКОРОСТНОЙ ЗАГРУЗКИ и Ладно потоковой передачи от REO: Спасибо, Asuswrt-Merlin, привет, я из Таиланда. Я собираюсь написать подробное руководство по настройке VPN для высокой скорости загрузки в среднем около 100 Мбит / с и, возможно, самой плавной потоковой передачи для Netflix, Crunchyroll, Hulu и т. Д. Из Таиланда, место назначения
Arduino и 16-битный АЦП TI ADS1110: 6 шагов
Arduino и 16-разрядный АЦП TI ADS1110: в этом руководстве мы исследуем использование Arduino для работы с Texas Instruments ADS1110 - невероятно крошечной, но полезной ИС 16-разрядного аналого-цифрового преобразователя. Он может работать при напряжении от 2,7 до 5,5 В, так что он также подходит для Arduino Due и других низковольтных
ESP32: знаете ли вы, что такое ЦАП?: 7 шагов
ESP32: Знаете ли вы, что такое ЦАП? Сегодня мы поговорим о двух вопросах. Первый - это ЦАП (цифро-аналоговый преобразователь). Считаю это важным, потому что через него, например, мы делаем аудиовыход в ESP32. Вторая проблема, которую мы собираемся рассмотреть сегодня, - это осцил
Ноутбук Acer Extensa (5620 / T5250) Руководство по обновлению и настройке: 6 шагов
Ноутбук Acer Extensa (5620 / T5250) Руководство по обновлению и настройке: Некоторое время назад я писал об установке Windows XP на свой новый ноутбук Acer Extensa 5620-6830. Это симпатичная машинка - цена была подходящей, да и стандартные характеристики неплохие. Но вот некоторая информация, которая может быть полезна всем, у кого есть этот сдвиг