реклама на сайте
подробности

 
 
> STM32f4 PWM проблема с первым импульсом
EmbedElektrik
сообщение Jul 8 2015, 05:57
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 121
Регистрация: 30-07-08
Из: Тверь, Россия
Пользователь №: 39 321



Задача получить серию импульсов строго заданной продолжительности и количества. Использую PWM. В приведенном коде я хочу получить два импульса по 10 мкс с паузой 40.
CODE

основной код
.................
tim_init();
TIM2->CNT=15;//предустановка счетчика в пределах низкой фазы
pulses_cnt=2;// количество импульсов
TIM_Cmd(TIM2,ENABLE); // запускаем счёт
}
//**************************************************************************
void TIM2_IRQHandler()
{
if(TIM_GetITStatus(TIM2, TIM_IT_CC3) != RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_CC3);
GPIO_ResetBits(GPIOE, GPIO_Pin_9);// сброс по COMPARE
pulses_cnt--;
if(pulses_cnt==0)TIM_Cmd(TIM2, DISABLE);
}
if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
GPIO_SetBits(GPIOE, GPIO_Pin_9); // фронт по UPDATE
}
}
//****************************************************************************

void tim_init(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

TIM_OCStructInit(&oc_init);
oc_init.TIM_OCMode = TIM_OCMode_PWM1; // работаем в режиме ШИМ ( PWM )
oc_init.TIM_OutputState = TIM_OutputState_Enable;
oc_init.TIM_Pulse = 10; //
oc_init.TIM_OCPolarity = TIM_OCPolarity_High; // положительная полярность
TIM_OC3Init(TIM2,&oc_init);
TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Disable);

TIM_TimeBaseStructInit(&base_timer);
base_timer.TIM_Prescaler = 84 - 1; // делитель частоты
base_timer.TIM_Period = 50-1; // период
base_timer.TIM_CounterMode = TIM_CounterMode_Up; // счёт вверх
TIM_TimeBaseInit(TIM2, &base_timer);
TIM_ITConfig(TIM2, TIM_IT_CC3 | TIM_IT_Update, ENABLE);
TIM_ARRPreloadConfig(TIM2,DISABLE);

TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
NVIC_EnableIRQ(TIM2_IRQn);
}

В итоге получаю следующую картинку.
Красный - мой вывод PWM, с двумя требуемыми импульсами, но перед ними влезает какой-то мелкий пик природу появления которого я не могу понять. Желтым цветом вывожу прерывания таймера - нарастающий фронт соответсвует событию таймера UPDATE, спадающий - COMPARE. Видно, что при первом прерывании update PWM как и требуется поднимается в 1, но почему-то тут же падает в 0 через странные 1.6 мкс и взводится опять через 35 мкс. После вывод PWM начинает работать как и планировалось. Теоретически можно отрубить первый мусорный импульс, но это костыль. Хотелось бы понять почему я в трех соснах заблудился.


Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение Jul 8 2015, 06:53
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Что-то как-то через одно место, если честно.
Зачем таймер в ШИМе если вы ноги дергаете руками?

по сути вопроса думаю что это библиотечка так работает. ШИМ параметры скважности применяются когда таймер досчитал, потому после первой их задачи обычно дергают таймер так чтобы он как бы досчитал и обновил состояние, это думаю вы и наблюдаете
Go to the top of the page
 
+Quote Post
EmbedElektrik
сообщение Jul 8 2015, 07:59
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 121
Регистрация: 30-07-08
Из: Тверь, Россия
Пользователь №: 39 321



Цитата(Golikov A. @ Jul 8 2015, 09:53) *
Что-то как-то через одно место, если честно.
Зачем таймер в ШИМе если вы ноги дергаете руками?

по сути вопроса думаю что это библиотечка так работает. ШИМ параметры скважности применяются когда таймер досчитал, потому после первой их задачи обычно дергают таймер так чтобы он как бы досчитал и обновил состояние, это думаю вы и наблюдаете

