Регулятор оборотов печки ШИМ. Нужна помощь.

Обсуждаем электронику на колесах. Нужен увлажнитель воздуха для Камаза? Вам сюда.
Ответить
Lyav
Родился
Сообщения: 19
Зарегистрирован: Вт дек 21, 2010 12:05:10

Регулятор оборотов печки ШИМ. Нужна помощь.

Сообщение Lyav »

Решил сделать плавную регулировку оборотов печки логана с помощью энкодера и atmega8.
Возникла проблема:
двигатель гудит, "поет" на малых оборотах.

За основу взял вот эту статью http://radioparty.ru/index.php/componen ... on-encoder

Подправив получилось вот такое:

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

/*** Принцип работы энкодера.  ***/

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/eeprom.h>


volatile char pwm_counter,pwm_r,m,n=250,start,g=0,stsrt_too, button = 0,start_three=1;
int pwm_g;
unsigned char eeprom_var EEMEM; // определяем переменную в EEPROM
// Обработчик прерывания int0
ISR(SIG_INTERRUPT0)
{
_delay_us(50);
if((PIND&(1 << PD2))==0)
{
_delay_us(50);
if((PIND&(1 << PD0))==0)
{ 

if(button == 0) // уменьшаем 
{ 
pwm_r=pwm_r-2;
if(pwm_r < 2)
pwm_r = 2;
} 


}

else
{

if(button == 0) // увеличиваем 
{
pwm_r=pwm_r+2;
if(pwm_r > 230)
pwm_r =230;
}


}
}
GIFR = (1<<INTF0); // очищаем флаг внешнего прерывания
return;
}	

// прерывание по переполнению Т0
ISR (TIMER0_OVF_vect)
{
if (pwm_counter++ > 249) 
{
PORTB = 0x00;
pwm_counter = 0;
}
if (pwm_counter > pwm_r)
PORTB |= (1 << PB0);
	
}

//----------------------------------------------------------------------------

//=================

int main (void) 
{

DDRB |= (1 << PB5)|(1 << PB4)|(1 << PB3)|(1 << PB2)|(1 << PB1)|(1 << PB0);// выходы
PORTB = 0x00;
DDRD |= (0 << PD2)|(0 << PD1)|(0 << PD0); // входы
PORTD |= (1 << PD2)|(1 << PD1)|(1 << PD0); // подключаем подтягивающие резисторы

TIMSK |= (1 << TOIE0); // разрешение прерывания по таймеру0
TCCR0 |= (1 << CS00); 

MCUCR |= (0 << ISC00)|(1 << ISC01);	// прерывание по заднему фронту INT0(по спаду импульса)

GIFR |= (1 << INTF0);		// очищаем флаг внешнего прерывания
GICR |= (1 << INT0);		// разрешаем внешние прерывания INT0
	
sei(); //глобально разрешаем прерывания

while(1)
{

//==================Плавный пуск=======
if (start_three==1)
{
if (n<eeprom_read_byte(&eeprom_var)) 
 {
   pwm_r = eeprom_read_byte(&eeprom_var);
   start=0;
       g=0;
	   start_three=2;
   }
  else
  {
   _delay_ms(2);
    g++;
   n=250- g;
   pwm_r = n;
  }
 }
 //=================
	        PORTB |= (1 << PB2);
  if((PIND&(1 << PD1))==0)
  {
    _delay_ms(1000);
	if((PIND&(1 << PD1))==0)
	{
      PORTB |= (1 << PB2);
     _delay_ms(200);
      PORTB &= ~(1 << PB2); //гасим светодиод
     _delay_ms(200);
	        PORTB |= (1 << PB2);
      _delay_ms(200);
      PORTB &= ~(1 << PB2); //гасим светодиод
      _delay_ms(200);
	        PORTB |= (1 << PB2);
      _delay_ms(200);
      PORTB &= ~(1 << PB2); //гасим светодиод
          _delay_ms(200);
	        PORTB |= (1 << PB2);
      _delay_ms(200);
      PORTB &= ~(1 << PB2); //гасим светодиод
      _delay_ms(200);
	        PORTB |= (1 << PB2);
      _delay_ms(200);
      PORTB &= ~(1 << PB2); //гасим светодиод
	  _delay_ms(200);
	        PORTB |= (1 << PB2);
      _delay_ms(200);
      PORTB &= ~(1 << PB2); //гасим светодиод
      _delay_ms(200);
	        PORTB |= (1 << PB2);
      _delay_ms(200);
      PORTB &= ~(1 << PB2); //гасим светодиод
          _delay_ms(200);
	        PORTB |= (1 << PB2);
      _delay_ms(200);
      PORTB &= ~(1 << PB2); //гасим светодиод
      _delay_ms(200);
	        PORTB |= (1 << PB2);
      _delay_ms(200);
      PORTB &= ~(1 << PB2); //гасим светодиод
      
	  eeprom_write_byte(&eeprom_var, pwm_r); // записываем "pwm_r" в EEPROM
	  }
     else
	 {
	  
/*if((PIND&(1 << PD1))==0) // если нажата кнопка
{
  
while((PIND&(1 << PD1))==0)// ждем отпускания кнопки
 {}
if((PIND&(1 << PD1))==0)
   {pwm_g = pwm_g + 1;
  if (pwm_g > 100)*/
 
   if(button == 0)
 {
  m=pwm_r;
 }

button++;
_delay_ms(50);
if(button == 3)
{
 button = 0;
 start=1; 
 }
 }
}

		


if(button == 1)

{
stsrt_too=1;
}



if(button == 2)
{
stsrt_too=0;
pwm_r = 250;
}

// плавный пуск

if (start==1)
{
 if (pwm_r<m) 
 {
   pwm_r = m;
   start=2;
       g=0;
	
   }
  else
{
   _delay_ms(2);
    g++;
   n=pwm_r - g;
   pwm_r = n;
  }
 }

//============плавный пуск============
 if (stsrt_too==1)
{
  if (pwm_r<10) 
  {
    pwm_r=2;
    g=0;
	stsrt_too=2;
    
  } 
  else
  {
   _delay_ms(2);
    g++;
   n=m- g;
   pwm_r = n;
  }
}
//=============светим светодиодом======
if(pwm_r < 5)
{
PORTB |= (1 << PB1);
}
if(pwm_r < 83)
{
PORTB |= (1 << PB5);
}
if(pwm_r < 190)
{
PORTB |= (1 << PB4);
}
if(pwm_r < 244)
{
PORTB |= (1 << PB3);
}
//===================
}
}
на 14 ногу(PB0) цепляю irf 1324

