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

высокоскоростной ввод аналоговых данных

pvvx

Активный участник сообщества
благодарю за подробный ответ.
Вас не зря "послал" за кодом к китайцам "попрошайничать" пример или код в любом виде :) по двум вопросам:
1) Как зарядить прерывания от SAR? (нужны биты и регистр коммутации к контроллеру прерываний)
2) Как зарядить SLС (DMA) от SAR? (нужно код адреса линка к SAR к контроллеру SLС/DMA)
Тогда задача ввода с SAR решается проще... Но в инет-помойке по данному поводу пока ничего не найдено. Надо "попрошайничать".
Всё остальное выдрано и ревеснуто из либ - пока этого не сделать, китайцы примеров народу не дают.
 

pvvx

Активный участник сообщества
В SDK SAR используется для измерения WiFi и tout_dis_txpwr_track =1; является флагом запрета проверки изменения питания (по названию).
Но всё равно CPU не успевает сливать поток в 200 кГц набранных по прерываниям (200 кГц!) 16 битных слов (значащих всего 11 бит, т.е. поток 400 кило в сек) по UDP. И прерываниям уже сильно мешают процедуры SDK с запретами прерываний и т.д. (китайцы короче мешают :) )
относительно к clk_div у меня получилось максимум 25. Но это не важно, все равно у них ошибка. Напишу тоже.
После 23 в их примере скорость повышается, т.к. биты в делителях накладываются в чужие позиции :) Всё проверено в полуавтоматическом режиме. Писать тут дольше все варианты пройденные с тем что выужено из китай-либ по SAR, чем делал тест и лил в IRAM, а данные сливались в Exel...

Упрощенно можно считать, что скорость у данного ADC = 3 000 000 / (делитель * кол-во наборов в буфер ), где делитель от 2 до 23, а кол-во наборов в буфер - от 1 до 8.
 
Последнее редактирование:

pvvx

Активный участник сообщества
А возможно, что в RTOS это не реализовано.
phy_adc_read_fast() нету ни в одном SDK, кроме либ из шапки темы.
Но как вы будете бороться с этой кривизной (?), возникающей от работы WiFi :
adc_udp_1k_192k11bits.gifadc_udp_1k_192k11bits_2.gif
На входе сигнал 1кГц, вывод через UDP (192кГц 11 бит).
Вот вам временная ссылка на adc_udp_1k_192k11bits.wav (5543 килобайта) https://yadi.sk/d/ydpIfLDlmjMs3
В нем запись синуса, пилы и меандра 192кГц 11 бит в WDRV из "свалки".
На нем можно убедиться, что не имеем точности даже 2-х бит от данного ADC. Мешают потроха чипа - работающий блок WiFi.
Будете использовать 2 чипа ESP8266? Один для ADC, второй для WiFi? С отключенным WiFi модуль потребляет 15..17 mA в пределе на 160 MHz.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Возможно я пока непрочувствовал всей проблемы,
...
Я вообще хочу на время измерений отключать все, что только можно в ESP ,
чтобы создать время тишины и максимально убрать внутренние источники помех .
Это "почти" невозможно в китай-SDK, т.к. у неё другая специализация. В ней запущены десятки программных таймеров...
ЗЫ: Я попробовал матрицы-датчики указанных вами приемников ИФК - очень низкая чувствительность. И если это всё вы делаете для той задачи, то ничего хорошего и бюджетного не выйдет. Нужен кардинально другой подход и направление решения его в бюджетную сторону я вам давал. Не поторопитесь - решат другие.
Тут побоку возникла "идея" на датчике мыши с матрицей типа 30x30 сделать датчик движения. Правда у них совсем низкая чувствительность, но с правильной линзой они всё показывают - проверил.
Стандартный диапазон их работы:
ADNS-6010-wl.gif
 
Последнее редактирование:

pvvx

Активный участник сообщества
Примерно так, но это пока лишь в эскизе.
Да я счас про это:
IMG_6199.jpg
Вот снял на расстоянии мышиным датчиком 19x19 с подсветкой ИФК диодом. Уж такая линза была под рукой (и руками всё держал и на расстоянии руки дрожат ровно вести), но смысл сделать линзу с максимальным круговым охватом и можно ловить направление движения объектов... Датчик дешев, т.к. их напроизведено валом везде для мышей... а интерфейс связи описан и к ESP прикручивается влет. Этот, использованный датчик, дает 7 кадров в секунду при удовлетворимом контрасте для этого дела :)
Интерференционные полосы и их движение может показывать, если всё остальное согласовано.
Это - побаловаться. А измерение делается совсем на другом...
 
Последнее редактирование:

pvvx

Активный участник сообщества
есть интересная задачка -обеспечить перемещение плоскости зеркала(лин размер 3-5 мм) на расстояние 3-5 мм параллельно самому себе с максимальной ошибкой параллельности не более 1 нм (10 нм) .
решение должно быть простым, то бишь - гениальным.
Поставьте фотоаппарат и смотрите положение зайчика на экране на расстоянии хоть в метр. 3мм/10нм = 300 точек всего.
У мышиных сенсоров запросто открывается корпус и можно проектировать прямо на матрицу. Но их процессор (DSP) уже заточен на свою программу и получить много на выход не позволяет. Чтение матрицы в них тоже организовано просто для отладки - один пиксель за один прием кадра. Если её проц принимает и обрабатывает полных 7000 кадров 30x30 точек в секунду, то через вывод для отладки сможете считать соответственно всего до 7000/30/30 = 7.8 кадров в секунду. Заказывайте пустые чипы - у них обычно одноразовое программирование :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
но надо не смотреть зайчик, а перемещать зеркало параллельно самому себе.
Т е не смотреть, в двигать.
Магнитной системой оптики от CD.
Как говорят в одессе - почувствуйте разницу
Это теперь иностранщина. Мало-ли чего там говорят - живут то плохо.
 

PostLast

Member
pvvx, Если у вас стенд собран померить изменение данных АЦП в зависимости от температуры или от времени т.к. модуль все равно греется, а то есть подозрение, что он непригоден даже для измерения остаточной емкости батарей.
nikolz,
На головку динамика
Будучи студентом и занимаясь волоконной оптикой пробовал такое решение. Там все плавает не только от температуры но и от влажности. Скорее гигрометр можно делать.
 

pvvx

