TIMER-ek pontossága

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
sirbedevir
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2017. május 26. péntek, 12:02

TIMER-ek pontossága

HozzászólásSzerző: sirbedevir » 2018. május 11. péntek, 17:41

Elvileg egy Arduino 2 darab TIMER-ét elindítva, azok egymáshoz képest fázishiba nélkül ugyanabban a fázisban, órajelről órajelre futnak az idők végezetéig.

Egy PI metaldetector építése során gerjesztő és mintavevő impulzus előállítására használva azonban fáziszavart tapasztaltam - azaz a két TIMER futásakor kicsit ingadozik úgy 8-10 másodpercenként a fázisuk. Ha ugyanazt a két 100Hz frekvenciájú négyszögjelet digital Write HIGH és digitalWrite LOW utasításokkal, delaymicrosecunds késleltetésekkel állítottam elő egy ciklusban, akkor ez a fáziszaj jelentősen kisebb lett.

void setup() {
noInterrupts();
CLKPR = _BV(CLKPCE);
CLKPR = _BV(CLKPS1); // órajel 4 osztás
interrupts();

pinMode(11, OUTPUT);//1. négyzögjel
pinMode(5, OUTPUT);//2.négyszögjel

cli();

TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
TCCR3A = 0;
TCCR3B = 0;
TCNT3 = 0;

TCCR1A = _BV(WGM11) | _BV(COM1A1);
TCCR1B = _BV(WGM13) |_BV(CS10) | _BV(WGM12);
ICR1 = 40000;
OCR1A = 2000;//1. négyszögjel hossza
TCNT1 = 0;

TCCR3A = _BV(WGM31) | _BV(COM3A1);
TCCR3B = _BV(WGM33) | _BV(CS10) | _BV(WGM32);
ICR3 = 40000;
OCR3A = 200;//2. négyszögjel hossza
TCNT3 = 37860; //2. négyszögjel időpontja
sei();}

void loop() {
digitalWrite(13,HIGH);// hogy ne legyen üres a loop
delay(500);
digitalWrite(13,LOW);
delay(500);}


Valamit elrontottam?
Vagy bizonytalanság van a TIMER futásában?

vargham
Pákabűvész
Hozzászólások: 227
Csatlakozott: 2014. január 8. szerda, 8:32
Kapcsolat:

Re: TIMER-ek pontossága

HozzászólásSzerző: vargham » 2018. május 11. péntek, 18:13

Én kipróbálnám Arduino nélkül. Látom, hogy AVR GCC hívásokat is használsz, de az Arduino környezet belefordít mindenféle szemetet (millis, serial event, stb). Csinálj egy Atmel Studio projectet, és próbáld azzal!

sirbedevir
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2017. május 26. péntek, 12:02

Re: TIMER-ek pontossága

HozzászólásSzerző: sirbedevir » 2018. május 11. péntek, 18:33

Elég nehéz volt számomra az arduino nano-mega világba is betekintést nyernem, nincs nagyon időm-energiám másikba belevágni, jövő héten építkezés is kezdődik itthon...
Ez egy mega project, azért van 4-el osztva az órajel, hogy negyed microsecundum osztással tudjam egymáshoz képest állítani a fázisukat. A digitalwrite HIGH-LOW-Delaymicroseunds módszerrel viszonylag tűrhetően működik a gép, de csak 1 microsecundum osztással tudom tologatni egymáshoz képest a négyszögjeleket.

sirbedevir
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2017. május 26. péntek, 12:02

Re: TIMER-ek pontossága

HozzászólásSzerző: sirbedevir » 2018. május 11. péntek, 18:35

És ha kikapcsolnék minden megszakítást és felesleges funkciót? Ennek a mega-nak csak az a feladata hogy az adóimpulzusokat generálja, egy nano van a mérőegységben. Tehát semmilyen egyéb funkcióra nincs szükségem, csak a pontos és szabályozható TIMER futásokra.

sirbedevir
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2017. május 26. péntek, 12:02

Re: TIMER-ek pontossága

HozzászólásSzerző: sirbedevir » 2018. május 11. péntek, 19:39

Kiszámoltam, hogy a fáziszaj mértéke akkora, mintha kb 1-1 órajellel kb 10 másodpercenként közelebb-távolabb lépdelne párat a 2 négyszögjel. (Ez nekem a kimeneten már +- 50mv ingást okoz.

Avatar
csegebiga
Chipgyilok
Hozzászólások: 283
Csatlakozott: 2015. március 27. péntek, 21:27

Re: TIMER-ek pontossága

HozzászólásSzerző: csegebiga » 2018. május 12. szombat, 8:49

Ha ennyire pontos órajelre van szükséged, akkor ne programozd, hanem építs egy megfelelő kvarcoszcillátort, és annak a jelét osszad le az általad kívánt frekvenciára.
Vagy ha ennél is pontosabb kell, tehetsz még bele egy pll szabályozást is, és akkor még fáziseltérés sem lehet.

atilla
DrótVégénSzéndarab
Hozzászólások: 47
Csatlakozott: 2016. május 10. kedd, 18:35

Re: TIMER-ek pontossága

HozzászólásSzerző: atilla » 2018. május 12. szombat, 11:23

Neki olyan négyszögjelekre van szüksége, ahol a jelek frekvenciája azonos. Az egymáshoz való fázisukat és a kitöltésüket szabályozni kell. Ezt hagyományosan megépíteni elég rázós és sok esetben több fáziszaj kerül a rendszerbe, mint amivel jelenleg küzd.

sirbedevir
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2017. május 26. péntek, 12:02

Re: TIMER-ek pontossága

HozzászólásSzerző: sirbedevir » 2018. május 14. hétfő, 20:40

Fast pwm = fáziszaj
phase correct pwm = nincs fáziszaj!!!!!
(cipőt a cipőboltból....)


Vissza: “Arduino / C-nyelvű programozás (AVR-Duino, EthDuino, Arduino, Diecimila)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég