Go Down

Topic: Scarica Condensatore (Read 812 times) previous topic - next topic

piergiuseppe90

Dec 06, 2013, 05:39 pm Last Edit: Dec 06, 2013, 08:03 pm by UweFederer Reason: 1
Salve a tutti,
devo fare un sistema per la misura della costante di tempo di un circuito RC basato su Arduino che:
Riceve dal SerialMonitor una indicazione della costante di tempo
Seleziona la frequenza adatta e la imposta
Esegue la misura campionando il segnale
Restituisce il valore misurato partendo da due punti
Calcola la regressione lineare e restituisce il risultato
Esegue la misura N volte calcola media e scarto tipo

Questo è quello che ho fatto:

Code: [Select]
int charging = 13; //pin che mi permette la carica
float Vref =4.6;
void setup()
{
   pinMode(charging,OUTPUT);
   Serial.begin(9600);
   Serial.println("Charging");
 
 }

void loop()
{  
     if (Serial.available())
{
            unsigned long dato = Serial.read();
                    unsigned long theoric_tau = dato-48;
                    Serial.println ("tau");
                    Serial.println (theoric_tau,DEC);
                    digitalWrite(charging,HIGH);
                    delay(10);
                    digitalWrite(charging,LOW);
                    float start=micros();
                    int a=analogRead(A0);
                    float compTime = micros() - start;
                    delay(theoric_tau);
                    float endTime=micros();
                    int b =analogRead (A0);
                    Serial.println(a);
                    Serial.println(b);
                    float v1= ((a*Vref)/1023);
                    float v2= ((b*Vref)/1023);
                    float measured_tau = (float) (endTime - start)/log(v1/v2);
                    Serial.println ("deltat");
                    float deltat= endTime - start;
                    Serial.print("\n");
                    Serial.println(deltat);
                    Serial.print("\n");
                                   
                    Serial.print("Measured constant time is: ");
                    Serial.print(measured_tau);
                    Serial.println(" us");
                   
                   
                    Serial.println("Done Displaying");
                    Serial.println(v1,2);
                    Serial.print("\n");
                    Serial.println(v2);
       
    }
}


Il problema è che l'esercizio richiede di usare interrupt e timer per prendere campioni a intervalli definiti e la possibilità di selezionare la frequenza adatta e quindi il prescaler in base al tau previsto. Qualcuno ha un esercizio simile svolto o sarebbe estremamente gentile da darmi una mano dato che è urgente e  mi serve per una relazione d'esame.

[EDIT] aggiunto i tag Uwe[/EDIT]

PaoloP

#1
Dec 06, 2013, 06:05 pm Last Edit: Dec 06, 2013, 06:11 pm by PaoloP Reason: 1
Ciao e benvenuto,
ti invito a leggere il regolamento del forum e in particolare il punto 7 (http://forum.arduino.cc/index.php?topic=149082.0) per includere il codice postato negli appositi tag.
Puoi modificare il tuo post premendo il tasto modify a destra sopra il post stesso.

Per quanto riguarda gli interrupt guarda qui --> http://playground.arduino.cc/Code/Interrupts e qui --> http://arduino.cc/en/Reference/attachInterrupt
Per i timer e il prescale la faccenda si fa più complessa. Devi studiare a forndo il linguaggio C e wiring (core e lib di Arduino) e il datasheet del micro che stai usando (suppongo sia l'ATmega328P).

Tempo fa un utente a realizzato un frequenzimetro e a pubblicato anche il codice sul forum, potresti partire da li.
Guarda anche le librerie di Leo, che usano spesso e volentieri i timer
--> http://www.leonardomiliani.com/2012/looper-uno-schedulatore-software-per-arduino/comment-page-1/
--> http://www.leonardomiliani.com/2012/leos-un-semplice-so-per-arduino/

EDIT: Forse anche questo può essere un buon punto di partenza --> http://arduino.cc/en/Tutorial/CapacitanceMeter

Go Up