Активный участник сообщества
Вы случаем не изучали зависимость ошибки измерения от величины сопротивления источника?
Нет - не изучал. Ставил ОУ с рекомендуемой цепью по "даташиту" и не думал. Ну иногда учитывал и задачу - ограничение диапазона, т.е. увеличивал емкости.
в железке nodemcu на входе АЦП установлен делитель 220 к/110к т е выходное сопротивление источника не менее 220 ком. По аналогии с MAX13xx получаем примерно 200 мкс.
Ну это же ваши китайцы :)
Ток на входе (утечка) у данного ADC достаточно большой и тянет то к GND, то к плюс. При входном шунте в 47к даже осциллограф (тоже китайский) показывает "утягивание" входа от замеряемого источника... На взгляд там на до не более пары кОм, ну и учитывать динамику, если с емкостью...
Если у вас стенд собран померить изменение данных АЦП в зависимости от температуры или от времени т.к. модуль все равно греется, а то есть подозрение, что он непригоден даже для измерения остаточной емкости батарей.
Собственный замер напряжения питания при внутренней коммутации какого-то источника тока на вход ADC (с внешним резистором на GND) вполне стабилен. Для АКБ достаточен. Но всё это при условии, что питание ESP8266 стабилизировано. Вот до его уровня и точность, т.е. к 1%.
При замерах делители более 10к не использовал. При замере линейности - вообще включал напрямую к выходу ОУ с макс. током до 10 mA.
Если на входе ADC более 1.1В (+ падение на внутреннем диоде), то частенько проц вообще вылетает из ПО или не стартует.
Будучи студентом и занимаясь волоконной оптикой пробовал такое решение. Там все плавает не только от температуры но и от влажности. Скорее гигрометр можно делать.
Но если есть "коррекция" - обратная связь по оптике, то может и потянет.
С магнитными то и так беда - магнит вращает фазу света... а если ещё в воздухе куда "пукают" то совсем беда. :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
Если считать, что у китайцев SAR как и у других производителей,
то выходное сопротивление источника должно быть не более 1 к или даже 0.2 ком
----------------------------------
возможно, что и уровень помех связан с высоким сопротивлением источника.
--------------------------------------
Кроме того, полагаю, что если сопротивление источника большое, то имеет смысл параллельно входу ставить дополнительную емкость.
Согласны?
Не согласен. Уровень помех там от другого. Емкость на входе данному SAR тоже сильно не помогает.
У данного больного SAR гуляет внутренний REF и скорее всего кривая топология в кристалле, включая разводку на плате модуля. Собирает все помехи от собственной работы чипа. В итоге никакие внешние цепи ему не помогают. От этого и признан "градусником" - годятся только усредненные измерения за длительный период.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Добрый день,
В качестве информации.
Провел исследования аналогового ввода и формирования дискретных сигналов на выводах.
Получил следующие результаты:
------------------------------
Аналоговый ввод (SAR ESP):
1) максимальная частота преобразования АЦП - 300 кгц.
2) максимальное входное напряжение 2.85 вольт. код 1877.
3) число разрядов >10.
3) уровень шума младших 3 бита.
4) 1 вольт соответствует коду 660.
---------------------------------------
Дискретный вывод
1) Минимальное время переключения выхода 83 nc ( на частоте процессора 80 мгц)
2) Максимальная частота генерируемых импульсов 4 мгц для 80 и 8Мгц для 160.
---------------------------------------
Сам удивился даже.
Максимальная частота 521.7 кГц
Шумы - младший бит.
От куда эти результаты? Выдумали или "китайцы сказали"? :)
В новом SDK (1.5.4) функция system_adc_read_fast() встроена и давно расписана.
При одновременной работе с WiFi и прочей активности CPU там одни шумы на все 8 бит из 10 :(
Дискретный вывод у I2S 80 МГц. Программный вывод в GPIO со всеми ухищрениями выходит строб в 13МГц.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Для спектрометра написал свою функцию с формированием управляющих сигналов.
WIFI при вводе отключаю.
массив ввода 4000 отсчетов.
пока тестирую на постоянном напряжении.
Использовать ESP8266 как обычный MCU не выгодно. Не хватает аппаратных интерфейсов к внешке и памяти при совместной работе по базовым функциям - WiFi. ESP-32 расширяет функционал по пинам, но не особо. И там та-же беда с памятью, в связи с политикой (подходом) Espressif по программной части. АЦП в ESP8266 недоделанный (неудачный), информации по АЦП в ESP-32 пока нет.
NL6621 имеет больше памяти, а архитектура проца аналогична STM32F103. Т.е. те-же низко-скоростные шины и нет АЦП. Но в базе всегда доступно не менее 70 к "heap", которая практически не используется (применена статическая модель для компонентов SDK).
 
Последнее редактирование:

pvvx

Активный участник сообщества
Буду признателен, если сможете ответить на следующий вопрос.
Так как большинство вопросов со спектрометром в диапазное 0.2-0.8 мкм я решил, то настало время ИК диапазона.
Меня интересуют детекторы для спектрометра диапазон от 0.8 до 2.5 мкм, далее от 2.5 до 6.
конкретно китайцы предложили лишь PIN диоды для диапазона 0.8-2.5 мкм.
Вы раньше упоминали болометры.
можете подсказать конкретные типы цены и продавца, лучше бы в Китае.
Спасибо
Ничем фактическим помочь не могу - это всё относится к продукции ВПК...
У самого есть хотелки это перенести в бытовуху (доступность)...
 

pvvx

Активный участник сообщества
При восьми отсчетах 2.85 вольта соответствуют коду 14784.
Шумы примерно 13. Т е точность соответствует 10 битам.
-------------------------------
Так как исследую плату nodemcu, то полагаю,
что есть внешний шум, так как вход SAR выведен на разъем через 200 к резистор.
Паяльника нет, заменить на перемычку или нормально рассчитанную RC цепь для входа данного SAR?
А то это все эти замеры ни о чем.
Добрый день,
сделал осциллограф на базе ESP .
А где описание в каком режиме это делается? Вкл/выкл WiFi, скан окнами по X семплов или непрерывный и т.д.(?)
 

nikolz

Well-known member
Добрый день,
выкладываю зависимость выходного кода АЦП от входного напряжения. измерения выполнены на плате nodemcu.
 
Последнее редактирование:

nikolz

Well-known member
сигнал с Toshiba TCD1304 максимальная освещенность ( постоянная составляющая 0.5v компенсирована).
время ввода 3694 пиксель 26 ms.


а это я два пальца на CCD положил
 
Последнее редактирование:

pvvx

Активный участник сообщества
Добрый день,
выкладываю зависимость выходного кода АЦП от входного напряжения. измерения выполнены на плате nodemcu.
Платы "nodemcu" есть нескольких видов и нескольких сборок. На некоторых нет делителя на ADC, на других - какой впаяют. Разная скорость опроса ADC тоже меняет входные токи на ногу...
Выходит разговор ни о чем.
 

pvvx

Активный участник сообщества
Тут народ сочиняет WiFi/VoIP pager oparty o ESP8266.
Но у них наоборот - часть приема для вывода звука, а надо ещё передачу по RTP...
Для переговоров качество работы АЦП у ESP8266 с включенным WiFi сгодится...
 
Сверху Снизу