AVR problém s PWM regulací

Dotazy na technické problémy, vlastní řešení technických problémů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
0ff58c
Příspěvky: 116
Registrován: 20 lis 2010, 00:00
Bydliště: Jaroměř, Brno

AVR problém s PWM regulací

#1 Příspěvek od 0ff58c »

Napsal jsem program, který má podle proudového senzoru ovládat proud, který teče do baterie. Zatím místo tranzistoru mám použitou LED diodu a místo proudového senzoru trimr a AD převodník. A můj problém je ten, že při hodnotě OCR1A = 1023 tak mi LED neperiodicky problikává.

Proměnné:

Kód: Vybrat vše

volatile int transistor;


Definice:

Kód: Vybrat vše

#define F_CPU 16000000UL
#define CURRENTKONST   4 //256x rozdělení periody
#define SIGN          >
#define OSIGN         <


Obsluha přerušení:

Kód: Vybrat vše

SIGNAL(TIMER1_OVF_vect)
{   
    OCR1A = transistor;     
}   


Nastavení registrů:

Kód: Vybrat vše

TCCR1A |= (1 << COM1A1) | (1 << COM1A0) | (1 << WGM10) | (1 << WGM11);  //PWM 10bit; 3 mód PWM 
TCCR1B |=  (1 << CS11);                  //8mi bitová předdělička
TIMSK1 |= (1 << TOIE1);                  //povolení přerušení časovače1 (PWM)


Část kódu:

Kód: Vybrat vše

//regulace proudu pro 13500mV  až 14000mV
if ((voltage > 13500) & (voltage < 14000))
{
   if (current SIGN 100)
   {
      transistor+=CURRENTKONST;
      if (transistor > 1023)
      {
         transistor = 1023;
      }
   }else if (current OSIGN 100)
   {
      transistor-=CURRENTKONST;
      if (transistor < 1)
      {
         transistor = 0;
      }
   }
}


Děkuji předem za odpovědi.
Martin Smolák


Edit.:
Mám ještě jeden problém když jsem použil více přerušení. Použil jsem Timer0, Timer1, Timer2, ADC, INT0. A problém je ten, že když se "volá" např.: timer2 tak to rozhodí hodnoty adc a timeru1, atd. Nevíte někdo co s tím?
Jenda_KL
Příspěvky: 1173
Registrován: 10 zář 2008, 00:00
Bydliště: Kadaň
Kontaktovat uživatele:

#2 Příspěvek od Jenda_KL »

0ff58c píše:Nevíte někdo co s tím?
špatná práce se zásobníkem? Těžko říct co tam překladač vymyslel.
Uživatelský avatar
0ff58c
Příspěvky: 116
Registrován: 20 lis 2010, 00:00
Bydliště: Jaroměř, Brno

#3 Příspěvek od 0ff58c »

Přikládám ještě video http://youtu.be/JOZHWIK_YKk. PWM regulátor je připojen na první LEDku z prava (slabě problikává). Při zmáčknut tlačítka INT0 se zapnou časovače Timer0 a Timer2. Po chvíli se podívejte na displej začnou se tam měnit hodnoty napětí a proudu (po chvíli, protože jsem musel zmáčknou tlačítko aby se změnili hodnoty napětí a proudu na LCD ((LCD displej pak nebude součástí zapojení) prozatím ho mám přemostěný programově, že se program dostane do obsluhy pro LCD až po zmáčknutí tlačítka, je to z toho důvodu, protože se celý regulátor zpožďuje díky LCD).
Odpovědět

Zpět na „Poradna“