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

 
 
> 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
scifi
сообщение Jul 8 2015, 07:04
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



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

Действительно. Какой-то абсурд.
В STM32 можно сделать нужную пачку импульсов чисто на таймерах, процессор может вообще спать. Но для этого нужно почитать, как таймеры работают - они там хитровывернутые. Зато после чтения такие вопросы возникать не будут.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jul 8 2015, 07:26
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(scifi @ Jul 8 2015, 10:04) *
Действительно. Какой-то абсурд.

Видимо, это как раз управление желтым каналом осциллографа.
Красный канал - аппаратный.

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

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

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- EmbedElektrik   STM32f4 PWM проблема с первым импульсом   Jul 8 2015, 05:57
|- - EmbedElektrik   Цитата(Golikov A. @ Jul 8 2015, 09:53) Чт...   Jul 8 2015, 07:59
- - 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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