|
STM32f4 PWM проблема с первым импульсом |
|
|
|
Jul 8 2015, 05:57
|

Частый гость
 
Группа: Свой
Сообщений: 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 начинает работать как и планировалось. Теоретически можно отрубить первый мусорный импульс, но это костыль. Хотелось бы понять почему я в трех соснах заблудился.
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
Jul 8 2015, 07:59
|

Частый гость
 
Группа: Свой
Сообщений: 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 увы, картина не изменилась
|
|
|
|
Сообщений в этой теме
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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|