Время срабатывания таймеров и их точность

Кто любит RISC в жизни, заходим, не стесняемся.
DmitryR
Встал на лапы
Сообщения: 100
Зарегистрирован: Ср авг 31, 2022 12:10:34

Re: Время срабатывания таймеров и их точность

Сообщение DmitryR »

MLX90640,
Я когда-то на другом форуме этот вопрос поднимал, не знаю, можно ли тут оставлять ссылки на другие форумы, но там вся дискуссия сводится к этому
Разве вы не знаете про вложенные прерывания у STM32?
Установите приоритет прерывания EXTI1 выше чем у таймера планировщика и оно будет прерывать прерывание таймера.
Т.е. ставим приоритет прерывания от 4 до 0 (у ОС от 15 до 5 включительно) и не используем функции ОС в этих прерываниях и все будет норм. Можно даже попробовать придумать какую-нибудь программку, чтобы это проверить
Реклама
a797945
Мучитель микросхем
Сообщения: 446
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Откуда: 69.Ржев

Re: Время срабатывания таймеров и их точность

Сообщение a797945 »

проблема - нет возможности запускать три таймера от одного?
а такой колхоз вам поможет? - снаружи соединить таймера, запуск внешним сиглалом, три ноги на одну.
кажется в этой задаче должно быть только одно прерывание, со смыслом "а теперь можно загрузить новые значения для следующего цикла", а остальная работа чисто аппаратно
Реклама
Аватара пользователя
Andrey_B
Сверлит текстолит когтями
Сообщения: 1101
Зарегистрирован: Пт апр 09, 2010 16:06:38
Откуда: Тула

Re: Время срабатывания таймеров и их точность

Сообщение Andrey_B »

[uquote="DmitryR",url="/forum/viewtopic.php?p=4281105#p4281105"]Для этого попробовал разные подходы:[/uquote]
В зависимости от требуемого диапазона интервалов, думаю возможно сделать всё полностью аппаратно, без всяких прерываний. TEHb правильно посоветовал про RM0385, там на страницах 713, 794, таблицы внутренних соединений триггеров. При беглом рассмотрении схема видится так:
- выбираем запускающим таймер TMR1, он будет синхронно запускать 4 других таймера (на вашей картинке 4 сигнала ведь).
- режим TMR1 - слэйв триггер-моде, источник входного триггера - ETR1, перепадом по этой ноге будем стартовать весь хоровод. Сам он ни каких задержек не делает, просто служит "синхронизатором".
- выходной триггер для TMR1 - по запуску (Enable).
- по таблицам подбираем таймеры, у которых один и тот-же входной сигнал триггера (это ITR0) подключен к TMR1. Это TMR2, TMR3, TMR4, TMR8.
- настраиваем эти таймеры как слейв триггер-моде, источник входного триггера ITR0, генерация одного периода шим с требуемыми задержками по одному из каналов.
- тактирование всех таймеров - внутреннее.
- по вкусу можно поставить биты MSM.

Конфигурите в кубе все таймеры, выставляете требуемые задержки через регистры, можно вручную (без куба), запускаете тоже нужными битами вручную. Если стартовать нужно не сигналом извне, а событием, то можно просто запускать TMR1, без ETR.

Почитайте про таймеры тут, всё очень подробно. Там несколько частей.
a797945
Мучитель микросхем
Сообщения: 446
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Откуда: 69.Ржев

Re: Время срабатывания таймеров и их точность

Сообщение a797945 »

[uquote="Andrey_B",url="/forum/viewtopic.php?p=4281895#p4281895"]...подбираем таймеры, у которых один и тот-же входной сигнал триггера (это ITR0) подключен к TMR1. Это TMR2, TMR3, TMR4, TMR8.[/uquote]
Если так, то и колхоз не нужен. Все скоммутируются внутри
Реклама
Эиком - электронные компоненты и радиодетали
DmitryR
Встал на лапы
Сообщения: 100
Зарегистрирован: Ср авг 31, 2022 12:10:34

Re: Время срабатывания таймеров и их точность

Сообщение DmitryR »

>TEHb<, MLX90640, Eddy_Em, Мурик, a797945, Andrey_B,
Спасибо всем кто откликнулся, советы были очень полезны, реализовал все аппаратно на таймерах в режиме one pulse mode с триггерным запуском от главного таймера, избавился от прерываний, вроде как исключил нежелательное влияние ОС на работу таймеров (если таковое могло быть), в целом все работает как и требовалось.

Попробую теперь немного усложнить, а именно добавить еще один таймер, который будет запускать АЦП в нужное время и запускать главный таймер, от которого запускаются все остальные, от внешнего прерывания, ну и чтобы это все было максимально без участия процессора
Реклама
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: Время срабатывания таймеров и их точность

Сообщение jcxz »

[uquote="DmitryR",url="/forum/viewtopic.php?p=4281105#p4281105"]2) Какой подход для решения данной задачи будет самым правильным?[/uquote]1. Выбрать МК наиболее подходящий для решения задачи.
2. Если требуется формирование импульсов по нескольким каналам с точной выдержкой их временнЫх параметров (внутри канала и временнЫе соотношения между каналами), то формироваться такие импульсы должны только полностью аппаратно (соответствующей периферией МК), но никак не программно.
Ваша задача легко решается на МК имеющих соответствующие ресурсы. Например - серия XMC4xxx от Infineon: таймеры у него имеют аппаратные связи между друг другом и позволяют строить работу таймеров полностью никак не зависящую от длительности выполнения кода. Позволяют выполнять запуск или перезапуск произвольным таймером в единый момент времени одной единственной командой записи в регистр управления. Также позволяют пробрасывать сигналы о событиях внутри одного какого-то таймера на управляющие входы (старт/стоп, перезагрузка и др.) других произвольных таймеров.
Также есть и другие МК с подобной периферией.
Если ваш МК не имеет подобных возможностей, то почему выбрали его?

