Strujni izvor 0-50A

Rasprava o AVR mikrokontrolerima, AVR projekti i drugo vezano za AVR...

Moderators: pedja089, stojke369, trax, InTheStillOfTheNight

Post Reply
abc
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 498
Joined: 08-03-2007, 20:19
Location: Hrvatska

Re: Strujni izvor 0-50A

Post by abc »

Recimo za racunanje 16 vrijednosti bilo bi:

Code: Select all

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


uint32_t accumulated_filter;
uint16_t filter_array[16];
uint8_t filter_count;
uint16_t sred_adc,izmjereni_adc;
uint16_t filter_value(uint16_t new_filter_value){
		
		accumulated_filter -= filter_array[filter_count];	// Oduzmi najstariju adc vrijednost od sume
		filter_array[filter_count] = new_filter_value;		// Stavi najnoviju vrijednost adc u filter array(niz)
		accumulated_filter += new_filter_value;			// Dodaj najnoviju vrijednost adc 
		filter_count++;						// Postavi brojac da pokazuje slijedecu lokaciju u nizu
		filter_count &= 0b00001111;				// brojac kada dostigne sa 0 do 16 lokacije ponistava na 0
		return(accumulated_filter >>4);			// Dijeli sumu sa 16 , toliko ima elemenata u nizu (array)
		}



int main (void)
{
  
   

   for(;;)  // Loop Forever
   {

	sred_adc=filter_value(izmjereni_adc);

   }
}



User avatar
Kizo
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 387
Joined: 01-11-2009, 22:40
Location: Hrvatska

Re: Strujni izvor 0-50A

Post by Kizo »

Da, to je ovako jedan malo znani zgodan trik, a analogno tome se može vršiti i množenje ako je množitelj naravno potencija broja 2.
Za pdf, dali misliš na ovaj o upravljanju BLDC motorima? Inače jako dobro štivo za pročitati.
abc
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 498
Joined: 08-03-2007, 20:19
Location: Hrvatska

Re: Strujni izvor 0-50A

Post by abc »

Kizo wrote:Da, to je ovako jedan malo znani zgodan trik, a analogno tome se može vršiti i množenje ako je množitelj naravno potencija broja 2.
Za pdf, dali misliš na ovaj o upravljanju BLDC motorima? Inače jako dobro štivo za pročitati.
Da taj pdf,pogledaj slika 6, odnosno nadji "Figure 6. ADC voltage divider and low pass filter circuit" , to sam probao sa 10k +10k i 330nF + 1nF i radi dobro,ne usporava odziv, samo se dobija nizi ispravljeni DC napon. Kad isprobam attiny461 koji ima mogucnost pojacanja na ulazu ADC (20x), javicu da li to moze raditi. Takodje ima puno brzi PWM zbog multiplikacije kloka sa PLL. Osim brzine njegov PWM je dosta komplikovanij od atmega8.

Mislim da ovaj gore kod nece uopste trebati ako bude ovo hardveski radilo. Inace sto se tice avr gcc i softverske simulacije u avr studiu, prakticno nemoguca ako se iskljuci optimizacija za iole komlikovaniji kod dobija se velicina koda koji je 300% ili vise, veci od velicine koja moze stati u taj mikrokontroler a ako se ukljuci optimizacija nemoze se softverski simulirati rad mc-a :D. Takodje recimo kod u kojem se koristi float u odnosu na PIC kompajler, kod je ogroman, ne malo veci vec nekoliko puta veci , jednostavno pojede memoriju mikrokontrolera, ovo mi je cudno jer sto se tice matematike tu ne bi trebalo biti problema. Pretpostavljam da komercijalni IAR kompajler nema takvih problema.
Takodje mi je cudno da hardverski ADC u atmela ima 2x i vise manji sample kondenzator od basic piceva a ADC je sporiji. Ovaj attiny treba da ima mogucnost pokretanja adc-a preko vanjskog interapta.
User avatar
Kizo
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 387
Joined: 01-11-2009, 22:40
Location: Hrvatska

Re: Strujni izvor 0-50A

Post by Kizo »

