TIMER-ek pontossága

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

TIMER-ek pontossága

Hozzászólás Szerző: sirbedevir »

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
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2014. január 8. szerda, 8:32

Re: TIMER-ek pontossága

Hozzászólás Szerző: vargham »

É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: 8
Csatlakozott: 2017. május 26. péntek, 12:02

Re: TIMER-ek pontossága

Hozzászólás Szerző: sirbedevir »

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: 8
Csatlakozott: 2017. május 26. péntek, 12:02

Re: TIMER-ek pontossága

Hozzászólás Szerző: sirbedevir »

É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: 8
Csatlakozott: 2017. május 26. péntek, 12:02

Re: TIMER-ek pontossága

Hozzászólás Szerző: sirbedevir »

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: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: TIMER-ek pontossága

Hozzászólás Szerző: csegebiga »

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
Biztosítékgyilkos
Hozzászólások: 65
Csatlakozott: 2016. május 10. kedd, 18:35

Re: TIMER-ek pontossága

Hozzászólás Szerző: atilla »

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: 8
Csatlakozott: 2017. május 26. péntek, 12:02

Re: TIMER-ek pontossága

Hozzászólás Szerző: sirbedevir »

Fast pwm = fáziszaj
phase correct pwm = nincs fáziszaj!!!!!
(cipőt a cipőboltból....)
Válasz küldése