Изменение частоты вращения двигателя с помощью mega8

Обсуждаем контроллеры компании Atmel.
Ответить
Грызет канифоль
Сообщения: 261
Зарегистрирован: Ср авг 01, 2012 10:45:42

Сообщение 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);
    
};
}
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

меняйте период таймера, меняя начальное значение TCNT2 в прерывании переполнения. там же устанавливайте новое значение OCR2, равное половине периода таймера.
Ставим плюсы: )
Реклама
akl
Друг Кота
Сообщения: 4468
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Можно просто задать режим таймера 2 CTC и в OCR2 заносить значение половины требуемого периода. В прерывании инвертировать выход.
Грызет канифоль
Сообщения: 261
Зарегистрирован: Ср авг 01, 2012 10:45:42

Сообщение kk042fjv »

Как я понял мне надо вот эту строчку изменять - TCCR2=0x6C; она отвечает за частоту ШИМ?

OCR2 установить как 0x7F; это будет 50%
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

перечитайте мое сообщение. А TCCR2 - Timer Counter Control Register
Ставим плюсы: )
Реклама
akl
Друг Кота
Сообщения: 4468
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

kk042fjv писал(а):TCCR2=0x6C; она отвечает за частоту ШИМ?
OCR2 установить как 0x7F; это будет 50%
Прежде, чем менять нужно определиться
-какая частота тактирования таймера используется и как будут выглядеть частоты 23Гц и 175Гц в тактах таймера
-нужен ли режим FAST PWM
-нужен ли просто сброс лапы PB3(OC2) или всё таки автопереключение при прерывании
Реклама
Грызет канифоль
Сообщения: 261
Зарегистрирован: Ср авг 01, 2012 10:45:42

Сообщение 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;  
Вымогатель припоя
Сообщения: 547
Зарегистрирован: Вт фев 09, 2010 17:52:26

Сообщение 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;
              }
            }
         }
      }
    }
  }
}
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

:facepalm:

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

if(V>4.5)        TCCR2=0x6E; 
else if(V>=4)    TCCR2=0x6F; 
else if(V>=3)    ................... 
else             ..................        // <3
Вымогатель припоя
Сообщения: 547
Зарегистрирован: Вт фев 09, 2010 17:52:26

Сообщение codenamehawk »

Мой код из соображения "когда напряжение V<3 то ШИМ должно быть TCCR2=0x6F;", чтобы движок не раскрутился выше(ниже) положенного, остальное "в свободное от работы время."
Грызет канифоль
Сообщения: 261
Зарегистрирован: Ср авг 01, 2012 10:45:42

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

Вернуться в «AVR»