===================

Собрал параллельно регулятор на tl494
с ней никакого шума и "пения" нет не на малых, не на больших оборотах.
схемка во вложении.

!!!!!!В программировании я новичок, подскажите что сделать чтобы пропал гул,шум!!!!!!!
пробовал подключать кварцевые резонаторы 8, 12, 16.результат тоже только тональность пения изменяется.
Вложения
tl494.jpg
регулятор на tl494
(44.8 КБ) 1614 скачиваний
Реклама
Lyav
Родился
Сообщения: 19
Зарегистрирован: Вт дек 21, 2010 12:05:10

Re: Регулятор оборотов печки ШИМ. Нужна помощь.

Сообщение Lyav »

Сначала не обратил внимания. Подключил в авто регулятор на ТЛ-ке, машина не хочет заводиться. если же завестись, а потом включить вентилятор то на приборной панели половина индикаторов начинает светится вполнакала.
Я в недоумении.
Подскажите пожалуйста какое нибудь правильное решение.
Реклама
s64
Потрогал лапой паяльник
Сообщения: 321
Зарегистрирован: Пн окт 18, 2010 21:18:21

Re: Регулятор оборотов печки ШИМ. Нужна помощь.

Сообщение s64 »

уменьшить частоту ШИМ, герц до 50-70.
Lyav
Родился
Сообщения: 19
Зарегистрирован: Вт дек 21, 2010 12:05:10

Re: Регулятор оборотов печки ШИМ. Нужна помощь.

Сообщение Lyav »

А как это сделать, можете пояснить если вам не трудно.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Seriyvolk
Друг Кота
Сообщения: 4964
Зарегистрирован: Сб май 05, 2012 20:19:55
Откуда: Минск

Re: Регулятор оборотов печки ШИМ. Нужна помощь.

Сообщение Seriyvolk »

Lyav писал(а):Сначала не обратил внимания. Подключил в авто регулятор на ТЛ-ке, машина не хочет заводиться. если же завестись, а потом включить вентилятор то на приборной панели половина индикаторов начинает светится вполнакала.
Я в недоумении.
Подскажите пожалуйста какое нибудь правильное решение.
Схемы ёмкостями принято шунтировать, а мотор диодами. И всё заводиться будет и лампы в полнакала пропадут.
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
Реклама
Lyav
Родился
Сообщения: 19
Зарегистрирован: Вт дек 21, 2010 12:05:10