Я руками не дергаю. Желтый канал для дебага - чтобы сравнивать поведение прерываний относительно фазы PWM.


Цитата(adnega @ Jul 8 2015, 10:26) *
Видимо, это как раз управление желтым каналом осциллографа.
Красный канал - аппаратный.

Попробуйте на строчку веше, чем
Код
TIM_ITConfig(TIM2, TIM_IT_CC3 | TIM_IT_Update, ENABLE);

прописать нечто, вида:
Код
TIM2->EGR = TIM_EGR_UG; // 1

увы, картина не изменилась sad.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- EmbedElektrik   STM32f4 PWM проблема с первым импульсом   Jul 8 2015, 05:57
|- - scifi   Цитата(Golikov A. @ Jul 8 2015, 09:53) За...   Jul 8 2015, 07:04
||- - adnega   Цитата(scifi @ Jul 8 2015, 10:04) Действи...   Jul 8 2015, 07:26
- - adnega   CODE #define PULSE_ACT (10) #define PULSE_INACT (4...   Jul 8 2015, 08:51
|- - EmbedElektrik   Цитата(adnega @ Jul 8 2015, 11:51) Я библ...   Jul 8 2015, 10:50
|- - adnega   Цитата(EmbedElektrik @ Jul 8 2015, 13:50)...   Jul 8 2015, 11:48
|- - Огурцов   1. остановили таймер 2. отключили буферизацию 3. з...   Jul 8 2015, 12:21
- - ArtDenis   EmbedElektrik, на самом деле всё очень просто. Рег...   Jul 9 2015, 03:55
|- - adnega   Цитата(ArtDenis @ Jul 9 2015, 06:55) Реги...   Jul 9 2015, 05:15
|- - ArtDenis   Цитата(adnega @ Jul 9 2015, 10:15) В сооб...   Jul 9 2015, 06:13
|- - adnega   Цитата(ArtDenis @ Jul 9 2015, 09:13) Личн...   Jul 9 2015, 08:24
|- - ArtDenis   Цитата(adnega @ Jul 9 2015, 13:24) Хоть н...   Jul 9 2015, 09:28
|- - adnega   Цитата(ArtDenis @ Jul 9 2015, 12:28) PPS:...   Jul 9 2015, 09:38
- - ArtDenis   adnega, как это есть рабочий код? Вот его последне...   Jul 9 2015, 09:40
- - Golikov A.   я так понял инвертировали ШИМ и все работает, а в ...   Jul 9 2015, 09:45
|- - adnega   Цитата(Golikov A. @ Jul 9 2015, 12:45) я ...   Jul 9 2015, 10:03
|- - Огурцов   а как вы формируете _пачку_, в каком регистре тот ...   Jul 9 2015, 12:34
|- - adnega   Цитата(Огурцов @ Jul 9 2015, 15:34) а как...   Jul 9 2015, 12:45
|- - Огурцов   я вам о том и говорю: формируете сами - чего ждёте...   Jul 9 2015, 13:23
|- - adnega   Цитата(Огурцов @ Jul 9 2015, 16:23) я вам...   Jul 9 2015, 16:33
|- - Огурцов   уверены, что заработает ? мега, например, страдала...   Jul 9 2015, 16:36
|- - adnega   Цитата(Огурцов @ Jul 9 2015, 19:36) увере...   Jul 9 2015, 16:41
|- - Огурцов   меня любая пауза не устраивает, мне нужно заданное...   Jul 9 2015, 18:29
- - EmbedElektrik   Вобщем господа я забил на эту проблему - тупо пере...   Jul 10 2015, 06:49
|- - ArtDenis   Цитата(EmbedElektrik @ Jul 10 2015, 11:49...   Jul 10 2015, 09:25
|- - EmbedElektrik   Цитата(ArtDenis @ Jul 10 2015, 12:25) Так...   Jul 10 2015, 10:14
- - Golikov A.   я так понимаю что именно как вы и победили. самый...   Jul 10 2015, 07:16


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 21:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01389 секунд с 7
ELECTRONIX ©2004-2016