Обработка сигналов, прерывания, жопа в общем
- Рязанцев Владислав
- Мудрый кот
- Сообщения: 1781
- Зарегистрирован: Пн июн 24, 2013 23:00:42
- Откуда: Казахстан
Обработка сигналов, прерывания, жопа в общем
Такой вот вопрос. Кто как реализует функции непрерывной обработки в реальном времени, допустим аналогового сигнала, если нужно делать что-то еще.
Ну вот допустим есть f103. Мне нужно взять АЦП, скорректировать его по какому-то алгоритму и вывести в ЦАП, и это все с минимальной задержкой. Недавно сталкивался с этим. Но кроме этого мне нужно выводить значения на дисплей, но можно не так часто, скажем раз в секунду. А если еще получить что-то по UART и отправить.
И того при выводе на дисплей или работе с UART получаем ступеньку на синусе.
Решил очень топорно- просто стал посылать нужное в UART, а там уже AVR c дисплеем. Итого что-то около 200Гц идеального синуса в 12 бит получилось.
Загнать обработку в прерывание я так понимаю сломает UART как минимум на прием. Вот собственно и не понимаю как.
Ну вот допустим есть f103. Мне нужно взять АЦП, скорректировать его по какому-то алгоритму и вывести в ЦАП, и это все с минимальной задержкой. Недавно сталкивался с этим. Но кроме этого мне нужно выводить значения на дисплей, но можно не так часто, скажем раз в секунду. А если еще получить что-то по UART и отправить.
И того при выводе на дисплей или работе с UART получаем ступеньку на синусе.
Решил очень топорно- просто стал посылать нужное в UART, а там уже AVR c дисплеем. Итого что-то около 200Гц идеального синуса в 12 бит получилось.
Загнать обработку в прерывание я так понимаю сломает UART как минимум на прием. Вот собственно и не понимаю как.
- Реклама
Re: Обработка сигналов, прерывания, жопа в общем
я бы по прерыванию от uart rx/tx сделал простейшую запись в rx fifo и из tx fifо (софтовые кольцевые буферы) буквально 5-8инструкций.
а их заполнение и считывание делал бы в бесконечном цикле вместе с дисплейным алгоритмом ( который выполняется только если rx fifo далек от переполнения)
а обработки adc/dac сделать в прерывании по таймеру, c более низким приоритетом чем uart rx.
а их заполнение и считывание делал бы в бесконечном цикле вместе с дисплейным алгоритмом ( который выполняется только если rx fifo далек от переполнения)
а обработки adc/dac сделать в прерывании по таймеру, c более низким приоритетом чем uart rx.
- КРАМ
- Друг Кота
- Сообщения: 25327
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Обработка сигналов, прерывания, жопа в общем
[uquote="Рязанцев Владислав",url="/forum/viewtopic.php?p=4104046#p4104046"]Ну вот допустим есть f103. Мне нужно взять АЦП, скорректировать его по какому-то алгоритму и вывести в ЦАП, и это все с минимальной задержкой. Недавно сталкивался с этим. Но кроме этого мне нужно выводить значения на дисплей, но можно не так часто, скажем раз в секунду. А если еще получить что-то по UART и отправить.[/uquote]
Для сигнальной обработки есть DMA. И в качестве реквеста к нему источник в виде таймера.
Остальное зависит от диаграммы работы АЦП и ЦАПа. Из условия задачи непонятна эта самая диаграмма. Но вывод в ЦАП должен быть очевидно по таймеру и через DMA. Зазор между выборкой АЦП и выводом в ЦАП будет СТРОГО ДЕТЕРМИНИРОВАННЫМ, ибо определится таймером. И в этом зазоре делайте свой расчет и обрабатывайте УАРТ с необходимым приоритетом. УАРТ в силу своей тормознутости обычно на обработку никак не влияет. Только писать код желательно в CMSIS, чтобы уменьшить латентность обработки прерываний. И без колбэков, естественно...
Для сигнальной обработки есть DMA. И в качестве реквеста к нему источник в виде таймера.
Остальное зависит от диаграммы работы АЦП и ЦАПа. Из условия задачи непонятна эта самая диаграмма. Но вывод в ЦАП должен быть очевидно по таймеру и через DMA. Зазор между выборкой АЦП и выводом в ЦАП будет СТРОГО ДЕТЕРМИНИРОВАННЫМ, ибо определится таймером. И в этом зазоре делайте свой расчет и обрабатывайте УАРТ с необходимым приоритетом. УАРТ в силу своей тормознутости обычно на обработку никак не влияет. Только писать код желательно в CMSIS, чтобы уменьшить латентность обработки прерываний. И без колбэков, естественно...
Re: Обработка сигналов, прерывания, жопа в общем
Либо 2 МК, либо программируемая логика.
Re: Обработка сигналов, прерывания, жопа в общем
Основная задача - АЦП+ЦАП (предпочтение наличию аппаратных модулей).
Индикация фоном на основе таймера и пары буферов.
То же и с UART - работа через буфер при скорости, допускающей задержку считывания данных на интервал на порядок более, чем циклы обработки данных.
Но таки максимум быстродействия при дополнительном МК, занимающимся обработкой данных АЦП+ЦАП.

