Далее цитаты:
- Плотнячком взялся за АЦП CH32V203. Что могу сказать? Работет приятно, если подходить с умом. На шкале 10В, укладываюсь в 5мВ ошибки после калибровки. По температуре не гонял - у меня все измерения относительные и лишь нелинейность может напакостить, но она в пределах паспортного или лучше.
У меня и передискретизация, и отброс отсчётов после смены канала, и обратная связь от аналогового выхода...
- А попробуй поиграть питанием?
- Пофиг. У меня все измерения - реляционные. Оцифровываю не только сигнал, но и его опорные уровни - крайние точки шкалы. Поэтому и синфазная помеха давится, и нет зависимости от питания, до тех пор, пока сигналы на входах АЦП не вышли за пределы шкалы самого АЦП. Собственно, для контроля выхода за края шкалы АЦП, я и запустил аналог-вочдог, чтобы просигналить: "Внимание: по такому-то каналу данные ненадёжны, вышли за край шкалы!"
- Посреди диапазона ступеньки нету? Или фильтрация всё убирает?
- Не, у меня шумок, там, под 20 отсчётов.
- ?
- Ага, спасибо, припоминаю. Но у меня совсем другой подход к АЦП и выборкам. Всегда стремлюсь оцифровывать быстрее и шумнее, чтобы такие дефекты размазывались и не морочили мне голову. Решаю вопросы цифровой фильтрацией. Да, скорее всего, если приглядеться, будет видна неоднородность. Но будучи размазанной дизерингом с размахом пордяка 20 отсчётов, она будет пренебрежимо мала.
- Она не может быть пренебрежимо мала даже на шуме в 20 отсчётов p2p
- Я автор ТЗ и разработчик. Я ей пренебрегаю директивно.
- отброс отсчетов после смены - интересно. И сколько времени ему надо на стабилизацию?
- На максимальной скорости выборки, отбрасываю два отсчёта после переключения. Иначе, если лезть на 1/100000 деление шкалы, заметно. Для обычной работы достаточно один отсчёт отбросить. Стал отбрасывать два, когда от 1/10000 перешёл на 1/100000.
- ваще не понял. Как вачдог к АЦП можно привязать 😳
- Analog Watchdog. Это функция АЦП. Идёт выборка, сканирование разных каналов. И тут БАЦ! Прерывание вочдога! Как понять, какой канал, из последовательности сканирования, был оцифрован и вызвал сработку собаки?
- Собака на канал настраивается
Вообще-то
- Мне нужно все мониторить. И я выбрал все. Там есть такой вариант.
- Тогда только перебором
- Нет, я придумал как. Настраиваю высшим приоритетом, с вложенностью (чтобы прерывало любые другие прерывания) прерывание АЦП (вочдога). И как только сработало, ориентируюсь по счётчику DMA - он как раз, пока шёл вход в прерывание, уже щёлкнул. Оно, собственно, хорошо заработало, я просто ошибся с порядком выборки.
- о как. Надо почитать, я думал сторожевик вообще независимый
- Да, независимый, но работает только по результату преобразования АЦП - без результата АЦП ему не с чем сравнивать пороги. В этом и нюанс - нужно как можно скорее разобраться, к какому каналу принадлежала выборка, на которую вочдог сагрился.
...
АЦП в CH32V203. Получилось. Если Analog Watchdog настроен на сработку на всех каналах и работает DMA, то по значению счётчика CNTR, можно сделать привязку к номеру канала, на котором случилась сработка вочдога. Главное, вычитать номер канала оперативно, до завершения следующего преобразования.