Mislim da ti ta opcija sa vanjskim interaptom neće trebati, neznam kako si to zamislio. fr*e-running mode ti je ništa drugo nego kao trigger za novu konverziju je uzet vlastiti ADC interapt, tako da čim završi jedna konverzija automatski se pokreče druga, tzv. self-triggering. Upravo u tom modu ćeš dobiti najviše uzoraka po jedinici vremena. Mada vidim ovaj tvoj tiny ima malo kompliciraniju auto-trigger logiku pa može primati trigere i iz drugih izvora, kako sam kažeš, ne samo sa ADIF (ADC Interrupt Flag)

Što se tiče PWM-a, pa bila bi prava grehota da taj timer1 ne digneš na 64MHz. :D
USER STATISTICS
Most active forum: Mikrokontroleri - AVR
Btw. sad si i službeno prešao na mračnu stranu :lol:
abc
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 498
Joined: 08-03-2007, 20:19
Location: Hrvatska

Re: Strujni izvor 0-50A

Post by abc »

Zasto mislis na mracnu stranu :D . Da na vecini foruma koji se bave elektronikom vecinom preovladava pic sto se tice mikrokontrolera, atmel ima jedan vrlo veliki specijalizovani forum koji se bavi samo atmelima.

Mislim da sto se tice kvalitete i razumljivosti dokumenata kako se radi sa mikrokontrolerima i sve u vezi primjene istih u nekoj oblasti , mikrocip je mama za sve, zato pretpostavljam i ima toliko hobista, studenata koji pocinju sa njima. Sto se tice mikrocipovog asemblera za 8bitne mikrokontrolere i ucenja istog je ravno ugristi samog sebe za dupe :D ili nesto slicno je citati atmelove dokumente :D.

Ne znam ili sam ja zahrdjo ili sta je u pitanju, kod upotrebe picova nisam imao problema sa setovanjem hardvera mikrokontrolera, inace je pic cak komplikovaniji za setovanje, ili su ti dokumenti o atmel mikrokontrolerima stvarno lose napisani.

A to sto je momentalno ovaj dio foruma o atmel mikrokontrolerima aktivan je nasa zasluga :D .
User avatar
Kizo
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 387
Joined: 01-11-2009, 22:40
Location: Hrvatska

Re: Strujni izvor 0-50A

Post by Kizo »

Ima da nas Trax zadavi kad vidi koliko smo spamali :D

Inače nemaš samo ti problema sa inicijalizacijom hardvera MC-a.
Uz Bascom sam se naučio dosta gotovanskom načinu programiranja. Ono Config bla, bla. Koji registri i zašto se uključuju nije me briga, glavno da radi. :D Sad kad sam išao osposobit ovaj ADC bilo je tri puta čitanja tog dijela u pdf-u, pa prepisivanje registra na papir i onda program nikako neće da proradi. Normalno da je problem bio u zadnjoj stvari koje sam se sjetio. Nigdje u pdf-u nisu izričito napisali da se za bilo koje poravnanje mora prvo čitati ADCL pa onda ADCH. Doduše napisali su to na primjeru za lijevo poravnanje, pa sam mislio da je za defaultno desno obrnuto. I onda si razbijaš glavu na takvim glupostima, koji vrag ne radi, a sve je dobro.
Dobra stvar je kad jednom prođeš kroz takve zamke, ubuduće nemaš problema s time.
abc
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 498
Joined: 08-03-2007, 20:19
Location: Hrvatska

Re: Strujni izvor 0-50A

Post by abc »

To da mora prvo da se ocita ADCL pa onda ADCH mi je poznato i od prije a i iz uputstva za atmelov C kompajler gdje se to stalno spominje :D.

Vec neko vrijeme mi se sve pomijesalo jos nisam ni poceo sa atmelima, jer je mikrocip radio neke radikalne zahvate na novijim mc-a pa je bolje vise i ne pamtiti nista, vec koji dio hardvera ti treba otvoris taj dio u pdf-u ,prepises setovanje u program, pozeljno komentar, ako radi zaboravi.
Ako ti treba ponovno , copy-paste i mozak na pasu :D.
abc
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 498
Joined: 08-03-2007, 20:19
Location: Hrvatska

