ATTINY85 triakový regulátor bojleru FVE elektrárny

Michal
Příspěvky: 7
Registrován: 28 led 2019, 20:26
Reputation: 0

ATTINY85 triakový regulátor bojleru FVE elektrárny

Příspěvek od Michal » 15 kvě 2019, 10:25

Ahoj, postavil jsem regulátor s attiny85 z tohoto projektu: https://forum.arduino.cc/index.php?topic=314773.0
Chodí to,ale potřeboval bych napěťový vstup poněkud jinak. Teď je to tak, že čím větší napětí na vstupu,tím větší střída.
Potřeboval bych to tak, aby 0-3.3V byla střída 0%, 3.35V zůstala poslední hodnota střídy, 3.38-5V zvyšuj (pomalu)střídu do max, 3.34V-3.3V snižuj(pomalu) střídu do min.

Přirovnal bych to ke stavebnímu vrátku:
Stisknu a držím tlačítko NAHORU- stoupá(uvolním-zastaví)
Tlačítko DOLU-klesá(uvolním-zastaví)
Dokud držím,jede až na doraz...
Jen s jedinou vyjimkou-kdy napětí 0-3.3V vrátek rychle spadne až na zem sám od sebe.

regulátor plánuji použít pro balastní zátěž (bojler) který bude užitkovat přebytky z FVE. Vstupní řídící napětí se odebírá z děliče 100:1 z filtračních kapacit střídače.
Díky za jakékoliv nasměrování!

Původní lineární kod:

Kód: Vybrat vše

// Voltage controlled dimmer with ATtiny85
//
// This arduino sketch includes a zero 
// crossing detect function and an opto-isolated triac.
// 
// AC Phase control is accomplished using the internal 
// hardware timer1 in the ATtiny85
//
// Timing Sequence
// * timer is set up but disabled
// * zero crossing detected
// * timer starts counting from zero
// * comparator set to "delay to on" value
// * counter reaches comparator value
// * comparator ISR turns on triac gate
// * counter set to overflow - pulse width
// * counter reaches overflow
// * overflow ISR turns off triac gate
// * triac stops conducting at next zero cross

// The hardware timer runs at 8MHz. 
// A half period of a 50Hz AC signal takes 10 ms is 80000 counts.
// Prescaler set to 1024 gives 78 counts per half period


#include <avr/io.h>
#include <avr/interrupt.h>

#define DETECT 2      //zero cross detect, interrupt 0, is physical pin 7
#define GATE 3        //triac gate is physical pin 2
#define PULSE 2       //trigger pulse width (counts)
#define INSTELPIN 2   // =A2 (digital pin4) is physical pin 3 

void setup(){
  // set up pins
  pinMode(DETECT, INPUT);      //zero cross detect
  digitalWrite(DETECT, HIGH);  //enable pull-up resistor
  pinMode(GATE, OUTPUT);       //triac gate control

  // set up Timer1 
  TCCR1 = 0;     // stop timer 
  OCR1A = 50;    //initialize the comparator
  TIMSK = _BV(OCIE1A) | _BV(TOIE1);  //interrupt on Compare Match A | enable timer overflow interrupt
  sei();  // enable interrupts
  // set up zero crossing interrupt
  attachInterrupt(0,zeroCrossingInterrupt, FALLING);    
}  

//Interrupt Service Routines
void zeroCrossingInterrupt(){   
  TCNT1 = 0;   //reset timer - count from zero
  TCCR1 = B00001011;        // prescaler on 1024, see table 12.5 of the tiny85 datasheet
}

ISR(TIMER1_COMPA_vect){    //comparator match
  digitalWrite(GATE,HIGH); //set triac gate to high
  TCNT1 = 255-PULSE;       //trigger pulse width, when TCNT1=255 timer1 overflows
} 
 
ISR(TIMER1_OVF_vect){       //timer1 overflow
  digitalWrite(GATE,LOW);   //turn off triac gate
  TCCR1 = 0;                //disable timer stop unintended triggers
}

void loop(){     // use analog input to set the dimmer
int instelwaarde = analogRead(INSTELPIN);
OCR1A = map(instelwaarde, 0, 1023, 65, 2); 
}

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: ATTINY85 triakový regulátor bojleru FVE elektrárny

Příspěvek od jankop » 15 kvě 2019, 21:02

Potřeboval bych to tak, aby 0-3.3V byla střída 0%, 3.35V zůstala poslední hodnota střídy, 3.38-5V zvyšuj (pomalu)střídu do max, 3.34V-3.3V snižuj(pomalu) střídu do min.
Co je to pomalu? To předpokládáš ruční řízení?
Problém tohoto celého zařízení vidím v hardware. Jedná se o fázové řízení triaku, chápu, že má jít o variabilní zátěž. Řízení v nule není v tomto případě asi optimální. Ale zapojit si kilowattovou rušičku do vlastního el. rozvodu, na to bych asi neměl koule.

Michal
Příspěvky: 7
Registrován: 28 led 2019, 20:26
Reputation: 0

Re: ATTINY85 triakový regulátor bojleru FVE elektrárny

Příspěvek od Michal » 15 kvě 2019, 21:29

Tu odpoved jsem trochu nepobral. Triak je rizen jako stmivac, po pruchodu nulou se meni cas zapaleni triaku. Klasicky a bezne pouzivany stmivac. O rucnim rizeni jsem nic nepsal, je to rizeno automaticky dle uvedenych hladin napeti. Idealni rychlost zmeny by byla ca 1% na jednu stridu. Co se tyce ruseni, jedna se o ostrovni system, takze zadny stres.

