ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
18 августа
1531741
Nikolay_Po (21.07.2025 09:20, просмотров: 122)
АЦП CH32V203. Довелось поработать. Раз уж товарищ Клён про АЦП 303го пишет, напишу и я, пока не забыл. Выкладывал ранее в тему RISC-V в Телеграм: 

https://t.me/riscv_mcu/164240

Далее цитаты:


- Плотнячком взялся за АЦП CH32V203. Что могу сказать? Работет приятно, если подходить с умом. На шкале 10В, укладываюсь в 5мВ ошибки после калибровки. По температуре не гонял - у меня все измерения относительные и лишь нелинейность может напакостить, но она в пределах паспортного или лучше.

У меня и передискретизация, и отброс отсчётов после смены канала, и обратная связь от аналогового выхода...


- А попробуй поиграть питанием?


- Пофиг. У меня все измерения - реляционные. Оцифровываю не только сигнал, но и его опорные уровни - крайние точки шкалы. Поэтому и синфазная помеха давится, и нет зависимости от питания, до тех пор, пока сигналы на входах АЦП не вышли за пределы шкалы самого АЦП. Собственно, для контроля выхода за края шкалы АЦП, я и запустил аналог-вочдог, чтобы просигналить: "Внимание: по такому-то каналу данные ненадёжны, вышли за край шкалы!"


- Посреди диапазона ступеньки нету? Или фильтрация всё убирает?


- Не, у меня шумок, там, под 20 отсчётов.


- ?

https://t.me/riscv_mcu/25667


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


- Она не может быть пренебрежимо мала даже на шуме в 20 отсчётов p2p


- Я автор ТЗ и разработчик. Я ей пренебрегаю директивно.


- отброс отсчетов после смены - интересно. И сколько времени ему надо на стабилизацию?


- На максимальной скорости выборки, отбрасываю два отсчёта после переключения. Иначе, если лезть на 1/100000 деление шкалы, заметно. Для обычной работы достаточно один отсчёт отбросить. Стал отбрасывать два, когда от 1/10000 перешёл на 1/100000.


- ваще не понял. Как вачдог к АЦП можно привязать 😳


- Analog Watchdog. Это функция АЦП. Идёт выборка, сканирование разных каналов. И тут БАЦ! Прерывание вочдога! Как понять, какой канал, из последовательности сканирования, был оцифрован и вызвал сработку собаки?


- Собака на канал настраивается

Вообще-то


- Мне нужно все мониторить. И я выбрал все. Там есть такой вариант.


- Тогда только перебором


- Нет, я придумал как. Настраиваю высшим приоритетом, с вложенностью (чтобы прерывало любые другие прерывания) прерывание АЦП (вочдога). И как только сработало, ориентируюсь по счётчику DMA - он как раз, пока шёл вход в прерывание, уже щёлкнул. Оно, собственно, хорошо заработало, я просто ошибся с порядком выборки.


- о как. Надо почитать, я думал сторожевик вообще независимый


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

...

АЦП в CH32V203. Получилось. Если Analog Watchdog настроен на сработку на всех каналах и работает DMA, то по значению счётчика CNTR, можно сделать привязку к номеру канала, на котором случилась сработка вочдога. Главное, вычитать номер канала оперативно, до завершения следующего преобразования.