Go Down

Topic: Tension pilotée et stable (Read 524 times) previous topic - next topic

Jean-François

Feb 07, 2009, 06:03 pm Last Edit: Feb 07, 2009, 07:30 pm by jfs Reason: 1
Je commence ce post ici , mais on était plus vraiment dans le sujet du post.... ::)


Donc dans mon dernier message je disais avoir trouvé "Regulated Positive Voltage Booster" dans le playground.

Mon but est de stabiliser la tension sur un véhicule à une valeur choisie (par exemple 12.00 volts) et j'aimerais que cela soit le plus stable possible (0,05 volt).

Actuellement j'ai ce code qui me fait une stabilité de 0,5 volts :

Code: [Select]
volatile int ppm_count;
unsigned long send_Time=0;
unsigned long send_Freq=0;
unsigned long timeold_Time;
unsigned long timeold_Freq;
                              //unsigned long diff_Ppm;
unsigned long ppm;                          //Pulse per minute
int pwm_Volt;
int pinVolt = 9;
int val;
void setup()
{
 TCCR1B = 0x09;
 Serial.begin(9600);
 attachInterrupt(0, ppm_fun, FALLING);
 pinMode(pinVolt,OUTPUT);
}
void loop()
{
 if (ppm_count >= 145) {
   ppm = 540/(millis() - timeold_Freq)*ppm_count;
   timeold_Freq = millis();
   ppm_count = 0;
   val=1;
 }
 long freq = 80000;                 //tension x 10'000
                       // freq/=35;
 if (val==1){
   if(ppm>=freq){
                      // diff_Ppm = freq-ppm;
                      //pwm_Volt=255-255*diff_Ppm/freq;
     pwm_Volt--;    
   }
   if (ppm<=freq){
                     //diff_Ppm = freq-ppm;
                     // pwm_Volt = 0+255*diff_Ppm/freq;
     pwm_Volt++;
   }
   if( pwm_Volt >255){
     pwm_Volt= 255;
   }
   if( pwm_Volt < 0){
     pwm_Volt= 0;
   }
   val=0;
 }
 analogWrite(pinVolt,pwm_Volt);
 send_Time=millis()-timeold_Time;
 if (send_Time >=1000){
   Serial.print(" ppm : ");
   Serial.print(ppm,DEC);
   Serial.print("   ");
   Serial.print("  ppm_count : ");
   Serial.print(ppm_count,DEC);
   Serial.print("   ");
   Serial.print("  pwm : ");
   Serial.println(pwm_Volt,DEC);
   timeold_Time = millis();
 }
}
void ppm_fun()
{
 ppm_count++;
 //Each pulse, this interrupt function is run twice
}




Je trouve un problème majeur dans ce code :

- Avec la fonction interrupt(), ce sont les pulses enregistrés qui donne la durée de l'échantillonage, je préférerais avoir une durée fixe pour faire cet échantillonage.
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Go Up