petan
Příspěvky: 358
Registrován: 23 črc 2017, 10:19
Reputation: 0
Kontaktovat uživatele:

Re: ATTINY85 triakový regulátor bojleru FVE elektrárny

Příspěvek od petan » 15 kvě 2019, 22:27

Uplne nechapu jak myslis to zvysovani a snizovani. To zvysovani mas na mysli tak, ze jakmile stoupne napeti nad urcitou mez, tak se zacne zvysovat vykon, nebo ze to bude primo zavisly na napeti na vstupu?
Stejne tak u toho snizovani - kdyz klesne napeti na urcitou mez, tak se zacne treba po 1% za sekundu jit vykon dolu?

Reseni by bylo pomoci trech podminek. Pokud by byla hodnota vstupu moc nizka, tak by to nastavilo promennou instelwaarde natvrdo na 0. Pokud by byla hodnota napeti vetsi, tak by se hodnota zvysovala/snizovala pomoci casovace (viz casovani s millis) az do plne/minimalni hodnoty.

Ale mozna jsem to nepochopil uplne spravne :-)

Michal
Příspěvky: 7
Registrován: 28 led 2019, 20:26
Reputation: 0

Re: ATTINY85 triakový regulátor bojleru FVE elektrárny

Příspěvek od Michal » 15 kvě 2019, 22:46

Jj, pochopil jsi spravne. Ted to funguje spojite cim vic tim vic, coz mi nevyhovuje. Potrebuji to udelat trochu jako servo. Stoupne napeti, zatez se zacne zvysovat tak dlouho, az napeti poklesne. Kdyz poklesne moc, treba vlivem mraku, nebo zapnutim nejakeho spotrebice, zacne snizovat zatez az napeti opet vystoupa do prislusne vyse. V tu chvili zastavi a nemeni. Kdyz poklesne napeti o hodne, mimo rozsah, tak skokove zatez shodi bez prodlevy.

Uživatelský avatar
gilhad
Příspěvky: 778
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: ATTINY85 triakový regulátor bojleru FVE elektrárny

Příspěvek od gilhad » 16 kvě 2019, 07:36

Kód: Vybrat vše


void loop(){ // use analog input to set the dimmer
     int instelwaarde = analogRead(INSTELPIN);
     OCR1A = map(instelwaarde, 0, 1023, 65, 2); 
}
Tohle je to misto, kde se nastavuje cim vic, tim vic - nacte se hodnota napeti v rozsahu 0-1023, nastavi se hodnota pro komparator v rozsahu 65-2

ty chces mit mimo loop nejakou hodnotu stridy a podle nacteneho napeti s ni nejak sibovat

Kód: Vybrat vše

int strida; // v procentech
void loop(){ // use analog input to set the dimmer
     int napeti = map (analogRead(INSTELPIN),0,1023,0,500); //prevedeeme na milivolty
     
     if (napeti < 330) ) { // moc male <3.30 spadni na nulu
        strida=0;
     } else if (napeti < 334) { // male, klesej
         if (strida>0) { //je kam klesat
            strida = strida - 1; // snizime o 1%
         } else {
           strida = 0; // zaporne nebrat, sem se ale nemame dostat
        };
     } else if (napeti < 338) { // tak akorat, zustan
        ; // nedelame nic
     } else  { //      napeti >= 338  velke, rosteme
         if (strida<100) { //je kam rust
            strida = strida + 1; // zvysime o 1%
         } else {
           strida = 100; // dolezli jsme na max
        };
   };
        
        
     OCR1A = map(strida,0,100, 65,2);
}

Michal
Příspěvky: 7
Registrován: 28 led 2019, 20:26
Reputation: 0

Re: ATTINY85 triakový regulátor bojleru FVE elektrárny

Příspěvek od Michal » 16 kvě 2019, 15:46

Super,děkuji za pomoc. Večer vyzkouším nahrát a sdělím výsledek. Při kompilaci vyhodilo chybu, přebývala tam jedna závorka. Po smazání OK. Možná se ta konstrukce pak bude hodit i někomu dalšímu.Začíná svítit a přebytků bude moře.

petan
Příspěvky: 358
Registrován: 23 črc 2017, 10:19
Reputation: 0
Kontaktovat uživatele:

Re: ATTINY85 triakový regulátor bojleru FVE elektrárny

Příspěvek od petan » 16 kvě 2019, 16:14

Přesně takhle jsem to myslel :) Ještě pozor, to zvyšování a snižování je v hlavní smyčce programu bez jakéhokoliv zpoždění. Takže, když přijde signál na zvýšení/snížení, tak to bude zvyšovat/snižovat dost rychle. Mohlo by se použít třeba obyčejný např. delay(500). To by pak měnilo hodnotu o 1 % za 0,5 ms.

Michal
Příspěvky: 7
Registrován: 28 led 2019, 20:26
Reputation: 0

Re: ATTINY85 triakový regulátor bojleru FVE elektrárny

Příspěvek od Michal » 16 kvě 2019, 20:56

Dnes jsem se ke zkouseni bohuzel nedostal. Mam ale jeden dotaz. Regulaci chci pomalou, tedy kdyz ji zpomalim delay v loop, zpusobi to i zpomaleni odezvy te podpetove ochrany ktera ma reagovat okamzite? Diky!

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: ATTINY85 triakový regulátor bojleru FVE elektrárny

Příspěvek od AstroMiK » 16 kvě 2019, 21:08

Jen takový neověřený nápad:

Kdyby se proměnná 'strida' nastavila jako float, tak by se dalo v každé smyčce přičítat (případně odečítat) třeba po setinách procent a tím by se rychlost změny snížila.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 8 hostů