Comments 38
Оценка линейности работы АЦП мной не производилась
Такое себе "Тестирование встроенного АЦП"
Используем сборку SiFive Freedom Bare Metal GCC.
Чтобы выполнить более-менее нормальное измерение DNL и INL необходим хороший генератор с характеристиками на порядок лучше чем исследуемый девайс, к сожалению такого под рукой не оказалось. Я сделал несколько замеров вручную по всему диапазону. В начале и в конце сильные искажения. На мой взгляд пригодный линейный участок находится в диапазоне 0.1 до 1.1 В.
От встроенного АЦП вообще не нужно ждать выдающихся метрологических характеристик. Если хочется что-то точно измерить - нужна отдельная схема.
Спасибо за статью!
Тулчейн какой использовали - riscv-gnu-toolchain ?
Используем сборку SiFive Freedom Bare Metal GCC.
Проверяли ли измерение каналов АЦП с предварительным измерением канала GND (Чередование измерений Канал_1, GND, Канал_2, GND).
В одном из наших изделий мы планируем применить этот МК
А почему именно его? Или изначально стоит задача использовать отечественные компоненты?
...на вход АЦП было подано постоянное напряжение в средней точке его динамического диапазона (0,6 В)...
А как это напряжение формировалось?
Сначала потенциометром. Потом фиксированным резисторным делителем.
а что являлось источником напряжения? питание?
Питание платы от USB. На отладочной плате стоит линейный стаб с двумя электролитами по входу и выходу. Со стаба получал делителем через бусину и отправлял на вход. Параллельно со входом АЦП запаивал конденсатор большой емкости - рояли не играет. Позже выяснил, что сильно шумит "клацание" аналоговым коммутатором.
А, ну тогда еще как вариант может шуметь стаб. Сдается мне он всяко менее стабилен чем внутренний ИОН.
upd: На фото обратил внимание на разложенные провода, вполне возможно на них так же наводится помеха.
Тогда не удивительно. SAR ADC весьма чувствительны к сопротивлению источника. В довесок ещё и коммутатор. Если сопротивление источника велико, то требуется весьма приличный буфер.
Внутри всякого АЦП уже присутствует буферный ОУ, иначе АЦП превратился бы в генератор случайных чисел. Но Ваша идея не далека от истины, скорее всего входное сопротивления буфера в АЦП не велико. В спецификации данных нет.
Можно mcu в спящий режим переводить - это немного снижает шумы.
По хорошему, надо на том же стенде с теми же параметрами проверить альтернативы - взять что-нибудь дешевое китайское, вроде ch32v203, потом средненькое stm32f103, и подороже - nxp/TI/microchip
До недавних времен мы в своих изделиях плотно использовали STM32F4. У этой STM-ки тоже 12 битный АЦП и на нём "из коробки" легко достижима точность измерения в 1 мВ при опорном 2,5 В. А за счет высокой скорости (2,4 MSPS) и оверсэмплинга можно получать неплохие результаты. К сожалению, у MIK32 всего 0,8 MSPS и производительность ядра не позволяет в оверсэмплинг. И еще, я не припомню, чтобы у STM-ки вносился шум при переключении каналов.
Это да, шустро там. У некоторых STM32F4 еще и 3 АЦП, и в режиме чередования до 7.2 MSPS, а в новых сериях G4 еще быстрее. Плюс аппаратный oversampling (впрочем и в не_новых 16-битных dsPIC33 встречается).
Но STMelectronic успели на все грабли наступить, пока до этих серий дошли. А МИК32 совсем новый. Например, Миландр на К1986ВЕ несколько (7?) ревизий выпустили пока всё исправили, может через пол года и МИКРОН в новых ревизиях шум АЦП уменьшит.
Ну какая точность измерения 1 мВ? 1 мВ вам будет во всяком проводе наводить, например, телевещание. Чтобы говорить о точности (не о цене дискрета) в 1 мВ, нужно очень серьёзно вложиться в схемотехнику и конструктив, и точно не во встроенном в МК АЦП.
Инициализация АЦП очень странная, завел только используя Hal (посмотрел внутри функцию инициализации, там прям какая то магия происходит,ну а на регистрах провозился два дня, так и не полетел он у меня, примерно все тоже самое делал. В руководстве на мк хотелось бы примеры запуска различной периферии , как у стма например, в конце референс мануала. Мое мнение сыроват ещё мк и документацию немного поподробнее бы сделать.
На базе чего сделан набортный отладчик в КИТе?
внутри uploader есть interface/ftdi/m-link.cfg думаю что нам ftdi FT2232HL, потом похоже переименовали в mikron-link.cfg но гипотеза подтверждается содержимым этого файла
На базе FT2232H разумеется.
Del
Чтобы измерять сигналы различных каналов необходимо динамически переключать (перекоммутировать каналы)
Это не проблема. DMA по таймеру вполне способен достаточно точно переключать каналы.
Также и для снятия сигнала с АЦП на большой скорости (до 0,8 MSPS, вроде, у этого мк при тактовой частоте всего 32 MHz) без DMA не успеть. Но вот беда, может кто-то подскажет, я не нашёл ни в документации, ни в примерах, как у этого мк зациклить DMA.
UPD: Программная коммутация, как в вашем примере, тоже будет работать. Только сначала надо запустить преобразование, потом поменять канал, потом ждать.
Спасибо за интересный отчет. Не понял - почему нельзя в коде перенаправить вывод на UART1, вместо этого кидать провода.
В коде без проблем можно перенаправить вывод на UART1, но все примеры сделаны с захардкоженным UART0 - замаешься править код.
https://github.com/MikronMIK32/mik32v2-shared/blob/main/libs/uart_lib.c
void attribute((weak)) xputc(char c)
{
UART_WriteByte(UART_0, c);
UART_WaitTransmission(UART_0);
}
Не за что.
Программирование на MIK32 Амур опытно внедряется в школьную программу для учащихся 7-11 классов https://mikron.ru/company/press-center/news/8937/
ОС Embox от СПбГУ на MIK32 АМУР https://habr.com/ru/articles/844288/
Тестирование встроенного АЦП (ADC) на MIK32 AMUR (К1948ВК018)