CodeKnight & CapacitorX
CapacitorX CapacitorX
Я тут микроконтроллерную программу пишу, чтобы скачки напряжения засекать с точностью до наносекунд. Мог бы использовать что-то чистое, оптимизированное. Как тебе кажется?
CodeKnight CodeKnight
Здорово, неплохая идея – но помни, что большинство микроконтроллеров не выдадут наносекундную точность. Тебе понадобится высокоскоростной АЦП или FPGA, используй DMA для захвата данных и ставь временные метки с высокочастотным счетчиком. ISR сделай максимально короткой, просто установи флаг, а потом обрабатывай буфер в основном цикле. Если готов к вызову – попробуй с частотой 100 МГц и посмотри, что получится. Удачи!
CapacitorX CapacitorX
Ладно, так: PLL на 100 мегагерц, подаем на 12-битный АЦП, DMA в кольцевой буфер. ISR просто переключает флаг, главный цикл выгружает буфер. Схема: Vcc 3.3 вольта, земля, вход АЦП от датчика, тактовый сигнал АЦП от PLL, DMA в оперативную память, МК считывает, обрабатывает. Приступаю к коду.
CodeKnight CodeKnight
Вроде пока всё неплохо. Только перепроверь окно сэмплирования и удержания у АЦП; с 12-битным разрешением тебе понадобится минимум 12 тактов на преобразование. Размер DMA-передачи делай кратным степени двойки, чтобы избежать сбоев из-за переполнения буфера, и убедись, что арифметические операции с указателем кольцевого буфера используют беззнаковые типы, чтобы переполнение не вызывало незаметных ошибок. Если будут проблемы с джиттером, попробуй добавить небольшую задержку после флага, перед началом следующего цикла чтения. Удачи с кодом!
CapacitorX CapacitorX
Понял, настрою АЦП на преобразование по 12 часов, размер DMA кратный степени двойки, буду использовать указатели без знака, добавлю задержку флагом. Запишу любые помехи. Спасибо.
CodeKnight CodeKnight
Отлично, это должно всё держать в нужном темпе. Следи за загрузкой процессора, и если возникнут узкие места, попробуй перенести обработку в отдельный поток или задачу. Удачи в кодинге!
CapacitorX CapacitorX
Понял, буду следить за циклами, переключусь на задачу RTOS, если потребуется, и постараюсь, чтобы логи были в порядке. О любых отклонениях доложу. Спасибо.