Re: Strujni izvor 0-50A

Post by abc »

Ako nekome bude trebao 10bitni fast PWM na atmega8. Ona setovanja sa nulama mozete izbrisati, ostalo dok sam isprobavao. Upisujete u OCR1A vrijednosti od 0 do 1023 i to radi, provjereno na osciloskopu. Ako radite sa nekim drugim kompajlerom a ne winavr provjerite da li treba neki drugi nacin upisa vrijednosti u OCR1A i ICR1 registar.

Code: Select all

#define F_CPU 16000000UL

#include <avr/io.h>



uint16_t value;

void PWM_out(uint16_t pwm)

{

OCR1A = pwm; // 0 - 1023 

}







void main(void)


{

DDRB  = (1 << DDB1); // PORTB1 output 

//fast pwm ,10bit
ICR1=1024;

TCCR1A|=(0<<COM1A0)|(1<<COM1A1)|(0<<COM1B0)|(0<<COM1B1)| (0<<FOC1A)|(0<<FOC1B)|(1<<WGM11)|(0<<WGM10);

TCCR1B|=(0<<ICNC1)|(0<<ICES1)|(1<<WGM13)|(1<<WGM12)|(0<<CS12)|(0<<CS11)|(1<<CS10);




while(1){


		PWM_out(value); // PWM

           }	


}

User avatar
Kizo
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 387
Joined: 01-11-2009, 22:40
Location: Hrvatska

Re: Strujni izvor 0-50A

Post by Kizo »

Zbilja se da i ponešto naučiti od tebe. :wink: Ovo si namjerno konfigurirao da možeš mijenjati rezoluciju PWM-a "u hodu"? Mislim, napravio si da gornju vrijednost definira ICR1 registar, a u njega možeš upisati vrijednost po volji. Ako se dobro sjećam upravo o ovom je nešto pričao Noćni.
Kad smo kod njega, gdje je on nestao?
abc
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 498
Joined: 08-03-2007, 20:19
Location: Hrvatska

Re: Strujni izvor 0-50A

Post by abc »

Kizo wrote:Zbilja se da i ponešto naučiti od tebe. :wink: Ovo si namjerno konfigurirao da možeš mijenjati rezoluciju PWM-a "u hodu"? Mislim, napravio si da gornju vrijednost definira ICR1 registar, a u njega možeš upisati vrijednost po volji. Ako se dobro sjećam upravo o ovom je nešto pričao Noćni.
Kad smo kod njega, gdje je on nestao?
Ovo sa ICR1 samo pali u single slope ili fast pwm modu, neznam koji je pravilan naziv :D .

Pretpostavljam da Nocni ima pametnijeg posla od da visi na forumu :D .
abc
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 498
Joined: 08-03-2007, 20:19
Location: Hrvatska

Re: Strujni izvor 0-50A

Post by abc »

Danas uhvatio malo vremena i uspeo dobiti sa internim oscilatorom PLL ukljucen ,10bitni 64kHz PWM na attiny461.
Onda jos da vidimo kako da namjestimo adc sa 20x ulazom.

Ove atmelove datasheet me izludjuju, kako su fuserski napisane.
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: Strujni izvor 0-50A

Post by InTheStillOfTheNight »

Tu sam ja :). Ispričavam se što sam malo nestao sa foruma baš kada se nešto radilo, ali ovih mjesec ili 2 imao sam totalnu životnu gužvu pa nisam stigao pratiti forum. Sad sam malo pogledao novosti, ali čini mi se da ću ipak morati uzeti sat ili dva da pročitam i proanaliziram sve vaše postove jer sam malo ispao iz toga, pa ne bih volio napisati neki totalno besmislen post kao što mi je u navici :azdaja:
InTheStillOfTheNight
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: Strujni izvor 0-50A

Post by InTheStillOfTheNight »

