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

 
 
 
Reply to this topicStart new topic
> Не работает Dead time в stm32f4 должным образом.
sidy
сообщение Nov 3 2017, 15:12
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333



Господа, добрый день.
Возникла проблема. Есть ШИМ частотой 5 кГц для управления транзисторным модулем для формирования синусоиды 50 Гц. С мертвым временем 5 мкс.
Получается что при выдаче ШИМа в комплиментарные выходы таймера TIM1 значения ШИМа вырождаются в постоянный сигнал,
Прикрепленное изображение

если они меньше мертвого времени и соответственно искажается синусоидальный сигнал.
Прикрепленное изображение

Т.е. получается что у STM32 нет минимального значения мертвого времени?
(Для примера привожу синусоиду сформированную без мертвого времени - искажений нет)
Прикрепленное изображение

Как же тогда с этим работать?

Сообщение отредактировал sidy - Nov 3 2017, 18:17
Go to the top of the page
 
+Quote Post
Timmy
сообщение Nov 7 2017, 07:42
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



По-моему, совершенно естественно, что если ставить ontime < deadtime, то deadtime полностью перекроет ontime, и неинверсный выход таймера включаться не будет. А как по-вашему, должен работать таймер?
Go to the top of the page
 
+Quote Post
sidy
сообщение Nov 7 2017, 12:53
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333



Цитата(Timmy @ Nov 7 2017, 10:42) *
По-моему, совершенно естественно, что если ставить ontime < deadtime, то deadtime полностью перекроет ontime, и неинверсный выход таймера включаться не будет. А как по-вашему, должен работать таймер?

По моему должно сохраняться минимальное мертвое время. В противном случае не будет симметрии в сигнале.
Go to the top of the page
 
+Quote Post
dac
сообщение Nov 7 2017, 16:14
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482



QUOTE (sidy @ Nov 7 2017, 18:53) *
По моему должно сохраняться минимальное мертвое время. В противном случае не будет симметрии в сигнале.

center aligned?
Go to the top of the page
 
+Quote Post
amaora
сообщение Nov 7 2017, 20:48
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



Цитата(sidy @ Nov 7 2017, 15:53) *
По моему должно сохраняться минимальное мертвое время. В противном случае не будет симметрии в сигнале.

Что значит "должно сохраняться минимальное мертвое время"? Ограничить заполнение так чтобы не задавать длительность импульса меньше DT, не подойдет?
Go to the top of the page
 
+Quote Post
serglg
сообщение Nov 8 2017, 04:29
Сообщение #6


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

Группа: Участник
Сообщений: 146
Регистрация: 19-07-16
Пользователь №: 92 603



Цитата(amaora @ Nov 8 2017, 02:48) *
Что значит "должно сохраняться минимальное мертвое время"? Ограничить заполнение так чтобы не задавать длительность импульса меньше DT, не подойдет?


Действительно, лично у меня всегда в стоит везде такое ограничение - как сверху, так и снизу.
Если DT=20, то при ШИМе импульс не короче 25 и не длиньше PERIOD-25.
Go to the top of the page
 
+Quote Post
sidy
сообщение Nov 28 2017, 13:38
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 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
Причина редактирования: бездумное самоцитирование
Go to the top of the page
 
+Quote Post
AVI-crak
сообщение Nov 28 2017, 14:14
Сообщение #8


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

Группа: Участник
Сообщений: 182
Регистрация: 16-10-15
Пользователь №: 88 894



Слишком долго считает.
Регистры TIM1->CCR1 не имеют теневых аналогов как у TIM1->ARR, записанное в них значение сразу начинает сравниваться.
Но выход есть, завести статическую переменную, в которую считать новое значение, и при прерывании переполнения (не сравнения!!!) - записывать в регистр значение статической переменной. Получится минимальная задержка обновления, и стабильная задержка на один отчёт - которую уже можно компенсировать.
Go to the top of the page
 
+Quote Post
sidy
сообщение Nov 28 2017, 15:39
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
SSerge
сообщение Nov 28 2017, 15:48
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(AVI-crak @ Nov 28 2017, 21:14) *
Слишком долго считает.
Регистры TIM1->CCR1 не имеют теневых аналогов как у TIM1->ARR, записанное в них значение сразу начинает сравниваться.

Однако, есть. За это отвечают биты OCxPE в регистрах TIM1->CCMRx.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
serglg
сообщение Nov 29 2017, 05:39
Сообщение #11


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

Группа: Участник
Сообщений: 146
Регистрация: 19-07-16
Пользователь №: 92 603



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


Лично у меня так и делается. Есть переменная, которую гружу непосредственно в TIM1->CCR1
Go to the top of the page
 
+Quote Post

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

 


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


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