Страница 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
:facepalm:

Код: Выделить всё

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, потом увеличивались обороты?