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

 
 
 
Reply to this topicStart new topic
> Можно ли как-то настроить TCCR1A, чтобы управлять Н-мостом с разной частотой и ШИМом
iiv
сообщение Dec 13 2011, 14:10
Сообщение #1


вопрошающий
*****

Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436



Всем привет,

хочется иметь на двух ножках Atmega328p сигналы для управления полным мостом вида

Код
Время               | 1-ая нога | 2-ая нога
(0,t1)              | 0         | 0
(t1,t2+t1)          | 1         | 0
(t2+t1,t2+2*t1)     | 0         | 0
(t2+2*t1,2*t2+2*t1) | 0         | 1

и так далее, причем чтобы задавать t1, t2 в виде числа тактов и в это же время заниматься чем-то другим.

Так как мне и t1, и t2 надо менять довольно в больших пределах примерно около 500-1000 раз в секунду, очень хотелось организовать все это на чем-то хардверном.

Значения t1 и t2 могут колебаться в диапазоне от 1 до 2000, то есть частоты варьируются с 2кГц до 2МГц.

Софтверно знаю как, но не хочу, так как процессор должен в это же время делать много другой работы.

Могу сделать почти так, но без первого или третьего шага, то есть

Код
Время           | 1-ая нога | 2-ая нога
(0,t2)          | 1         | 1
(t2,t2+t1)      | 1         | 0
(t2+t1,2*t2+t1) | 0         | 0


а так как драйверы моста у меня можно хоть инвертирующие, хоть не инвертирующие поставить, то получается, что это эквивалентно

Код
Время           | 1-ая нога | 2-ая нога
(0,t2)          | 0         | 1
(t2,t2+t1)      | 0         | 0
(t2+t1,2*t2+t1) | 1         | 0


но, хочется именно так, как я написал вначале. Может есть правильные установки регистра TCCR1A и я что-то пропустил, вдруг кто-то знает, пожалуйста, подскажите!

PS: забыл добавить, что меня устроило бы даже такое


Код
Время               | 1-ая нога | 2-ая нога
(0,t1)              | 0         | 0
(t1,t2+t1)          | 1         | 0
(t2+t1,t2+2*t1)     | 1         | 1
(t2+2*t1,2*t2+2*t1) | 0         | 1


но я не понимаю как это реализовать...

Спасибо

ИИВ
Go to the top of the page
 
+Quote Post
ARV
сообщение Dec 13 2011, 15:34
Сообщение #2


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

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



поставьте драйвер сразу со встроенным Dead-time. например IR2184 - подаете на него меандр (1 сигнал!) и имеете управление полумостом раздельно для верхнего и нижнего транзисторов с мертвым промежутком.


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
iiv
сообщение Dec 13 2011, 15:52
Сообщение #3


вопрошающий
*****

Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436



Цитата(ARV @ Dec 13 2011, 20:34) *
поставьте драйвер сразу со встроенным Dead-time. например IR2184 - подаете на него меандр (1 сигнал!) и имеете управление полумостом раздельно для верхнего и нижнего транзисторов с мертвым промежутком.

Спасибо за ответ, конечно так-то понятно, но не хотелось бы, а так можно и вторую Атмегу поставить. Хотелось все внутри одного процессора уместить. Тем более, что хотелось слегка менять дед-тайм, так в пределах 0-30% от длительности включенной половинки моста, от этого в моей схеме тоже много зависит...

Go to the top of the page
 
+Quote Post
usav
сообщение Dec 13 2011, 16:31
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 22-01-10
Из: Kiev
Пользователь №: 55 001



Насколько помню, у этой меги таких зазоров нет, а вот у tiny26 есть.
Вполне возможно, что есть и у новых Мег, сделанных для моторов.
А зазор "слегка" до 30% - это целый ШИМ! Может среди пол-десятка
ШИМ-режимов что то и подойдет - кто ж лучше Вас читая DS это определит
для такой "моей схемы"!
Go to the top of the page
 
+Quote Post
iiv
сообщение Dec 13 2011, 17:09
Сообщение #5


вопрошающий
*****

Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436



Если режима такого в таймере нет, похоже дальше обсуждать нечего, иначе тема обсуждения куда-то от вопроса уйдет... Поставлю вторую атмегу - все решится. На ней, при правильном написании нескольких функций и min(t1,t2)>1, max(t1,t2)>4 я таки с точностью до одного такта то, что мне надо получал, только в этот момент атмега больше ничего не могла делать...
Go to the top of the page
 
