Страница 1 из 1
Изменение частоты вращения двигателя с помощью mega8
Добавлено: Ср июн 25, 2014 08:41:55
kk042fjv
Добрый день!
Возникла задача у меня сделать небольшой автоматический блок управления двигателем.
так как в программировании я не силен, подскажите как можно сделать, чтоб изменялась частота вращения двигателем с помощью atmega8. Принцип действия такой: когда идет нагревание температуры двигатель работает с частотой 23 Гц, когда температура доходит до определенной температуры частота увеличивается до 175 Гц, заметил что длина импульса и скважность у них одинаковая 50%, меняется только частота.
могу написать вот такой код, но там я смогу поменять только длину импульсов, а мне надо чтоб она была 50%, а менялась только частота
Код: Выделить всё
#include <mega8.h>
#include <delay.h>
void main(void)
{
PORTB=0x00;
DDRB=0x08;
ASSR=0x00;
TCCR2=0x6C;
TCNT2=0x00;
OCR2=0x00;
TIMSK=0x00;
while (1)
{
OCR2=0x4D;
delay_ms(5);
};
}
Re: Изменение частоты вращения двигателя с помощью mega8
Добавлено: Ср июн 25, 2014 09:06:34
ibiza11
меняйте период таймера, меняя начальное значение TCNT2 в прерывании переполнения. там же устанавливайте новое значение OCR2, равное половине периода таймера.
Re: Изменение частоты вращения двигателя с помощью mega8
Добавлено: Ср июн 25, 2014 09:13:03
akl
Можно просто задать режим таймера 2 CTC и в OCR2 заносить значение половины требуемого периода. В прерывании инвертировать выход.
Re: Изменение частоты вращения двигателя с помощью mega8
Добавлено: Ср июн 25, 2014 10:11:12
kk042fjv
Как я понял мне надо вот эту строчку изменять - TCCR2=0x6C; она отвечает за частоту ШИМ?
OCR2 установить как 0x7F; это будет 50%
Re: Изменение частоты вращения двигателя с помощью mega8
Добавлено: Ср июн 25, 2014 10:24:14
ibiza11
перечитайте мое сообщение. А TCCR2 - Timer Counter Control Register
Re: Изменение частоты вращения двигателя с помощью mega8
Добавлено: Ср июн 25, 2014 10:56:37
akl
kk042fjv писал(а):TCCR2=0x6C; она отвечает за частоту ШИМ?
OCR2 установить как 0x7F; это будет 50%
Прежде, чем менять нужно определиться
-какая частота тактирования таймера используется и как будут выглядеть частоты 23Гц и 175Гц в тактах таймера
-нужен ли режим FAST PWM
-нужен ли просто сброс лапы PB3(OC2) или всё таки автопереключение при прерывании
Re: Изменение частоты вращения двигателя с помощью mega8
Добавлено: Пт июн 27, 2014 13:08:20
kk042fjv
Добрый день!
Подскажите как правильно расставить конструкцию if-else?
Нужно чтоб работала так:
когда напряжение V<3 то ШИМ должно быть TCCR2=0x6F;
когда V>=3 то TCCR2=0x6E; но с задержкой через 25 сек.
когда V>=4 то TCCR2=0x6F;
когда V>4.5 то TCCR2=0x6E; и до тех пор пока V не станет меньше 3
Код: Выделить всё
if(V<3)
TCCR2=0x6F;
if(V>=3)
TCCR2=0x6E;
if(V>4)
TCCR2=0x6F;
if(V>4.5)
TCCR2=0x6E;
Re: Изменение частоты вращения двигателя с помощью mega8
Добавлено: Пт июн 27, 2014 15:01:24
codenamehawk
Код: Выделить всё
if(V<3)
{
TCCR2=0x6F;
else
{
if(V>4.5)
{
TCCR2=0x6E;
else
{
if(V>4)
{
TCCR2=0x6F;
else
{
if(V>=3)
{
if (zaderzka >25) TCCR2=0x6E;
}
}
}
}
}
}
}
Re: Изменение частоты вращения двигателя с помощью mega8
Добавлено: Вс июн 29, 2014 10:54:08
Аlex
Код: Выделить всё
if(V>4.5) TCCR2=0x6E;
else if(V>=4) TCCR2=0x6F;
else if(V>=3) ...................
else .................. // <3
Re: Изменение частоты вращения двигателя с помощью mega8
Добавлено: Вс июн 29, 2014 16:06:51
codenamehawk
Мой код из соображения "когда напряжение V<3 то ШИМ должно быть TCCR2=0x6F;", чтобы движок не раскрутился выше(ниже) положенного, остальное "в свободное от работы время."
Re: Изменение частоты вращения двигателя с помощью mega8
Добавлено: Вт июл 01, 2014 08:35:02
kk042fjv
Написал по вот этому примеру
Код: Выделить всё
if(V>4.5) TCCR2=0x6E;
else if(V>=4) TCCR2=0x6F;
else if(V>=3) TCCR2=0x6E;
else TCCR2=0x6F; // <3
а вот как сделать чтобы напряжение становилось 3В потом задержка секунд 20, потом увеличивались обороты?