Индикация фоном на основе таймера и пары буферов.
То же и с UART - работа через буфер при скорости, допускающей задержку считывания данных на интервал на порядок более, чем циклы обработки данных.
Но таки максимум быстродействия при дополнительном МК, занимающимся обработкой данных АЦП+ЦАП.
- Реклама
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: Обработка сигналов, прерывания, жопа в общем
У STM32 есть DMA, что очень хорошо расширяет возможности!
Ну и, понятное дело, нельзя пользоваться калокубом.
Ну и, понятное дело, нельзя пользоваться калокубом.
- КРАМ
- Друг Кота
- Сообщения: 25327
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Обработка сигналов, прерывания, жопа в общем
[uquote="BOB51",url="/forum/viewtopic.php?p=4104325#p4104325"]Но таки максимум быстродействия при дополнительном МК, занимающимся обработкой данных АЦП+ЦАП.
[/uquote]
Второй МК тут вообще ни к чему. Проблема обмена с быстрым процессом так и останется.
Вангую, что проблема ТС совсем не в скорости, а в переменной задержке между захватом сигнала ADC и его выводом в DAC. Поэтому важно лишь обеспечить правильный захват по Найквисту и ОДНОВРЕМЕННО с захватом выводить предыдущее пересчитанное значение в DAC. Будет задержка на один отсчет на выходе относительно входа и ПОЛНОЕ СОХРАНЕНИЕ ФОРМЫ СИГНАЛА.
ЗЫ. Ничего не понял из опасений ТС за прием по УАРТу. Это вообще асинхронный процесс. Самого низкого приоритета. Байт будет в буфере приема до завершения приема следующего байта. Там времени туева хуча на обработку буфера в коде.
Второй МК тут вообще ни к чему. Проблема обмена с быстрым процессом так и останется.
Вангую, что проблема ТС совсем не в скорости, а в переменной задержке между захватом сигнала ADC и его выводом в DAC. Поэтому важно лишь обеспечить правильный захват по Найквисту и ОДНОВРЕМЕННО с захватом выводить предыдущее пересчитанное значение в DAC. Будет задержка на один отсчет на выходе относительно входа и ПОЛНОЕ СОХРАНЕНИЕ ФОРМЫ СИГНАЛА.
ЗЫ. Ничего не понял из опасений ТС за прием по УАРТу. Это вообще асинхронный процесс. Самого низкого приоритета. Байт будет в буфере приема до завершения приема следующего байта. Там времени туева хуча на обработку буфера в коде.
Re: Обработка сигналов, прерывания, жопа в общем
на высоких скоростях uart без подтверждения готовности приемника нередко требует довольно оперативного зачитывания данных чтоб избежать потерь, я не читал про f103 но нередко uart без аппаратного fifo, точнее fifo на 1 байт)).
а синхронизировать adc/dac обмен кмк нужно в зависимости от тяжести алгоритма обработки, если это безусловные 10 инструкций скажем или легко подравнять по тактам то можно в коротком таймерном пререывании с высшим приоритетом зачитать/обработать/ответить, не мудрствуя лукаво ...
а иначе в таймере только зачитывать adc в буфер и выкидывать из буфера вывода в dac а глубина буферов (задержка выдачи в dac) будет определяться латентностью алгоритма и производительностью оставшейся от других задач. dma - не знаю насколько даст преимущество, если речь о паре байтов.
а синхронизировать adc/dac обмен кмк нужно в зависимости от тяжести алгоритма обработки, если это безусловные 10 инструкций скажем или легко подравнять по тактам то можно в коротком таймерном пререывании с высшим приоритетом зачитать/обработать/ответить, не мудрствуя лукаво ...
а иначе в таймере только зачитывать adc в буфер и выкидывать из буфера вывода в dac а глубина буферов (задержка выдачи в dac) будет определяться латентностью алгоритма и производительностью оставшейся от других задач. dma - не знаю насколько даст преимущество, если речь о паре байтов.
- КРАМ
- Друг Кота
- Сообщения: 25327
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Обработка сигналов, прерывания, жопа в общем
О каких "высоких скоростях" УАРТ идёт речь? Даже при рейте 115200 байт принимается почти 90 мкс. Это для контроллера с циклом в 20 нс будет составлять 4500 машинных циклов. ЧЕТЫРЕ С ПОЛОВИНОЙ ТЫСЯЧИ, Карл!!! )))
И ДМА обеспечит СИНХРОНИЗМ захвата данных и вывода на ЦАП. При формировании отсчётов сигнала важна стабильность интервалов.Ни в каких прерываниях её не обеспечить.
Забудьте о задержке. Она не имеет особого значения если стабильна и не пропускает отсчеты.
Вы пытаетесь решить сигнальные задачи хаотичными любительскими методами.
Альтернативой ДМА при выводе в ЦАП может быть только наличие у ЦАПа синхронного режима работы, когда программный вывод в буфер ЦАПа не изменяет выходной сигнал, а лишь при приходе синхросигнала буфер защелкивается в выходной регистр ЦАПа и на его выходе появляется новое значение.
И ДМА обеспечит СИНХРОНИЗМ захвата данных и вывода на ЦАП. При формировании отсчётов сигнала важна стабильность интервалов.Ни в каких прерываниях её не обеспечить.
Забудьте о задержке. Она не имеет особого значения если стабильна и не пропускает отсчеты.
Вы пытаетесь решить сигнальные задачи хаотичными любительскими методами.
Альтернативой ДМА при выводе в ЦАП может быть только наличие у ЦАПа синхронного режима работы, когда программный вывод в буфер ЦАПа не изменяет выходной сигнал, а лишь при приходе синхросигнала буфер защелкивается в выходной регистр ЦАПа и на его выходе появляется новое значение.
Последний раз редактировалось КРАМ Вт окт 12, 2021 14:17:48, всего редактировалось 1 раз.
Re: Обработка сигналов, прерывания, жопа в общем
50MHz
... дауж и разработчики ставят 2й mpu чтоб оcвободить такого монстра от "лишних" задач ... 
никак не избавлюсь от привычки что каждый такт может быть на счету но да, это уже слишком архаичный подход ...
да, c прерываниями асинхронность 1-3такта обычно тоесть целых 60nS у нас)
никак не избавлюсь от привычки что каждый такт может быть на счету но да, это уже слишком архаичный подход ...
да, c прерываниями асинхронность 1-3такта обычно тоесть целых 60nS у нас)
- КРАМ
- Друг Кота
- Сообщения: 25327
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Обработка сигналов, прерывания, жопа в общем
[uquote="AlexS4",url="/forum/viewtopic.php?p=4104632#p4104632"]да, c прерываниями асинхронность 1-3такта обычно тоесть целых 60nS у нас)[/uquote]
Откуда дровишки, милейший? Латентность прерываний у АРМов выше нулевых кортексов плавает от 6 до 20 машинных циклов. И нахрена грузить код всякой белибердой тогда, когда драйвер кода способен легко решать задачи исходной настройкой? Только потому, что кому то трудно понять принципы работы?
ЗЫ 50 МГц для сигнальных задач - начальная школа. И там многое зависит не столько от частоты, сколько от архитектуры и особенностей периферии.
Откуда дровишки, милейший? Латентность прерываний у АРМов выше нулевых кортексов плавает от 6 до 20 машинных циклов. И нахрена грузить код всякой белибердой тогда, когда драйвер кода способен легко решать задачи исходной настройкой? Только потому, что кому то трудно понять принципы работы?
ЗЫ 50 МГц для сигнальных задач - начальная школа. И там многое зависит не столько от частоты, сколько от архитектуры и особенностей периферии.
Re: Обработка сигналов, прерывания, жопа в общем
>Латентность прерываний у АРМов выше нулевых кортексов плавает от 6 до 20 машинных циклов.
оопс, не работал с ними
.
конечно нужно использовать доступный аппаратный функционал, и вообще странно не знать mpu c которым работаешь, я не пропогандирую колхоз-программирование
, просто тема в общем разделе а не в arm/dsp и я подумал что взгляд из другого мира тоже может быть полезен. тс же не обозначил конкретные цифры времен и как он выбрал mpu.
оопс, не работал с ними
конечно нужно использовать доступный аппаратный функционал, и вообще странно не знать mpu c которым работаешь, я не пропогандирую колхоз-программирование
- КРАМ
- Друг Кота
- Сообщения: 25327
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Обработка сигналов, прерывания, жопа в общем
Контроллер он выбрал бюджетный (если не учитывать нынешнюю ценовую инфернальность с АРМами) и достаточный для решения задачи.
Не вижу проблем.
Решение задачи несложное, но нужны подробности, о чем я и написал в своем первом комментарии в теме.
Не вижу проблем.
Решение задачи несложное, но нужны подробности, о чем я и написал в своем первом комментарии в теме.
- Рязанцев Владислав
- Мудрый кот
- Сообщения: 1781
- Зарегистрирован: Пн июн 24, 2013 23:00:42
- Откуда: Казахстан
Re: Обработка сигналов, прерывания, жопа в общем
КРАМ ругается что я тему запустил. Эх.
Вопрос тут скорее общий, а не по конкретной задаче.
Вопрос звучит скорее так- как распараллелить выполнение кода чтобы не просрать такты на задачи бывающие иногда, чтобы не попортить задачи выполняющиеся всегда и зависящие от всяких задержек.
Так например вывод на дисплей отнимает кучу тактов, что очень плохо отражается на выводе ЦАП.
Вопрос тут скорее общий, а не по конкретной задаче.
Вопрос звучит скорее так- как распараллелить выполнение кода чтобы не просрать такты на задачи бывающие иногда, чтобы не попортить задачи выполняющиеся всегда и зависящие от всяких задержек.
Так например вывод на дисплей отнимает кучу тактов, что очень плохо отражается на выводе ЦАП.
- КРАМ
- Друг Кота
- Сообщения: 25327
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Обработка сигналов, прерывания, жопа в общем
Вам же написали. Вывод в ЦАП должен тактироваться от таймера, что в зависимости от особенностей ЦАПа делается либо самим ЦАПом, либо через ДМА с самым высоким приоритетом.
- Transformer-V
- Друг Кота
- Сообщения: 4225
- Зарегистрирован: Пн окт 03, 2016 22:50:22
- Контактная информация:
Re: Обработка сигналов, прерывания, жопа в общем
[uquote="Рязанцев Владислав",url="/forum/viewtopic.php?p=4104046#p4104046"]Мне нужно взять АЦП, скорректировать его по какому-то алгоритму и вывести в ЦАП, и это все с минимальной задержкой. Недавно сталкивался с этим. Но кроме этого мне нужно выводить значения на дисплей, но можно не так част[/uquote]
После корректировки выводить значения на дисплей и читать/писать в UART только потом выводить на ЦАП.
Добавлено after 1 minute 31 second:
[uquote="Рязанцев Владислав",url="/forum/viewtopic.php?p=4114470#p4114470"]Так например вывод на дисплей отнимает кучу тактов, что очень плохо отражается на выводе ЦАП.[/uquote]
Прикрутить дополнительный MCU к дисплею или использовать дисплей с SPI шиной.
После корректировки выводить значения на дисплей и читать/писать в UART только потом выводить на ЦАП.
Добавлено after 1 minute 31 second:
[uquote="Рязанцев Владислав",url="/forum/viewtopic.php?p=4114470#p4114470"]Так например вывод на дисплей отнимает кучу тактов, что очень плохо отражается на выводе ЦАП.[/uquote]
Прикрутить дополнительный MCU к дисплею или использовать дисплей с SPI шиной.
- КРАМ
- Друг Кота
- Сообщения: 25327
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Обработка сигналов, прерывания, жопа в общем
[uquote="Transformer-V",url="/forum/viewtopic.php?p=4115353#p4115353"]Прикрутить дополнительный MCU к дисплею[/uquote]
Да чего там стесняться... Давай сразу ТРИ контроллера. Нет, лучше пять. Может еще на что нибудь пригодится...

