Перейти к содержанию
    

stm32f4 tim oc+ic

Здравствуйте.

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

сечас на макете первый вариант кода работает так: таймер tim2 на первом канале вылавливает значение времени в тиках фронта датчика хола на коленвале, таймер крутится по кругу непрерывно. в прерывании захвата я забираю значение времени из него вычитаю предыдущее которое хранится в временной переменной. таким образом по каждому фронту я узнаю текущий период оборота КВ. тут же я расчитыааю задержку на импульс зажигания и записываю в регистры сравнетя ведомого tim5. которыйработает в одноимпульсном режиме one shot, с запуском через триггер захата в tim2.

все дубово, код не влияет на тайминги, нет джиттера ....но есть смутное ощущение...что можно сделать умнее.

я попробывал сделать тоже самое но на одном таймере. то есть захват работает также но включены еще и канал сравнения tim2, в его регистр я заношу значение текущего захваченного фронта + расчитання задержка. выходы молчат.

при совпадении генерится событие OC и прерывание. но как сбросить состояние выхода в момент следующего входного импульса? в стандартном режиме его сбрасывает по событию переполнения счетчика. можно канибудь настроить канал OC чтоб его сбрасывало от события захвата?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

нашел!

1. оказывается если в активный канал выхода сравнения поверху записать бит разрешения работы и при этом перед этим записать в регистр сравнения обновленное значение то канал опять сгенерит импульс.... случайно натыкал когда в отчаянии налету менял биты в отладчике и смотрел что будет... наверно в даташите это и написано но я за последние несколько лет наверно не до этого места по тайметам не дочитал☺

доделал макет с кодом. работает на одном таймере tim2 , на частоте врашения КВ в 60000 об/мин разрешению по углу поворота получается 1/6400 градуса, джиттер 12.5нс. это то что я и хотел. в перерывах между импульсами расчет угла и зарядка регистров.

2. можно пойти далее - записывать бит разрешения и свеже значение регистра сравнения через dma, тогда совсем дубово независимо от процессора времянка будет формироватся.

 

 

если кто так не пробывал можеттакая жеская по таймингам схема на одном таймере пригодится.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...