• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ADC RTL8711AM

pvvx

Активный участник сообщества
Проверил прием ADC по DMA.
В доках значится:
• 16-bit high resolution A/D converter
• Bandwidth 48KHz
• Input signal range: 0.01V ~ VREF - 0.2V
• Support DMA mode
• Support One-Shot sampling mode without CPU active to save power
• Pre-configured period to auto-sampling
• Support two wakeup method: buffer threshold interrupt and event trigger

Vref по замеру получается 1.8..2.0 В.
16-ти бит нет. Есть только 15.7 бита :) Ноль у ADC примерно от 16000.
Влияние передатчика показано на графике принятых 4096 точек (в виде ямки на подъеме):
graf.gif
Период пилы от генератора: 100 мс, амплитуда: (p-p) 1.8 В.
Период укладывается в 2440 точек 16 бит ADC -> включен делитель на ADC на 24.4 кГц.
100ms.gif
Генератор не шумит и формирование пилы у него аналоговое: проверка на 24-х битном ADC кажет ошибки приемного ADC :).
Включена AP и каждые 100.24 мс имеем импульс передачи beacon, дающий помеху.
Всё подключено на соплях (видно по диаграмме в виде постоянного шума), китайскими проводками c коннекторами. Возможно, что если правильно распаять, то влияния передатчика WiFi не будет.
Примеров работы по DMA или прерываниям в SDK нет. (Будете хорошо себя вести - выложу)
Скорость программного приема, через API в SDK - до 200 точек в сек и ограничено до 12 неполных бит :)

Для примера вложен xlsx файл с этими снятыми (первыми попавшимися :)) точками, с которых построен график:
 

Вложения

Последнее редактирование:

pvvx

Активный участник сообщества
Нда, ADC ESP-32S - ADC Sample rate - ESP32 Forum 12 кривых бит и до 6 кГц. Что-то совсем сплоховали...
google "esp32 adc site:esp32.com" как жить дальше? :(
-----
Подергал контакты (снимать получившееся безобразие страшно :)) и повесил на скрутке кондер на вход ADC. Вышло уже чище, и хорошо видно beacon-ы:
100ms1.gif
Наверно просаживает питание и Ref у ADC убегает :)
Верх, к значению 65535 (16 бит) закругляет. Там уже 1.8 В - предел ADC с переполнением...
А это, что мы имеем на осле в 8 бит :) на входе у модуля:
tst1.gif
Шумов немерянно - работает SAR. Т.е. надо вешать ОУ c обратной связью (низким обратным сопротивлением), чтобы заряжать коммутируемые емкости этого SAR.
 

Вложения

Последнее редактирование:

pvvx

Активный участник сообщества
Какое входное сопротивление у ADC RTL (буфер нужен)?
Буфер нужен.
Замер, что сдесь сделан, сделан подключением ко входу модуля F11AMxx несогласованного кабеля c крокодилами за проводки. Внутреннее сопротивление генератора 75 Ом, а резонансы кабеля (и отраженка) от 60 МГц. При включении работы ADC на оселе в точке соединения и видим частокол в виде шума входа заряда и коммутации емкостей SAR на частотах, близких к резонансам кабеля... Так-же уже описал - желательно ставить ОУ c выходыми токами, способными перезаряжать стандартную цепь фильтра для ограничения полосы входного сигнала на вход SAR в виде типа 10 Ом и кондера на GND. Надеюсь емкость сами рассчитаете для необходимой вам полосы. Предельная SPS по докам 48 000 отсчетов в секунду (надо проверять - ещё не до этого - по умолчанию завелось на 24400). Т.е. надо RC фильтр с началом спада до деленной на два частоты SPS.
Т.к. пока всё сделано "на соплях" я не могу сказать на 100% что там нет примитивного буфера и УВХ. Замерите сами или ждите, когда сделаю более-менее макетку для замеров шумов на входе модуля при работе его ADC... 16 бит рядом (в одном корпусе) с коммутатором 0/300 мА (WiFi передатчик) - эт вам не хухры-мухры... Аналоговое питание ADC на модуле реализовано тоже плохо...
 
Последнее редактирование:

pvvx

Активный участник сообщества
А какая динамическая ошибка у этого ADC при частоте выборки 48 отсчетов в секунду?
А померьте сами или возьмете xlsx файлы и сделаете расчет по ним. (Ответ лично для вас, под условия поставленные в ответе на более простой вопрос к вам :) )
Но надо учитывать, что вход ADC не согласован c генератором и замер на "соплях".

Использованный на кухне генератор программируемых сигналов с полосой до 100 МГц (3 дБ, далее с худшими характеристиками до 160 MГц) в данном режиме создает пилу на коммутируемых аналоговых источниках тока и на выходе имеет сдвоенные ОУ THS3091 на радиаторах для раскачки выхода до +-10В и выходные делители и аттенюаторы с обратным выходным сопротивлением 75 Ом. Т.е. на 16 бит при частотах до 100 кГц в нем сомневаться не приходится. Но в него воткнут какой-то попавшийся под руку китайский шнур от дешевого гена до 5 МГц cкрокодилами, соединенными далее проводками через 2 разъема к модулю и прикрученным скрутками кондером к другой GND:). Туда-же были воткнуты как попало: USB-UART, JTAG, кабели осла, логический анализатор, модуль измерения тока потребления и все от разных USB выходов cкучей шумов в проводки GND… :) Что там творилось на входе ADC наглядно демонстрирует представленная осциллограмма c 8-ми битного осла :)