Да чего там стесняться... Давай сразу ТРИ контроллера. Нет, лучше пять. Может еще на что нибудь пригодится...
- Transformer-V
- Друг Кота
- Сообщения: 4225
- Зарегистрирован: Пн окт 03, 2016 22:50:22
- Контактная информация:
Re: Обработка сигналов, прерывания, жопа в общем
[uquote="КРАМ",url="/forum/viewtopic.php?p=4115459#p4115459"]Да чего там стесняться... Давай сразу ТРИ контроллера. Нет, лучше пять. Может еще на что нибудь пригодится...
[/uquote]
Ну если человеку не хватает ресурсов на LCD дисплей, почему бы нет. Лучше я думаю использовать микроконтроллер с более высокой частотой, чем текущий.
Ну если человеку не хватает ресурсов на LCD дисплей, почему бы нет. Лучше я думаю использовать микроконтроллер с более высокой частотой, чем текущий.
- КРАМ
- Друг Кота
- Сообщения: 25327
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Обработка сигналов, прерывания, жопа в общем
[uquote="Transformer-V",url="/forum/viewtopic.php?p=4115471#p4115471"]Лучше я думаю использовать микроконтроллер с более высокой частотой, чем текущий.[/uquote]
Нет, не лучше. Во первых, текущий уже есть, а в нынешних диспозициях с другими проблема. Во вторых, другой потребует переделки железа. Ну и в третьих, я уже ранее сказал, он РЕШАЕТ поставленную задачу. Просто нужно "его правильно готовить"...
Нет, не лучше. Во первых, текущий уже есть, а в нынешних диспозициях с другими проблема. Во вторых, другой потребует переделки железа. Ну и в третьих, я уже ранее сказал, он РЕШАЕТ поставленную задачу. Просто нужно "его правильно готовить"...
- Transformer-V
- Друг Кота
- Сообщения: 4225
- Зарегистрирован: Пн окт 03, 2016 22:50:22
- Контактная информация:
Re: Обработка сигналов, прерывания, жопа в общем
[uquote="КРАМ",url="/forum/viewtopic.php?p=4115481#p4115481"]Нет, не лучше. Во первых, текущий уже есть, а в нынешних диспозициях с другими проблема. Во вторых, другой потребует переделки железа. Ну и в третьих, я уже ранее сказал, он РЕШАЕТ поставленную задачу.[/uquote]
Тогда отказаться от дисплея или использовать символьный монохромный некрасивый дисплей. Графические дисплеи требуют много ресурсов, подготовительная отрисовка информации в буфер RGB отнимает такты и процессорное время и частоты 16 MHz для графических дисплеев мало, просматривать слайды такое себе удовольствие. Подготовительная отрисовка и обработка входящей для дисплея информации можно реализовать как раз на отдельном микроконтроллере, который не будет отнимать процессорное время основного MCU.
Тогда отказаться от дисплея или использовать символьный монохромный некрасивый дисплей. Графические дисплеи требуют много ресурсов, подготовительная отрисовка информации в буфер RGB отнимает такты и процессорное время и частоты 16 MHz для графических дисплеев мало, просматривать слайды такое себе удовольствие. Подготовительная отрисовка и обработка входящей для дисплея информации можно реализовать как раз на отдельном микроконтроллере, который не будет отнимать процессорное время основного MCU.


