Petite optimisation du code en cours, je m'étais penché dessus hier mais j'ai passé mon aprème
à rager, quand tu bosse pas dans de bonne condition tu fais d'la merde
Du coup ça donne ça pour l'instant :
En soit ça marche pas mal mais l'utilisation de la tempo non bloquante me multiplie les trames et je vois pas trop comment supprimer
ce problème, plus je descend en fréquence et plus le problème est présent.
Ca m'oblige également à modifier les timer pour compenser le problème vu que ça fait monter le bouzin en fréquence ...
Si vous avez une idée
Edit : Essai fait avec un delayMicroseconds() et même problème, d'un côté s'en ai pas un mais je trouve ça dérangeant perso ... x)
à rager, quand tu bosse pas dans de bonne condition tu fais d'la merde
Du coup ça donne ça pour l'instant :
Code :
// Attributions des pins PWM
int PinPosPh1 = 3; // Timer 2
int PinNegPh1 = 11; // Timer 2
int PinPosPh2 = 5; // Timer 0
int PinNegPh2 = 6; // Timer 0
int PinPosPh3 = 9; // Timer 1
int PinNegPh3 = 10; // Timer 1
int compteur = 0; // Compteur tableau "timing"
int switch_pola = 0; // Switch polarité sinus
int delay_timer = 5000; // Délai PWM en microns / 30Hz = 30 / 50Hz = 18 / 115Hz = 7
long unsigned timer_1 = 0;
float load_pwm = 1.0; // Facteur modulation valeur PWM
int timing_1[] = {0, 20, 60, 120, 160, 220, 255, 220, 160, 120, 60, 20, 0};
int timing_2[] = {120, 160, 220, 255, 220, 160, 120, 60, 20, 0, 0, 20, 60};
int timing_3[] = {220, 255, 220, 160, 120, 60, 20, 0, 0, 20, 60, 120, 160};
void setup() {
//Serial.begin(9600);
// Forçage à 0 sorties PWM
char PinPWM[] = {'PinPosPh1', 'PinPosPh2', 'PinPosPh3', 'PinNegPh1', 'PinNegPh2', 'PinNegPh3'};
for (int i = 0; i < 6; i++) {
pinMode(PinPWM[i], OUTPUT);
analogWrite(PinPWM[i], 0);
}
//TCCR0B = TCCR0B & 0b11111000 | 0x01; //Timer 0 (PWM pins 5 & 6)
//TCCR1B = TCCR1B & 0b11111000 | 0x01; //Timer 1 (PWM pins 9 & 10)
//TCCR2B = TCCR2B & 0b11111000 | 0x01; //Timer 2 (PWM pins 3 & 11)
}
void loop() {
if (micros() >= timer_1)
{
int val_ph1 = timing_1[compteur] * load_pwm;
//int val_ph2 = timing_2[compteur] * load_pwm;
//int val_ph3 = timing_3[compteur] * load_pwm;
switch(switch_pola) {
case 0:
analogWrite(PinPosPh1, val_ph1);
//analogWrite(PinPosPh2, val_ph2);
//analogWrite(PinPosPh3, val_ph3);
break;
case 1:
analogWrite(PinNegPh1, val_ph1);
//analogWrite(PinNegPh2, val_ph2);
//analogWrite(PinNegPh3, val_ph3);
break;
}
timer_1 = micros() + delay_timer;
compteur++;
}
if (compteur == 13)
{
compteur = 0;
switch(switch_pola) {
case 0:
switch_pola = 1;
break;
case 1:
switch_pola = 0;
break;
}
}
}
En soit ça marche pas mal mais l'utilisation de la tempo non bloquante me multiplie les trames et je vois pas trop comment supprimer
ce problème, plus je descend en fréquence et plus le problème est présent.
Ca m'oblige également à modifier les timer pour compenser le problème vu que ça fait monter le bouzin en fréquence ...
Si vous avez une idée
Edit : Essai fait avec un delayMicroseconds() et même problème, d'un côté s'en ai pas un mais je trouve ça dérangeant perso ... x)
T'as un problème, t'veux un ban ?