Повторяю всё это, так как вы читать не умеете – макетки для более менее замера данного модуля ещё не сделал.

Для детей есть документ 00005062-AN0047-Realtek-Ameba1-ADC-calibration_1v2_20150715_84355.pdf как откалибровать ADC в Ameba командами AT из SDK 3.4, только вот эти данные просто пишутся в Flash, а более нигде не используются, а выход с ADC получают путем "ручного" перебора битиков в ADC и дальнейшим обрезанием до 12 бит. HAL имеет три основных режима чтения ADC: "полу-ручной перебор битиков коммутатора SAR" c прерыванием где не попадя опроса RTOS, "прием по прерываниям" и "прием по DMA". Дополнительно Hal предполагает передачу данных с ADC в PCM, но реализация этого режима не дописана (пока не нашел).
ADC обрабатывается всегда на 2 канала, но второй не выведен на внешние ноги в RTL8711AM. В DMA (в FIFO ADC) задается вывод любого из 4-х входов (или парами или все 4-ре) в 16-ти битном виде. Реализации переключения частоты тактированния тоже не нашел в HAL - значение передается в структуру управления драйвером ADC, далее не используется, но в описании регистров к ADC описано где и что переключается. При работе через DMA первые два значения в буфере нулевые. Т.е. HAL недоделанный. API вообще не трогает установки, а лепит все нули. Слеплено Amebа кое как для вывода в Arduino с SPS до 200 Гц в программном режиме опроса (дополнительной процедурой к API) и халявном подключении с делителем из двух резисторов на 20 и 60 кОм :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
Я задал Вам риторический вопрос.
Ответ на него я знаю,
но задал полагая,
что Вы объясните другим читающим Ваши исследования данное понятие и возникающие при этом ошибки ,
которые не зависят ни от соплей и ни от недоделанных поделок.
Динамическая ошибка будет явно меньше, чем у ESP-32S или у STM32F1xx за счет 16 бит и большей SPS чем у ESP-32S. По тому и глупый вопрос. :)
Так-же есть доступ к настройкам цикла оцифровки данного АЦП в 6-ти конфигурационных регистрах по 32 бита...
Объяснять под вашу дудку (отработку рекламы на Espressif) ничего не собираюсь :p Нет смысла. Только в плане сравнения. А сравнивать c ESP-32S пока не с чем. У ESP-32S на сегодня вообще нет никаких выборов режимов работы с ADC.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Примерно такой имеем шум на 24.4ksps при питании от USB со стабилизатором AMS1117:
Снимок1354.gif
Синий - WiFi AP включена (видна передача beacon), красный - WiFi выключен.

Надо ещё как-то проверить просыпание модуля по уровню на ADC. Есть такая фича у RTL... И режим работы ADC Audio, когда гонит данные в PCM.

Начальный нуль в DMA буфере оказался от того, что функция запроса DMA блока только назначает считывание и надо ждать выполнения (заполнение буфера) по прерыванию или флагу в структуре adc... Или хотя-бы подождать, до передачи данных или распечатке в UART, чтобы он начал заполняться... :)
Вообще, из-за отдельного питания ADC на модуле, задержка при первом снятии замера с ADC нужна. Необходимо включить ADC (сделать пару пустых замеров) чтобы напряжение на его аналоговом питании подсело и потом уже снимать показания для обработки. А так первый замер, если включить ADC и сразу прием в буфер по DMA, разниться от всех последующих до 50 единиц...
Температурная компенсация у данного ADC тоже не очень. Он всё-таки больше Audio, чем для абсолютных замеров, да внутренний Ref наверно ужасный... Но лучше встроенных ADC, из обсуждаемых модулей на форуме модулей (ESP), пока нет.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Вот просто другой БП, работает SoftAP (беконов уже не бегает так явно), но модуль пока на старых проводочках с разъемчиками, крокодилами и скрутками проводков - эмуляция подключений Arduin-шиков.
50 Гц, 4т. замеров и рядом график усреднения по 32 точкам (замер и кусок не выбирал - только по масштабу для отображения :))
Синус с DDS до 20 бит, т.е. кривой.
Через несколько дней cмогу сравнить на одном модуле с подключенными AD7176-2 и его ужасный встроенный ADC... :)
 

Вложения

Последнее редактирование:

pvvx

