• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ADC-преобразователь аналоговых сигналов

nikolz

Well-known member
Добрый день,
Данный вопрос уже рассматривался на форуме, но я предлагаю вынести его отдельно и обсудить следующее.
------------------------
Вот что я понял из всего прочитанного по ADC ESP8266:
-----------------------------------
1) точность измерения напряжения.
Согласно документации для точного измерения мы должны использовать
команду system_get_vdd33 чтобы измерить напряжение на pin3 и pin4.
это значение должно быть установлено в 107 байт esp_init_data_default.bin
Так как напряжение может быть в диапазоне 1.8-3.6, то значение в 107 байте может быть в диапазоне 18-36.
Таким образом, дискретность измерения опорного напряжения 0.1 в.
Т е, если реальное напряжение не установлено с точностью до 0.1 в,
то неточность установки будет ошибкой измерения значения ADC на pin 6
----------------------------------------
2) Время преобразования (быстродействие)
Возьмем программу, предоставленную Г-ном pvvx:

A)--------------------------
//Correction adders z - 21:
void read_sar_dout(uint16 * buf)
{
volatile uint32 * sar_regs = &SAR_BASE[32]; // 8 regs 0x60000D80...
int i;
for(i = 0; i < 8; i++) {
int x = ~(*sar_regs++);
int z = (x & 0xFF) - 21;
x &= 0x700;
if(z > 0) x = ((z * 279) >> 8) + x;
buf = x;
}
}
что делается в этой программе я пока не понял
Вопросы:
1) что означают константы 279, 21
2) зачем двигать на байт результат ADC если z>0


B)----------------------
uint16 sar_dout, tout, sardata[8];
read_sar_dout(sardata);
for (i = 0; i < 8; i++) {
sar_dout += sardata;
ADC_DBG("%d, ", sardata);
}
--------------------------
Программа суммирует 8 значений полученных на выходе ADC.
Т е это не 8 значений одного измерения ADC , а сумма 8-ми измерений.
Согласно результатам, полученным Г-ном pvvx ,
время получение результата функции read_sar_dout
составляет примерно 20 мкс.
Но это не одно значение ADC, а восемь.
Таким образом, получаем, что время преобразования ADC составляет примерно 2.5 мкс.
Но в качестве результата мы получаем среднее от 8 значений ADC.
------------------------
Это лишь мое понимание и непонимание.
-------------------------------
"Хотелось бы услышать начальника транспортного цеха."
 
Последнее редактирование:

nikolz

Well-known member
Сегодня получил ответ от китайцев.
Они действительно просто складывают 8 отдельных отсчетов ADC
Таким образом, время преобразования ADC составляет примерно 2.5 мкс.
Получается, что предельная частота дискретизации ADC составляет 400 кгц.
 

pvvx

Активный участник сообщества
Согласно результатам, полученным Г-ном pvvx ,
время получение результата функции read_sar_dout
составляет примерно 20 мкс.
Я такого не говорил. Это ваш не верный вывод.
Время работы функции read_sar_dout() равно примерно 8/26 000 000 сек + мелочи на обработку входа и выхода из функции CPU.
Причина - низкая скорость шины CPU к регистрам периферии.
Функция считывает готовые результаты из регистров.
Запуск замера производится взводом бита 1 в регистре 0x60000D50.
Готовность данных отмечается по сбросу битов 24, 25, 26 этого-же регистра. Там вроде счетчик (не помню).
С времени взвода (запуска замера) до готовности и проходит примерно 1/22 000 сек.
Вам сложно переложить в математическую функцию коррекцию получаемых данных из регистров? Начните с того, что кто вам обещал правильный порядок бит и их отношений к измеряемому сигналу в тех 8-ми регистрах? Потом обратитесь к принципу работы SAR.
Из-за данной коррекции у нас ADC не может выдавать максимальное значение.
После суммы всех 8-ми получаем предел в 0x3FF8.
WDRV_ADC_RC.gif
Заряд и разряд конденсора с шунтом (47 и 33 кОм в параллель) включенного на вход ADC и коммутируемого через 7.5 кОм на +3.3V. Данные приняты из WDRV драйвера в "веб свалке" по UDP.
Это вывод спада заряда емкости 100 мкФ (с шунтом 47 кОм) при выводе точек уже суммами замеров ADC по 4 шт:
ADC_RC.gif
В web-свалке чтение ADC по НТТР выдает 16 битные значения.
Код:
           uint16 x[4];
             read_adcs(x, 4);
             tcp_puts("%u", x[0]+x[1]+x[2]+x[3]); // 16 бит ADC :)
Функция read_adcs() считывает указанное ей значение замеров в буфер на пределе работы ADC (~21 тысяча замеров по 14 бит)

The Data Conversion Handbook, edited by Walt Kester
 
Последнее редактирование:

nikolz

Well-known member
pvvx,
добрый день,
Спасибо за информацию.
-------------------------------------------
Я не с целью претензий,
а истины для,
пытаюсь разобраться в существующем решении.
-------------------------------
Про сумматоры
Вот здесь Ваша картинка
http://esp8266.ru/forum/threads/tochnost-adc.598/#post-10617
где
1) Вы пишите про 8 сумматоров
2) масштаб Вами указан 20 мкс/см
3) восемь импульсов укладываются на 1 см т е за 20 мкс
----------------------
Я же предполагаю,
что это не 8 сумматоров,
а 8 результатов SAR_ADC
и поэтому
на 1 преобразование ADC уходит 20/8=2.5 мкс.
-------------------------------
А вот еще Ваша цитата:
http://esp8266.ru/forum/threads/raz...o-webservera-na-esp8266.56/page-54#post-12456
20 кГц на отсчет и баста.
ADC полу-программный, набор сумм с коррекциями из 8 регистров сумматоров.

