|
Таймер для генерации импульсов |
|
|
|
Mar 19 2018, 13:37
|
Группа: Участник
Сообщений: 11
Регистрация: 31-10-13
Из: СПб
Пользователь №: 78 983

|
Здравствуйте, уважаемые коллеги. Прошу помочь с решением задачи. Сразу оговорюсь, что я инженер-схематехник, и практического опыта программирования микроконтроллеров у меня нет. Задача такая, используя микроконтроллер STM32L476RG (можно другой серии, главное STM32) нужно генерировать сигнал на двух портах микроконтроллера как на прикрепленном изображении. Сигналы должны быть обязательно синхронизированы.  На данный момент я уже попытался по-разному решить эту задачу несколькими способами, в каждом из которых столкнулся с проблемами, опишу их: Способ 1: активировал два таймера (ведущий и ведомый), один отсчитывает длинные периоды по 15 мс и тактирует второй, который в режиме one pulse генерирует прямой и комплементарный сигнал, проблема состоит в том, что в инверсном канале, когда таймер 2 «бездействует» устанавливается 1 (это правильно по логике работы инверсного канала, но не удовлетворяет решению)  Способ 2: активировал два таймера, один отсчитывает длинные периоды по 15 мс второй считает короткие полупериоды 0,5 мкс порты переключаю вручную в обработчике прерываний, получается, довольно криво. Синхронизировать два канала не удается (сгенерированные импульсы смещены друг относительно друга) Способ 3: активировал 3 таймера один отсчитывает длинные периоды по 15 мс и тактирует второй, который генерирует два импульса и тактирует третий таймер, который генерирует одиночный импульс, проблема в том, что все это почему-то работает только с тактовой частотой контроллера 80 МГц, стоит только начать настраивать частоты тактирования контроллера или самих таймеров как все разваливается. Если у кого то есть идеи или готовое решение, пожалуйста, ответьте.
|
|
|
|
|
 |
Ответов
|
Mar 21 2018, 08:30
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(e-serg @ Mar 21 2018, 04:52)  Вариант, проверен на stm32f107 такт таймера 1мкс. у таймера используются два канала сравнения, два канала DMA, две таблицы в памяти. Сто раз уже эту байду обсуждали... Никакой жёсткой синхронности такой метод не даёт, только с точностью +-трамвайная остановка и в тепличных условиях (когда CPU остановлен/спит, никакие другие bus-master-ы в системе не работают). Достаточно хоть немного подумать головой что будет если в момент когда DMA нужно что-то переслать в GPIO-порт, шина окажется занятой (хоть всего на пару тактов). Будет постоянный джиттер фронтов сигналов, зависящий от приоритета DMA-каналов, работы других bus-master-ов в системе, кода выполняемого CPU, пятен на солнце...
|
|
|
|
|
Mar 21 2018, 14:21
|
Частый гость
 
Группа: Участник
Сообщений: 97
Регистрация: 24-07-08
Из: Иркутск
Пользователь №: 39 180

|
Цитата(jcxz @ Mar 21 2018, 17:30)  Сто раз уже эту байду обсуждали... Никакой жёсткой синхронности такой метод не даёт, только с точностью +-трамвайная остановка и в тепличных условиях (когда CPU остановлен/спит, никакие другие bus-master-ы в системе не работают). Достаточно хоть немного подумать головой что будет если в момент когда DMA нужно что-то переслать в GPIO-порт, шина окажется занятой (хоть всего на пару тактов). Будет постоянный джиттер фронтов сигналов, зависящий от приоритета DMA-каналов, работы других bus-master-ов в системе, кода выполняемого CPU, пятен на солнце... Ну ну, там вполне измеряемый и вычисляемый джиттер, трамвайная остановка, это в прерывании ноги переключать. Пятна на солнце призывать не надо, в системе не всегда один голый микроконтроллер.
|
|
|
|
Сообщений в этой теме
lomy Таймер для генерации импульсов Mar 19 2018, 13:37 A.Lex Посмотрите в Application note, например en.DM00236... Mar 20 2018, 11:48 lomy Спасибо за ответ.
Я активно использовал этот Appli... Mar 20 2018, 12:49 jcxz Цитата(lomy @ Mar 19 2018, 15:37) Сразу о... Mar 20 2018, 12:52 lomy Да, к сожалению, свободных программистов для этого... Mar 20 2018, 13:05 jcxz Цитата(lomy @ Mar 20 2018, 15:05) Если ес... Mar 20 2018, 13:11 lomy Хорошо, буду читать. Но разве там линии не полност... Mar 20 2018, 13:26 jcxz Цитата(lomy @ Mar 20 2018, 15:26) Хорошо,... Mar 20 2018, 15:18  SSerge Цитата(jcxz @ Mar 21 2018, 15:30) Достато... Mar 21 2018, 11:47 lomy Спасибо, jcxz и e-serg, я постараюсь разобраться в... Mar 21 2018, 06:21 lomy Если синхронности не дает, то не буду тратить на э... Mar 21 2018, 08:51 jcxz Цитата(lomy @ Mar 21 2018, 10:51) К тому ... Mar 21 2018, 09:57 lomy Спасибо за разъяснение. Я уже начал читать про dua... Mar 21 2018, 11:03 HHIMERA А не надо ничего мудрить... и все получится...
Зап... Mar 21 2018, 16:11 lomy Задача решена на связке нескольких таймеров. За ос... Mar 23 2018, 14:02 jcxz Цитата(lomy @ Mar 23 2018, 16:02) Задача ... Mar 23 2018, 15:46  lomy Цитата(jcxz @ Mar 23 2018, 18:46) А почем... Mar 26 2018, 09:47 Obam dual-SPI будет задействован по прямому назначению Mar 23 2018, 18:40 Timmy Если не нужен дедтайм между каналами, то можно реш... Mar 24 2018, 05:38 lomy Цитата(Timmy @ Mar 24 2018, 08:38) Если н... Mar 26 2018, 11:06 ViKo Один таймер с двумя каналами и один элемент ... Mar 26 2018, 11:31 lomy Цитата(ViKo @ Mar 26 2018, 14:31) Один та... Mar 26 2018, 12:01
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|