Kizo wrote: Nigdje u pdf-u nisu izričito napisali da se za bilo koje poravnanje mora prvo čitati ADCL pa onda ADCH. Doduše napisali su to na primjeru za lijevo poravnanje, pa sam mislio da je za defaultno desno obrnuto. I onda si razbijaš glavu na takvim glupostima, koji vrag ne radi, a sve je dobro.
Tako se citaju svi 16 bitni registri, drugacija je procedura za citanje i za pisanje. Al meni je dosadilo stalno razmisljati koji ide prvo L ili H pa sam malo citao source atmelovih primjera. Za timere sam siguran da postoji jednostavno rijesenje, ali mislim da bi to trebalo raditi i za ADC.

Glupo je ovako pristupati 16 bitnom registru:

unsigned char value_h,value_l;
unsigned int value;
value_h = TCNT1H; value_l = TCNT1L;
value = TCNT1H<<8; value |= TCNT1L;

kad se moze i ovako:

unsigned int value;
value = TCNT1;
//compiler ce skuziti koji prvo treba citati, barem u avr studiu i direktno spucati to u integer.
//Treba samo probati dal pali ta fora za ADC...
InTheStillOfTheNight
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: Strujni izvor 0-50A

Post by InTheStillOfTheNight »

Što mislite o ovoj ideji:

Zašto nebi recimo paralelno iskoristili oba OCR registra pod sljedecim uvjetima:
OC1A je onaj PWM koji ide na MOSFET.
OC1B je uvijek 50% manje vrijednosti što znači da može podići interrupt točno na sredini aktivnog OC1A PWM signala.
Ako oba registra upucavamo zajedno uvijek će biti dobro sinkronizirano okidanje interrupta na tocno 50% aktivnog PWM signala, a tocno u tom trenutku interrupta startamo ADC konverter.
Kako je adc konverter sample and hold, on bi trebao dobro uzorkovati napon sa sredine aktivnog PWM signala, a to koliko traje sama pretvorba nije uopce bitno. (Sad da ne objasnjavam tocan rad ADC konvertera bitna je samo 1uS ili manje kada on puni svoj interni kapacitet, a ovo vrijeme trajanja pretvorbe je potrebno dok on to sve pouspoređuje sa svojim referentnim naponima).
Jos bi malo trebalo samo programski doraditi da se ova sekvenca ponavlja nakon svakog završenog ADC konverta.
Mozda je na ovaj nacin moguce izmjeriti tocan napon na sredini PWM signala,a taj napon bi trebao biti proporcionalan sa strujom koja teče kroz shunt.

Vidim da forum stoji, pa uopce ne znam u kojem ste djelu projekta ni koji je tocan problem, ali nadam se da nitko nece zamjeriti na prijedlogu... :)

Ne znam uopce jeli ovo izvedivo za napraviti, jer nikad nisam probao raditi nesto slicno, ali ako je moguće ubosti sredinu PWM-a sa ADC konverterom sa sigurnošću kako će on dobro očitati tu vrijednost onda se uopće ne treba zamarati sa ovim područjem uključenja i isključenja mosfeta.
InTheStillOfTheNight
User avatar
_Maniac_
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 487
Joined: 02-09-2007, 00:12
Location: Bilje (pokraj Osijeka)
Contact:

Re: Strujni izvor 0-50A

Post by _Maniac_ »

Sad ja nesto nisam skontao... Jel gledate to za onaj attiny ili za atmegu8... Jer kako vidim abc smatra da je bolje to sa attiny ili sam ja krivo skontao...
Capo Di Tutti Capi
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: Strujni izvor 0-50A

Post by InTheStillOfTheNight »

Maniac, ja sam napisao samo svoju ideju. Ja uopce ne kuzim problematiku jer nisam bio na forumu 2 mjeseca, ali vidim da je problem čitanja napona sa shunta. Nisam točno skužio ni Kizu ni Abc-a , a i na forumu ne postoje sheme ni određeni smijerovi kojima teče projekt. Nekako sam stekao dojam da se sve zavrtilo u krug pa sam napisao jednu ideju koja bi možda mogla nešto značiti kizi i abc-u jer su oni puno aktualniji sa samim projektom... Ne brini Maniac, ni ja nis ne kuzim :?
InTheStillOfTheNight
User avatar
Kizo
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 387
Joined: 01-11-2009, 22:40
Location: Hrvatska

Re: Strujni izvor 0-50A

Post by Kizo »

O, welcome back Noćni :)

Nemamo šta zamjeriti, svaki prijedlog je dobrodošao, pogotovo ovakvi kao tvoji.
Ovo što pričaš svakako ima smisla, jer nam je oko polovice PWM-a napon na filtru linearan, tako da u tom slučaju možemo konstruirati filtar sa još manjom RC konstantom, pa će odziv onda naravno biti brži.

Međutim, (znam da sam dosadan :D) ima jedna komplikacija.
Kad bi samo napisali OC1B=OC1A/2 i na OC1B pokretali ADC nebi dobili točan rezultat. Čitali bi dio između 0 i OC1A, ali nebi dio između OC1A i TOP. Slika govori više (printscr sa ABC-ovog videa).
Image
Znači čitali bi točku 1, dok nebi točku 2. U svakom slučaju prijedlog je odličan samo ga treba doraditi.
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: Strujni izvor 0-50A

Post by InTheStillOfTheNight »

Ne znam točno zašto kažeš da ne bi dobili dobar rezultat čitajući dio između 0 i OC1A, a ne čitajući dio između OC1A i TOP-a. Pa ovaj drugi dio je MOSFET ugašen i ne znam koji je smisao analizirati taj napon. Mene recimo u ovom slučaju koji sam opisao više muči problematika jeli tu uopće moguće??? Ovu sam ideju bacio iz glave, ali je dosta kompleksna i svaka mala sitnica može srušiti čitavu ideju. Ovo što kažeš da je oko polovice PWM-a napon dobar mi je također nejasno. Ne znam jel misliš na polovicu perioda PWM-a ili polovicu aktivnog dijela PWM-a. Naravno ovo sve treba analizirati u dinamickim uvijetima rada pa onda procjeniti jeli uopće moguće izvesti ovo što sam opisao..

Uostalom ako baš želiš čitati oba dijela onda na svakom interruptu OCR1B-a podesiš čitanje drugog dijela, i kad pročitaš dva puta ADC možeš imati obe vrijednosti mjerene u točno definiranom trenutku. Ali opet ne znam koji je smisao toga jer po meni je bitan samo ovaj dio aktivnog PWM-a..
InTheStillOfTheNight
User avatar
Kizo
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 387
Joined: 01-11-2009, 22:40
Location: Hrvatska

Re: Strujni izvor 0-50A

Post by Kizo »

Je, moja greška, netočno sam se izrazio. Mislio sam na polovici kad je OC1A izlaz u "1" i na polovici kad je OC1A u "0". E sad zašto je bitno znati i ovaj drugi dio? Pa možda i nije bitno, ali moje mišljenje je kad gledaš srednju vrijednost nečega (u ovom slučaju struje kroz shunt), trebaš znati koliki je svaki pojedini dio.

E sad dali je ovakav pristup izvediv trebali bi pitati ABC-a, koji vodi bitku sa registrima, no ja držim da je svaki problem rješiv, samo je pitanje koliko ćeš vremena posvetiti u njegovom rješavanju.
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: Strujni izvor 0-50A

Post by InTheStillOfTheNight »

Dobro to sad sto se tice citanja jednog ili dva djela PWM-a se se svodi samo na programiranje, a naravno tu je apsolutna sloboda svih ideja i mogućnosti. Mislim da je bitnije pricekati abc-a da analizira ovu ideju pa da vidimo ima li to uopce smisla pokušati izvesti. Jako je teško uopće procijeniti hoće li ADC dobro odreagirati čitanje ako ga startamo preko interrupta OCR1B registra pri toj frekvenciji PWM-a. Ovo sve je previše globalnih nagađanja, pa ako se baš i ABC složi da bi trebalo ispobati ideju može se krenuti i sa tim pokušajem. Ja ću naravno pomoći oko programiranja u C-u i koncepcije programa koliko je u mojim mogućnostima....
InTheStillOfTheNight
Post Reply