+Quote Post
777777
сообщение Dec 13 2011, 17:32
Сообщение #6


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

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



Цитата(iiv @ Dec 13 2011, 18:10) *
хочется иметь на двух ножках Atmega328p сигналы для управления полным мостом

Для этого надо воспользоваться микросхемой ATmega32/64M1
Go to the top of the page
 
+Quote Post
smk
сообщение Dec 13 2011, 20:06
Сообщение #7


Гуру
******

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



Да, настроить можно. Пример доработаете под свои нужды.

Код
void TIMER1_INIT(void)
{
TCCR1B=(1<<WGM13)|(1<<CS10);
TCCR1A=(1<<COM1B0)|(1<<COM1B1)|(1<<COM1A1)|(1<<WGM11);
OCR1BH=0x00;
OCR1BL=118;//65
OCR1AH=0x00;
OCR1AL=115;//98
ICR1H=0x00;
ICR1L=233;
TCNT1H=0;
TCNT1L=0;
}




--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
iiv
сообщение Dec 13 2011, 21:03
Сообщение #8


вопрошающий
*****

Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436



Спасибо, smk, за простое и интересное решение!

""...Есть одна непонятка..." все, сам понял, что все должно нормально работать!!!

Огромное спасибо за простое и элегантное решение!!!
Go to the top of the page
 
+Quote Post
777777
сообщение Dec 14 2011, 07:11
Сообщение #9


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

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



Цитата(smk @ Dec 14 2011, 00:06) *
Код
void TIMER1_INIT(void)
{
TCCR1B=(1<<WGM13)|(1<<CS10);
TCCR1A=(1<<COM1B0)|(1<<COM1B1)|(1<<COM1A1)|(1<<WGM11);
OCR1BH=0x00;
OCR1BL=118;//65
OCR1AH=0x00;
OCR1AL=115;//98
ICR1H=0x00;
ICR1L=233;
TCNT1H=0;
TCNT1L=0;
}

Во-первых, регулируемая пауза здесь будет только при одном переходе, при втором (сбросе счетчика по достижении ICR1) оба выхода поменяют свое состояние одновременно.

Во-вторых, все 16-битные счетчики имеют "16-битное" имя и вместо того, чтобы писать:

ICR1H=0x00;
ICR1L=233;

достаточо написать

ICR1=233;
Go to the top of the page
 
+Quote Post
iiv
сообщение Dec 14 2011, 09:32
Сообщение #10


вопрошающий
*****

Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436



Цитата(777777 @ Dec 14 2011, 13:11) *
Во-первых, регулируемая пауза здесь будет только при одном переходе, при втором (сбросе счетчика по достижении ICR1) оба выхода поменяют свое состояние одновременно.


я может что-то и упустил, но, как я понимаю, есть режим работы таймера, когда он считает от 0 до ICR1 и потом вниз, режим как раз задается по WGM=10. Мы включаем первый канал когда значение таймера больше OCR1A, и выключаем второй канал, когда значение таймера меньше OCR1B. В этом случае, длина паузы должна быть OCR1B-OCR1A и будет одинакова в обоих случаях, а длина включенного состояния первого канала будет составлять (ICR1-OCR1A)*2, а длина включенного состояния второго канала будет составлять (ICR1-OCR1B)*2.

Может для решения этой задачи что-то с COM?A? или COM?B? не так? Я в железе еще не проверял, не успел, да и осцилла свободного под рукой нет, а симулятора нет подавно, так как все в ардуиновской оболочке под линуксом пишу.

Если я со своими утверждениями ошибся, поправьте, меня, пожалуйста!

Цитата(777777 @ Dec 14 2011, 13:11) *
Во-вторых...

согласен
Go to the top of the page
 
+Quote Post
smk
сообщение Dec 14 2011, 09:40
Сообщение #11


Гуру
******

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



Все работает как надо. Проверено в железе. Если хотите поиграться по-быстрому, то Протеус симулирует правильно. У меня Мега48 работает там правильно, в реальности тоже без проблем. Описанная ситуация перекрывается тем, что в момент 0 один вывод сбрасывается в ноль, а другой в единицу (Clr и Set), но они и до того находятся в этом состоянии и должны в нем находится и далее.

С

Смена состояний происходит посредине между минимумом и максимумом.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post

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

 


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


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