====================
Теперь несколько доводов,
почему я не согласен с Вашим выводом,
что это 8 сумматоров одного преобразования.
------------------------
Если предположить, чтоэто верно, то тогда это не SAR-ADC.
Если же это SAR-ADC, то число тактов должно быть не меньше числа получаемых разрядов.
Т е если разрядов больше 8, то число тактов не может быть 8.
-----------------------------
Более того, в SAR нет никаких сумматоров.
Они там не нужны.
Там используется обычный регистр с установкой сбросом разрядов
и результат получается в этом регистре.
Раньше, как известно, ставили ЦАП R-2R,
теперь вместо R используют С,
но поразрядное уравновешивание осталось.
В загруженном файле статья для примера
----------------------
 

Вложения

nikolz

Well-known member
Теперь про программы.
приведу Ваши программы которые Вы разместили на сайте ESP8266.com
------------------
Code: Select allvoid read_sar_dout(uint16 * buf)
{
volatile uint32 * sar_regs = &SAR_BASE[32]; // 8 regs 0x60000D80...
int i;
for(i = 0; i < 8; i++) {
int x = ~(*sar_regs++);
int z = (x & 0xFF) - 21;
x &= 0x700;
if(z > 0) x = ((z * 279) >> 8) + x;
buf = x;
}
}
----------------------
В этой программе нет поразрядных сдвигов.
есть операции с константами и вычисление суммы для значения buf
т е есть преобразования, но они для формирования x вне зависимости от i.
Т е каждое значение buf формируется по одному и тому же алгоритму.
Полагаю это связано с различным весом емкостей.
Но формируются 8 независимых измерений.

----------------------------------
The sum of eight values:
Code: Select alluint16 sar_dout, tout, sardata[8];
read_sar_dout(sardata);
for (i = 0; i < 8; i++) {
sar_dout += sardata;
ADC_DBG("%d, ", sardata);
}
--------------------
Здесь просто сумма восьми значений без каких-либо сдвигов,
т е обычное усреднение для повышения точности измерения

--------------------------
tout = (sar_dout + 8) >> 4; // tout is 10 bits fraction
---------------------

Здесь деление на 16, хотя сложили 8 значений.
Полагаю, что один сдвиг лишний.
 

nikolz

Well-known member
вот картинки из документации AN2834


-------------------------------

Что-то напоминает?
 

nikolz

Well-known member
Вчера я спросил китайцев,
возможно ли реализовать скорость преобразования ADC 100 тыс в секунду на ESP8266.
-----------------------
вот их ответ:
We can support 100000 samples per second.
But we need some time to develop it.
 

nikolz

Well-known member
Вам дана ссылка на описание разных типов ADC - вкуривайте.
Это типа, признать ошибку не хочу, типа сам дурак?
Я Вам тоже привел ссылку на два документа и картинки как у Вас и объяснил суть приведенных программ.
Может поясните свою логику как у ВАС SAR за 8 тактов делает 16(14) бит. Патент еще не получили?
 

pvvx

Активный участник сообщества
Раньше, как известно, ставили ЦАП R-2R,
теперь вместо R используют С,
но поразрядное уравновешивание осталось.
В загруженном файле статья для примера
----------------------
Вместо С там стоят транзисторы и flash. В так названных сумматорах если смотрите код, то видите различие по 3 + 8 бит. Сцылка для вкуривания вам дана.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Это типа, признать ошибку не хочу, типа сам дурак?
Я Вам тоже привел ссылку на два документа и картинки как у Вас и объяснил суть приведенных программ.
Может поясните свою логику как у ВАС SAR за 8 тактов делает 16(14) бит. Патент еще не получили?
Уже запатентовано и указано в книжке, приложенной для вас.
Долго что-то вы выводите 8 регистров на распечатку :)
У меня ADC работает на 20кГц и передается по WiFi, а вот у вас и других - пока нет. И так уже пол года :)
Вчера я спросил китайцев,
возможно ли реализовать скорость преобразования ADC 100 тыс в секунду на ESP8266.
-----------------------
вот их ответ:
We can support 100000 samples per second.
But we need some time to develop it.
Это коммерсанты - у них всегда ответ "да". Но "воз и ныне там" по всем вопросам. Даже с flash не справились, а вы писали, что они вам сделают :)
 
Последнее редактирование:

nikolz

Well-known member
Уже запатентовано и указано в книжке, приложенной для вас.
Долго что-то вы выводите 8 регистров на распечатку :)
У меня ADC работает на 20кГц и передается по WiFi, а вот у вас и других - пока нет. И так уже пол года :)
Это коммерсанты - у них всегда ответ "да". Но "воз и ныне там" по всем вопросам. Даже с flash не справились, а вы писали, что они вам сделают :)
Сам себя не похвалишь, никто не похвалит. Верно?
Вам оно нужно?
Я вот за это время написал пару роботов .
А Вы все ESP ковыряете да китайцев ругаете.
Я Вам писал полгода назад, что так и будете ковырять, ругая всех, акромя себя.
Пока по-моему выходит.
----------------------------
Вы сами то читали на что сослались?
Тогда ткните страницу где речь идет про SAR
Вообще-то схем АЦП уйма. Но SAR - одна из них. и в приведенных мною документах разжеваны именно SAR-ADC которые делают STM и TI.
-------------------------
Но Вы так и не ответили где Вы нашли восемь сумматоров?
-------------------------
 
Сверху Снизу