Активный участник сообщества
Примитивно проверил тут передачу данных со встроенного ADC через Websocket в dygraph (js) на 1000 точек в окне.
Оцифровку на 24 кГц тянет:
Тянет и на 48 кГц, но подтормаживает javascript c dygraph... Считывание ADC по его прерываниям с использованием FIFO (FIFO ADC на RTL на 16-ть 16-ти битных замеров).
Пример кода, возможно, скоро будет в Web-свалке...
---
Скинул простой пример.
Тестовый HTM для отображением графика: RTL00_WEB/ws_test_adc.html at master · pvvx/RTL00_WEB · GitHub
Драйвер ADC без всяких тяжелых HAL: RTL00_WEB/adc_drv.c at master · pvvx/RTL00_WEB · GitHub
Код связи c websock + набор в буфер: RTL00_WEB/adc_ws.c at master · pvvx/RTL00_WEB · GitHub

Опрос ADC работает на выбор (там даны опции) - по прерываниям от самого ADC или от таймера (когда надо малую частоту опроса, сам ADC дает замеры с частотой к 48 кГц...).

Включение в проект производиться снятием коммента [inline]#[/inline] у WEB_ADC_DRV=1 RTL00_WEB/project.mk at master · pvvx/RTL00_WEB · GitHub
 
Последнее редактирование:

IKSIK67

New member
Примитивно проверил тут передачу данных со встроенного ADC через Websocket в dygraph (js) на 1000 точек в окне.
Оцифровку на 24 кГц тянет:
Тянет и на 48 кГц, но подтормаживает javascript c dygraph... Считывание ADC по его прерываниям с использованием FIFO (FIFO ADC на RTL на 16-ть 16-ти битных замеров).
Пример кода, возможно, скоро будет в Web-свалке...
---
Скинул простой пример.
Тестовый HTM для отображением графика: RTL00_WEB/ws_test_adc.html at master · pvvx/RTL00_WEB · GitHub
Драйвер ADC без всяких тяжелых HAL: RTL00_WEB/adc_drv.c at master · pvvx/RTL00_WEB · GitHub
Код связи c websock + набор в буфер: RTL00_WEB/adc_ws.c at master · pvvx/RTL00_WEB · GitHub

Опрос ADC работает на выбор (там даны опции) - по прерываниям от самого ADC или от таймера (когда надо малую частоту опроса, сам ADC дает замеры с частотой к 48 кГц...).

Включение в проект производиться снятием коммента [inline]#[/inline] у WEB_ADC_DRV=1 RTL00_WEB/project.mk at master · pvvx/RTL00_WEB · GitHub
Не подскажите, какой конкретно процессор стоит в RTL8711AM? У меня есть плата RAK473 и я вот не знаю, что именно мне программировать, процессор в RTL (и тогда какой он?) или небольшой Cortex M0, который стоит отдельно на плате..
 

sharikov

Active member
Не подскажите, какой конкретно процессор стоит в RTL8711AM? У меня есть плата RAK473 и я вот не знаю, что именно мне программировать, процессор в RTL (и тогда какой он?) или небольшой Cortex M0, который стоит отдельно на плате..
Внутри RTL8711AM стоит процессор Cortex-M3.
Небольшой Cortex-M0 на плате это отладчик CMSIS-DAP. Его поставили на плату потому что RTL прошивается только через отладочный интерфейс Jtag или SWD.
Для "телепузиков" необходимоть иметь JATG отладчик для того чтобы запрограммировать модуль являлось непреодолимым препятствием. Чтобы все шилось и отлаживалось "искаропки" Rakwireless добавили на плату отладчик.
 

IKSIK67

New member
Внутри RTL8711AM стоит процессор Cortex-M3.
Небольшой Cortex-M0 на плате это отладчик CMSIS-DAP. Его поставили на плату потому что RTL прошивается только через отладочный интерфейс Jtag или SWD.
Для "телепузиков" необходимоть иметь JATG отладчик для того чтобы запрограммировать модуль являлось непреодолимым препятствием. Чтобы все шилось и отлаживалось "искаропки" Rakwireless добавили на плату отладчик.
У меня три вопроса:
1. какой именно процессор Cortex-M3 стоит в модуле, что бы найти datasheet на него?
2. как зашить прошивку в модуль используя отладочный Cortex M0? куда и что нужно подключить?
3. как включить wi-fi точку доступа, что бы модуль виделся ноутбуком? куда что подпаять?
 

IKSIK67

New member
У меня три вопроса:
1. какой именно процессор Cortex-M3 стоит в модуле, что бы найти datasheet на него?
2. как зашить прошивку в модуль используя отладочный Cortex M0? куда и что нужно подключить?
3. как включить wi-fi точку доступа, что бы модуль виделся ноутбуком? куда что подпаять?
и еще интересует назначение кнопок на плате, за что они отвечают?
и нет ли у вас схемотехники схемы в .pdf ?
 

girs1982

New member
проблема следующая при работе в сети вай фай ESP32 lua с экранчиком,на всех ногах по адц + ,и никак не убирается,стоит отключить вай фай,как сразу все работает,ЧЗН ,кто знает как победить?
 

pvvx

Активный участник сообщества
проблема следующая при работе в сети вай фай ESP32 lua с экранчиком,на всех ногах по адц + ,и никак не убирается,стоит отключить вай фай,как сразу все работает,ЧЗН ,кто знает как победить?
Обратиться к писателям Lua на ESP32.
 
Сверху Снизу