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

 
 
 
Reply to this topicStart new topic
> Управление полумостом выходами таймера, сквозной ток
smk
сообщение Dec 31 2009, 12:43
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Есть такой код инициализации таймера в Mega48:
Код
void timer1_init(void)
{
TCCR1B = 0x00; //stop
TCNT1H = 0; //setup
TCNT1L = 0;
OCR1AH = 0x03;
OCR1AL = 0x6D;
OCR1BH = 0;
OCR1BL = 1;
ICR1H  = 0x03;
ICR1L  = 0x6D;
TCCR1A = 0x50;
TCCR1B = 0x19; //start Time
}

Таймер инвертрует свои выходы при совпадении. Смысл - переключать плечи полумоста выходами таймера. Полумост незначительной мощности (2 Вт). Собственно вопрос в том как отследить сам момент переключения и посмотреть на предмет сквозного тока. Драйвер не советовать - питание 2 В, а они от 10 В. Можно ли как-то в студии посмотреть состояния выходов после каждого тактового тика? Спасибо.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Duhas
сообщение Dec 31 2009, 13:20
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 227
Регистрация: 13-04-07
Пользователь №: 27 018



вводите мертвое время.. как вам удобнее... либо в железе, либо дергайте пины в прерывании.. имхо других вариантов и быть не может..
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 31 2009, 14:23
Сообщение #3


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Duhas @ Dec 31 2009, 17:20) *
вводите мертвое время.. как вам удобнее... либо в железе, либо дергайте пины в прерывании.. имхо других вариантов и быть не может..

Для симметричного шима (phase correct) не стесняясь уменьшал один из выходов на число попугаев, соответствующий мертвому времени. Получал то, что надо. Т.е. это было так
Код
// выходной параметр value_out
{ uint16_t value_L,value_H;
value_H=value_L=value_out;
//теперь двустороннее ограничение
if(value_H < VALUE_MIN) value_H = VALUE_MIN;
if(value_H > VALUE_MAX) value_H = VALUE_MAX;
if(value_L < VALUE_MIN) value_L = VALUE_MIN;
if(value_L > VALUE_MAX) value_L = VALUE_MAX;
// и только затем вычел дедтайм
value_H -= DEADTIME;
OCR1A = value_L;
OCR1B = value_H;
}

Кстати, phase correct вроде как правильно симулировался. (емнип)
А нафига студия? Попробуйте протеусом...
Go to the top of the page
 
+Quote Post
Dx!
сообщение Dec 31 2009, 18:29
Сообщение #4


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

Группа: Участник
Сообщений: 108
Регистрация: 6-02-09
Из: Новочеркасск
Пользователь №: 44 469



В этом смысле приятно удивил чип ATMega32U4 - у него есть "быстрый" (до 64MHz с PLL) 10тибитный таймер, выходы OC которого сделаны парами с железной выдержкой деадтайма...
Go to the top of the page
 
+Quote Post
smk
сообщение Dec 31 2009, 18:51
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата
Попробуйте протеусом...


Я в него не верю. Как-то не производит впечатление серьезного продукта.

На счет идеи не совсем пойму как выбирались значения MIN и MAX и почему они менялись по ходу? Прниведенный код обрабатывался в прерывании или в каком месте?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Stanislav_S
сообщение Jan 1 2010, 00:25
Сообщение #6


извечный пессимист
*****

Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125



Как то однажды делал так, ЕМНИП при кварце 16Мгц плучалось около 200 кгц на выходе, естественно используются выходы таймера, удобно получилось и прерывания не надо обрабатывать.
Код
/*Используется для формирования сигналов управления для преобразователя*/
void TIMER1_INIT(void)
{
  TCCR1B=(1<<WGM13)|(1<<CS10);
  TCCR1A=(1<<COM1B0)|(1<<COM1B1)|(1<<COM1A1)|(1<<WGM11);
  OCR1BH=0x00;
  OCR1BL=0x14;
  OCR1AH=0x00;
  OCR1AL=0x10;
  ICR1H=0;
  ICR1L=0x24;
  TCNT1H=0;
  TCNT1L=0;
}


--------------------
Slaves are those of this world
Given freedom to lay chains upon The Master
The wolf is no longer free
Release the chains and come for me
Go to the top of the page
 
+Quote Post
smk
сообщение Jan 2 2010, 15:52
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Спасибо, Stanislav_S ! Так и поступил. Очень хорошее решение.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
acorn
сообщение Jan 6 2010, 18:11
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 28-11-05
Пользователь №: 11 495



2Вт? 2В? Автор, не парьтесь с мертвым временем, соедините затворы полевиков вместе и на один выход ОЦР таймера. Второй освободится. Всё будет работать.
Если транзисторы в полумосте разной структуры и это FET-ы, разумеется.

Сообщение отредактировал acorn - Jan 6 2010, 18:14
Go to the top of the page
 
+Quote Post
oran-be
сообщение Jan 20 2010, 12:30
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 30-03-07
Из: Одесса
Пользователь №: 26 621



У выходов ШИМ в АВР есть косяк - если записать в регистр сравнения 0, то на выходе ШИМ все равно будут присутствовать короткие импульсы, что приводит к появлению сквозного тока в мосту (полумосту). Поэтому надо отслеживать софтово 0 в регистре сравнения и в этом случае переконфигурировать пин тупо на вывод. Косяк был обнаружен мною при разработке однфазного инвертора на асинхронный двигатель на Меге8 после того, как "ушли" 2 пары полевиков. После написания патча девайс начал работать, как задумывалось.
Go to the top of the page
 
+Quote Post

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

 


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


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