Re: Регулятор оборотов печки ШИМ. Нужна помощь.

Сообщение Lyav »

Seriyvolk писал(а):
Lyav писал(а):Сначала не обратил внимания. Подключил в авто регулятор на ТЛ-ке, машина не хочет заводиться. если же завестись, а потом включить вентилятор то на приборной панели половина индикаторов начинает светится вполнакала.
Я в недоумении.
Подскажите пожалуйста какое нибудь правильное решение.
Схемы ёмкостями принято шунтировать, а мотор диодами. И все заводиться будет и лампы в полнакала пропадут.
Схема ёмкостями шунтирована
Параллельно вентилятору ставлю емкость 10000мкф и керамику 0,1мкф.
Параллельно питанию 4700мкф и керамику 0,1мкф.
Диод тоже присутствует на 40 а с компьютерного БП


Добавил в посте выше схему на tl494 с номиналами.
Реклама
Аватара пользователя
MAVr 34
Собутыльник Кота
Сообщения: 2602
Зарегистрирован: Вт янв 12, 2010 21:11:22
Откуда: Волжский Волгоградской обл.

Re: Регулятор оборотов печки ШИМ. Нужна помощь.

Сообщение MAVr 34 »

Параллельно вентилятору ставлю емкость 10000мкф и керамику 0,1мкф.
:shock: Это вы параллельно двигателю вентилятора ставите? Двигатель шунтируется только диодом, а вот по питанию схемы ставят электролит и керамику, причем электролит желательно 2-3штуки на 2200мкф., а не один большой.
Собрали и смело включайте, лишнее выгорит!
folks
Открыл глаза
Сообщения: 53
Зарегистрирован: Пт янв 18, 2008 19:59:20

Re: Регулятор оборотов печки ШИМ. Нужна помощь.

Сообщение folks »

Вот здесь проект специально, под это дело http://chipmk.ru/index.php?option=com_c ... &Itemid=29 . Правда без энкодера .
Аватара пользователя
Seriyvolk
Друг Кота
Сообщения: 4964
Зарегистрирован: Сб май 05, 2012 20:19:55
Откуда: Минск

Re: Регулятор оборотов печки ШИМ. Нужна помощь.

Сообщение Seriyvolk »

Lyav писал(а):Параллельно вентилятору ставлю емкость 10000мкф и керамику 0,1мкф.
Это очень большая ошибка.
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
Lyav
Родился
Сообщения: 19
Зарегистрирован: Вт дек 21, 2010 12:05:10

Re: Регулятор оборотов печки ШИМ. Нужна помощь.

Сообщение Lyav »

Seriyvolk писал(а):
Lyav писал(а):Параллельно вентилятору ставлю емкость 10000мкф и керамику 0,1мкф.
Это очень большая ошибка.
Понял исправлю.
Lyav
Родился
Сообщения: 19
Зарегистрирован: Вт дек 21, 2010 12:05:10

Re: Регулятор оборотов печки ШИМ. Нужна помощь.

Сообщение Lyav »

Подскажите пожалуйста, а как пощитать частоту в коде приведенном выше.
И какая часть кода за нее отвечает? Я так понял что эта

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


TCCR0 |= (1 << CS00);вот эта строчка 

Как можно изменить в данном случае частоту шим

Может я не правильно пощитал у меня частота получилась около 61Гц при тактовой частоте 4МГц.
Почитав форумы пришёл к выводу что частота должна бить около 15 КГц
Исправте меня Пожалуйста если вчомто ошибаюсь, Я только учусь. :solder: :solder:
Аватара пользователя
sheva_s
Грызет канифоль
Сообщения: 256
Зарегистрирован: Пт апр 27, 2007 14:32:48
Откуда: Украина Кривой Рог
Контактная информация:

Re: Регулятор оборотов печки ШИМ. Нужна помощь.

Сообщение sheva_s »

При сильно большой частоте ШИМа будет сильно большой нагрев защитного диода который шунтирует двигатель в своё время проверил уже диод кипит.
Аватара пользователя
Seriyvolk
Друг Кота
Сообщения: 4964
Зарегистрирован: Сб май 05, 2012 20:19:55
Откуда: Минск

Re: Регулятор оборотов печки ШИМ. Нужна помощь.

Сообщение Seriyvolk »

Шоттки не греется при любой частоте.
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
Ответить

Вернуться в «АвтоМотоВело»