|
|
  |
Не работает Dead time в stm32f4 должным образом. |
|
|
|
Nov 3 2017, 15:12
|
Местный
  
Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333

|
Господа, добрый день. Возникла проблема. Есть ШИМ частотой 5 кГц для управления транзисторным модулем для формирования синусоиды 50 Гц. С мертвым временем 5 мкс. Получается что при выдаче ШИМа в комплиментарные выходы таймера TIM1 значения ШИМа вырождаются в постоянный сигнал,
если они меньше мертвого времени и соответственно искажается синусоидальный сигнал.
Т.е. получается что у STM32 нет минимального значения мертвого времени? (Для примера привожу синусоиду сформированную без мертвого времени - искажений нет)
Как же тогда с этим работать?
Сообщение отредактировал sidy - Nov 3 2017, 18:17
|
|
|
|
|
Nov 7 2017, 12:53
|
Местный
  
Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333

|
Цитата(Timmy @ Nov 7 2017, 10:42)  По-моему, совершенно естественно, что если ставить ontime < deadtime, то deadtime полностью перекроет ontime, и неинверсный выход таймера включаться не будет. А как по-вашему, должен работать таймер? По моему должно сохраняться минимальное мертвое время. В противном случае не будет симметрии в сигнале.
|
|
|
|
|
Nov 7 2017, 20:48
|
Местный
  
Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778

|
Цитата(sidy @ Nov 7 2017, 15:53)  По моему должно сохраняться минимальное мертвое время. В противном случае не будет симметрии в сигнале. Что значит "должно сохраняться минимальное мертвое время"? Ограничить заполнение так чтобы не задавать длительность импульса меньше DT, не подойдет?
|
|
|
|
|
Nov 8 2017, 04:29
|
Частый гость
 
Группа: Участник
Сообщений: 146
Регистрация: 19-07-16
Пользователь №: 92 603

|
Цитата(amaora @ Nov 8 2017, 02:48)  Что значит "должно сохраняться минимальное мертвое время"? Ограничить заполнение так чтобы не задавать длительность импульса меньше DT, не подойдет? Действительно, лично у меня всегда в стоит везде такое ограничение - как сверху, так и снизу. Если DT=20, то при ШИМе импульс не короче 25 и не длиньше PERIOD-25.
|
|
|
|
|
Nov 28 2017, 13:38
|
Местный
  
Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333

|
Вернулся опять к данному вопросу. И выяснил что искажения выходной синусоиды происходят и в тех случаях когда мертвое время не превышает период ШИМа. Вот формирование таблицы синуса: for(i=0; i<SIZE; i++) {PWM_Tab[i]=sinf(6.283185f*i/SIZE);} Вот вывод синуса в таймер: Ampl=(TIM1->ARR)>>1; TIM1->CCR1=TIM1->ARR-((Ampl)+K_A*(Ampl)*(PWM_Tab[iA])); iA++; if(iA>=SIZE) iA=0;
Сообщение отредактировал IgorKossak - Nov 28 2017, 18:09
Причина редактирования: бездумное самоцитирование
|
|
|
|
|
Nov 28 2017, 15:39
|
Местный
  
Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333

|
Цитата(AVI-crak @ Nov 28 2017, 17:14)  Слишком долго считает. Регистры TIM1->CCR1 не имеют теневых аналогов как у TIM1->ARR, записанное в них значение сразу начинает сравниваться. Но выход есть, завести статическую переменную, в которую считать новое значение, и при прерывании переполнения (не сравнения!!!) - записывать в регистр значение статической переменной. Получится минимальная задержка обновления, и стабильная задержка на один отчёт - которую уже можно компенсировать. Частота переполнения таймера 5 кГц, соответственно и TIM1>CCR1 обновляется с такой же частотой.
Сообщение отредактировал sidy - Nov 28 2017, 15:39
|
|
|
|
|
Nov 29 2017, 05:39
|
Частый гость
 
Группа: Участник
Сообщений: 146
Регистрация: 19-07-16
Пользователь №: 92 603

|
Цитата(AVI-crak @ Nov 28 2017, 20:14)  Слишком долго считает. Регистры TIM1->CCR1 не имеют теневых аналогов как у TIM1->ARR, записанное в них значение сразу начинает сравниваться. Но выход есть, завести статическую переменную, в которую считать новое значение, и при прерывании переполнения (не сравнения!!!) - записывать в регистр значение статической переменной. Получится минимальная задержка обновления, и стабильная задержка на один отчёт - которую уже можно компенсировать. Лично у меня так и делается. Есть переменная, которую гружу непосредственно в TIM1->CCR1
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|