[uquote="DmitryR",url="/forum/viewtopic.php?p=4281105#p4281105"]3) Может просто я что-то делаю не так?[/uquote]Пытаетесь делать программно несколько последовательных операций и ожидаете что они выполнятся мгновенно. Или ожидаете, что длительность выполнения кода будет всегда постоянна. Это не так.
Если нужна точная выдержка временнЫх параметров каких-то сигналов на пинах, то не должно быть в принципе никакой привязки ко времени выполнения кода.

Добавлено after 7 minutes 53 seconds:
[uquote="DmitryR",url="/forum/viewtopic.php?p=4281832#p4281832"]
Разве вы не знаете про вложенные прерывания у STM32?
Установите приоритет прерывания EXTI1 выше чем у таймера планировщика и оно будет прерывать прерывание таймера.
Т.е. ставим приоритет прерывания от 4 до 0 (у ОС от 15 до 5 включительно) и не используем функции ОС в этих прерываниях и все будет норм. Можно даже попробовать придумать какую-нибудь программку, чтобы это проверить[/uquote]
Вообще-то - ISR таймера планировщика ОС всегда должен иметь приоритет ниже, чем у любого аппаратного ISR. Так как нет никакого смысла давать таймеру планировщика более высокий приоритет. А ниже приоритета таймера планировщика должен быть только приоритет PendSV.
Реклама
DmitryR
Встал на лапы
Сообщения: 100
Зарегистрирован: Ср авг 31, 2022 12:10:34

Re: Время срабатывания таймеров и их точность

Сообщение DmitryR »

Еще такой вопрос возник, может кто сталкивался, все таймеры настроены на PWM mode, у всех настроена (в кубе) подтяжка пинов к земле, по факту получается, что при подаче питания на мк, на всех этих выводах висит 1 вольт пистонного напряжения, и только в момент запуска таймеров сигнал становится нормальной формы и амплитуды от 0 до 3.3 вольт. В чем может быть проблема?
Аватара пользователя
>TEHb<
Друг Кота
Сообщения: 5742
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Откуда: Воронеж
Контактная информация:

Re: Время срабатывания таймеров и их точность

Сообщение >TEHb< »

У вас не двухтактный выход? Тогда без схему гадать сложно. Включите просто двухтактный выход и всё.
"Привет!" - соврал он.
Аватара пользователя
MLX90640
Опытный кот
Сообщения: 848
Зарегистрирован: Ср авг 03, 2022 05:22:56

Re: Время срабатывания таймеров и их точность

Сообщение MLX90640 »

Особенность режима PWM, в котором при значении счетчика меньше значения CCR, на выходе будет высокий уровень. Есть и второй режим с обратным поведением. Вы не стесняйтесь читать мануалы. Конфигуратор/кодогенератор Cube не заменяет и не отменяет мануалов!

Аааа, 1 Вольт неопределенного логического уровня? А на выход что-то еще физически подключено? И я что-то не понял, что такое "пистонное напряжение"?
DmitryR
Встал на лапы
Сообщения: 100
Зарегистрирован: Ср авг 31, 2022 12:10:34

Re: Время срабатывания таймеров и их точность

Сообщение DmitryR »

>TEHb<, Выход Push Pull, но только он alternate function push pull, из альтернатив только alternate function open drain

MLX90640,
Особенность режима PWM, в котором при значении счетчика меньше значения CCR, на выходе будет высокий уровень.
Вы не совсем так поняли, да, там есть такая настройка mode 1 и mode 2, выбран mode 2, таймер до CCR низкий уровень, потом высокий, в этом плане все нормально работает.
Проблема именно в том, что до старта таймеров PWM на выходе и пинов установлен уровень 1 вольт, т.е. вроде и не 0, но и не логическая 1. Все становится нормально только после запуска таймеров

Добавлено after 1 minute 31 second:
Аааа, 1 Вольт неопределенного логического уровня? А на выход что-то еще физически подключено? И я что-то не понял, что такое "пистонное напряжение"?
Не, все отключил от выходов

Опечатка, "постоянное напряжение")))
Вложения
3.png
(23.89 КБ) 60 скачиваний
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: Время срабатывания таймеров и их точность

Сообщение jcxz »

[uquote="DmitryR",url="/forum/viewtopic.php?p=4284028#p4284028"]Проблема именно в том, что до старта таймеров PWM на выходе и пинов установлен уровень 1 вольт, т.е. вроде и не 0, но и не логическая 1. Все становится нормально только после запуска таймеров[/uquote]Очевидно это третье состояние. Т.е. - нога в режиме GPIO-input.
Чтобы было 0 или 1 и до старта таймера, настройте эту ногу в режиме GPIO на вывод (0 или 1).

Добавлено after 5 minutes 15 seconds:
Хотя может у таймеров вашего МК есть состояние покоя и соответствующий уровень для него (в некоторых МК есть такое, не знаю как в вашем). Это состояние выставляется на ногу, когда мультиплексор вывода переключен на таймер, но сам таймер не запущен в работу. Читайте мануал (как уже посоветовали) - есть ли такое в вашем МК. Там об этом должно упоминаться.
a797945
Мучитель микросхем
Сообщения: 446
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Откуда: 69.Ржев

Re: Время срабатывания таймеров и их точность

Сообщение a797945 »

"уровень выходного сигнала определяется состоянием таймера, а также зависит от битов MOE, OSSI, OSSR, OISy, OISyN и CCyNE."
мне не довелось запариваться с такой ситуацией - готового совета не могу дать
Ответить

Вернуться в «ARM»