Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

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

Чт сен 01, 2022 20:36:37

MLX90640,
Я когда-то на другом форуме этот вопрос поднимал, не знаю, можно ли тут оставлять ссылки на другие форумы, но там вся дискуссия сводится к этому
Разве вы не знаете про вложенные прерывания у STM32?
Установите приоритет прерывания EXTI1 выше чем у таймера планировщика и оно будет прерывать прерывание таймера.

Т.е. ставим приоритет прерывания от 4 до 0 (у ОС от 15 до 5 включительно) и не используем функции ОС в этих прерываниях и все будет норм. Можно даже попробовать придумать какую-нибудь программку, чтобы это проверить

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

Чт сен 01, 2022 21:33:16

проблема - нет возможности запускать три таймера от одного?
а такой колхоз вам поможет? - снаружи соединить таймера, запуск внешним сиглалом, три ноги на одну.
кажется в этой задаче должно быть только одно прерывание, со смыслом "а теперь можно загрузить новые значения для следующего цикла", а остальная работа чисто аппаратно

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

Чт сен 01, 2022 23:17:16

Для этого попробовал разные подходы:

В зависимости от требуемого диапазона интервалов, думаю возможно сделать всё полностью аппаратно, без всяких прерываний. TEHb правильно посоветовал про RM0385, там на страницах 713, 794, таблицы внутренних соединений триггеров. При беглом рассмотрении схема видится так:
- выбираем запускающим таймер TMR1, он будет синхронно запускать 4 других таймера (на вашей картинке 4 сигнала ведь).
- режим TMR1 - слэйв триггер-моде, источник входного триггера - ETR1, перепадом по этой ноге будем стартовать весь хоровод. Сам он ни каких задержек не делает, просто служит "синхронизатором".
- выходной триггер для TMR1 - по запуску (Enable).
- по таблицам подбираем таймеры, у которых один и тот-же входной сигнал триггера (это ITR0) подключен к TMR1. Это TMR2, TMR3, TMR4, TMR8.
- настраиваем эти таймеры как слейв триггер-моде, источник входного триггера ITR0, генерация одного периода шим с требуемыми задержками по одному из каналов.
- тактирование всех таймеров - внутреннее.
- по вкусу можно поставить биты MSM.

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

Почитайте про таймеры тут, всё очень подробно. Там несколько частей.

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

Пт сен 02, 2022 04:44:30

...подбираем таймеры, у которых один и тот-же входной сигнал триггера (это ITR0) подключен к TMR1. Это TMR2, TMR3, TMR4, TMR8.

Если так, то и колхоз не нужен. Все скоммутируются внутри

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

Пн сен 05, 2022 06:18:16

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

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

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

Пн сен 05, 2022 14:21:33

2) Какой подход для решения данной задачи будет самым правильным?
1. Выбрать МК наиболее подходящий для решения задачи.
2. Если требуется формирование импульсов по нескольким каналам с точной выдержкой их временнЫх параметров (внутри канала и временнЫе соотношения между каналами), то формироваться такие импульсы должны только полностью аппаратно (соответствующей периферией МК), но никак не программно.
Ваша задача легко решается на МК имеющих соответствующие ресурсы. Например - серия XMC4xxx от Infineon: таймеры у него имеют аппаратные связи между друг другом и позволяют строить работу таймеров полностью никак не зависящую от длительности выполнения кода. Позволяют выполнять запуск или перезапуск произвольным таймером в единый момент времени одной единственной командой записи в регистр управления. Также позволяют пробрасывать сигналы о событиях внутри одного какого-то таймера на управляющие входы (старт/стоп, перезагрузка и др.) других произвольных таймеров.
Также есть и другие МК с подобной периферией.
Если ваш МК не имеет подобных возможностей, то почему выбрали его?

3) Может просто я что-то делаю не так?
Пытаетесь делать программно несколько последовательных операций и ожидаете что они выполнятся мгновенно. Или ожидаете, что длительность выполнения кода будет всегда постоянна. Это не так.
Если нужна точная выдержка временнЫх параметров каких-то сигналов на пинах, то не должно быть в принципе никакой привязки ко времени выполнения кода.

Добавлено after 7 minutes 53 seconds:
Разве вы не знаете про вложенные прерывания у STM32?
Установите приоритет прерывания EXTI1 выше чем у таймера планировщика и оно будет прерывать прерывание таймера.

Т.е. ставим приоритет прерывания от 4 до 0 (у ОС от 15 до 5 включительно) и не используем функции ОС в этих прерываниях и все будет норм. Можно даже попробовать придумать какую-нибудь программку, чтобы это проверить

Вообще-то - ISR таймера планировщика ОС всегда должен иметь приоритет ниже, чем у любого аппаратного ISR. Так как нет никакого смысла давать таймеру планировщика более высокий приоритет. А ниже приоритета таймера планировщика должен быть только приоритет PendSV.

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

Вт сен 06, 2022 17:15:42

Еще такой вопрос возник, может кто сталкивался, все таймеры настроены на PWM mode, у всех настроена (в кубе) подтяжка пинов к земле, по факту получается, что при подаче питания на мк, на всех этих выводах висит 1 вольт пистонного напряжения, и только в момент запуска таймеров сигнал становится нормальной формы и амплитуды от 0 до 3.3 вольт. В чем может быть проблема?

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

Вт сен 06, 2022 17:20:40

У вас не двухтактный выход? Тогда без схему гадать сложно. Включите просто двухтактный выход и всё.

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

Вт сен 06, 2022 17:20:58

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

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

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

Вт сен 06, 2022 17:35:41

>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 KiB) Скачиваний: 37

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

Вт сен 06, 2022 18:07:46

Проблема именно в том, что до старта таймеров PWM на выходе и пинов установлен уровень 1 вольт, т.е. вроде и не 0, но и не логическая 1. Все становится нормально только после запуска таймеров
Очевидно это третье состояние. Т.е. - нога в режиме GPIO-input.
Чтобы было 0 или 1 и до старта таймера, настройте эту ногу в режиме GPIO на вывод (0 или 1).

Добавлено after 5 minutes 15 seconds:
Хотя может у таймеров вашего МК есть состояние покоя и соответствующий уровень для него (в некоторых МК есть такое, не знаю как в вашем). Это состояние выставляется на ногу, когда мультиплексор вывода переключен на таймер, но сам таймер не запущен в работу. Читайте мануал (как уже посоветовали) - есть ли такое в вашем МК. Там об этом должно упоминаться.

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

Вт сен 06, 2022 18:32:46

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