Page 6 sur 7

Re: Mesure des températures avec courbes

Publié : sam. janv. 23, 2016 9:31 pm
par Tiflo
Quand je débranche le signal (source) du mosfet, le ventilateur s'arrête de tourner. Par contre au moindre retranchement il se remet à tourner.
C'est normal
Et si tu débranches la Gate, il restera dans le même état.
Si tu veux qu'il s'arrête au débranchement de la GATE, il faut mettre une résistance pulldown (pin arduino vers la masse).
Par contre avec un pwm à 0 le ventilateur continue de tourner très lentement. Avec un pwm de 20% et 40%, le ventilateur émet un petit grésillement, un condensateur pourrai-t-il améliorer la chose? (j'en ai un de 10v 22uF)
Je ne sais pas ce que tu utilises comme ventilateur, si c'est un 2 fils, la commande par PWM n'est pas terrible et on conseille de rajouter un filtre passe bas (resistance + condo) avant d'attaquer la Gate.

Re: Mesure des températures avec courbes

Publié : sam. janv. 23, 2016 10:05 pm
par Tim0th3e
J'utilise un ventilateur 4 fils (+ - pwm tach) mais j'ai fait des tests et il n'est pas compatible, d'ou l'utilisation d'un transistor pour commander le ventilateur avec les fils + et -

Re: Mesure des températures avec courbes

Publié : dim. janv. 24, 2016 8:33 am
par Jacques
Une question qui n'a rien à voir avec ton montage, le panneau de led que l'on voit sur tes images mesure combien et as-tu un lien de ce produit?

J'ai vu qu'il existe une méthode pour changer la fréquence du PWM sur arduino, c'est peut être la bonne méthode que de le passer à 25Khz. Dans ce cas le transistor ne sera plus utile.
Attention tout de même, modifier cette fréquence a un impact sur certains timer. Il faudra donc choisir une pin qui ne change pas les timers que tu vas utiliser pour le reste du programme.
http://playground.arduino.cc/Code/PwmFrequency

Re: Mesure des températures avec courbes

Publié : dim. janv. 24, 2016 10:09 am
par Tim0th3e
Un panel consomme env 0.01A
Voici le lien du produit.

Si on modifie la fréquance, je ne comprend pas comment le transistor disparaîtrait.

J'ai lu le lien que vous m'avez donné et ça endommage des pin :?
Quel est l'avantage d'un changement comme celui-ci?

Re: Mesure des températures avec courbes

Publié : dim. janv. 24, 2016 10:36 am
par Jacques
On revient alors dans la configuration première, le ventilateur est alimenté normalement et le signal pwm se branche de l'arduino directement sur le fil pwm du ventilateur. On oublie pas de brancher les masses ensembles ;)
Si cette solution fonctionne, on aura alors un fonctionnement plus que parfait de 0 à 100%
Il faut utiliser la broche 9 et ne plus utiliser tout ce qui utilise le timer1 comme indiqué sur la page

Re: Mesure des températures avec courbes

Publié : dim. janv. 24, 2016 10:51 am
par Tim0th3e
"Changes on pins 9 or 10 will cause the Servo library to function incorrectly."
Quand vous dites timer 1, c'est par exemple la fonction delay?
Si on fait cette manipulation, est-ce que ça sera tout les pins ou juste le pin 9 qui ne supportera plus le delay?

Re: Mesure des températures avec courbes

Publié : dim. janv. 24, 2016 11:01 am
par Jacques
Non en fait ce qui changera c'est tout ce qui est en rapport avec le timer1 (interne à arduino).
Le timer1 est utilisé pour le timing des servos moteurs par exemple qui n'est pas utile pour toi.
Pour éviter de toucher à la fonction delay ou millis on utilisera donc la pin 9 pour le pwm

Re: Mesure des températures avec courbes

Publié : dim. janv. 24, 2016 11:14 am
par Tim0th3e
D'accord donc j'ai juste à téléverser le programme sur le site ou je dois le modifier?

Faut-il faire un burn bootloader?

Re: Mesure des températures avec courbes

Publié : dim. janv. 24, 2016 11:43 am
par Jacques
En fait il faut copier le code, le configurer et l'ajouter à ton programme.
En regardant de près il suffit juste de changer la valeur du timer x (TCCRxB) avec un diviseur.
Le timer 1 semble avoir une fréquence de base de 31Khz, la valeur devra être à 0 pour ne plus le diviser. Nous aurons alors 31K au lieu de 22 à 28Khz requis, ca fonctionne peut être mieux que les 500Hz de base, il faut tester.

Re: Mesure des températures avec courbes

Publié : dim. janv. 24, 2016 4:43 pm
par Jacques
Autre solution c'est de remplacer le Mosfet par un transistor NPN, car il n'a pas de phénomène de capacité interne qui gène le PWM.
Mais je crois plus que le ventilateur n'est pas adapté à ce mode de fonctionnement à cause de son électronique interne.

Re: Mesure des températures avec courbes

Publié : lun. janv. 25, 2016 7:36 pm
par Tim0th3e
J'ai un doute. J'ai changé TCCR1B et TCCR2B en TCCR0B et TCCR0B. Donc touts les TCCRxB avec un autre chiffre que 0, je les ai changés. Est-ce juste?

J'ai une erreur de compilation:

exit status 1
expected constructor, destructor, or type conversion before '(' token à la ligne 10. Je ne sais pas ce que c'est... :?

Code : Tout sélectionner

// Set pin 9's PWM frequency to 3906 Hz (31250/8 = 3906)
// Note that the base frequency for pins 3, 9, 10, and 11 is 31250 Hz
setPwmFrequency(9, 8);

// Set pin 6's PWM frequency to 62500 Hz (62500/1 = 62500)
// Note that the base frequency for pins 5 and 6 is 62500 Hz
setPwmFrequency(6, 1);

// Set pin 10's PWM frequency to 31 Hz (31250/1024 = 31)
setPwmFrequency(10, 1024);

/**
 * Divides a given PWM pin frequency by a divisor.
 *
 * The resulting frequency is equal to the base frequency divided by
 * the given divisor:
 *   - Base frequencies:
 *      o The base frequency for pins 3, 9, 10, and 11 is 31250 Hz.
 *      o The base frequency for pins 5 and 6 is 62500 Hz.
 *   - Divisors:
 *      o The divisors available on pins 5, 6, 9 and 10 are: 1, 8, 64,
 *        256, and 1024.
 *      o The divisors available on pins 3 and 11 are: 1, 8, 32, 64,
 *        128, 256, and 1024.
 *
 * PWM frequencies are tied together in pairs of pins. If one in a
 * pair is changed, the other is also changed to match:
 *   - Pins 5 and 6 are paired on timer0
 *   - Pins 9 and 10 are paired on timer1
 *   - Pins 3 and 11 are paired on timer2
 *
 * Note that this function will have side effects on anything else
 * that uses timers:
 *   - Changes on pins 3, 5, 6, or 11 may cause the delay() and
 *     millis() functions to stop working. Other timing-related
 *     functions may also be affected.
 *   - Changes on pins 9 or 10 will cause the Servo library to function
 *     incorrectly.
 *
 * Thanks to macegr of the Arduino forums for his documentation of the
 * PWM frequency divisors. His post can be viewed at:
 *   http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1235060559/0#4
 */
void setPwmFrequency(int pin, int divisor) {
  byte mode;
  if(pin == 5 || pin == 6 || pin == 9 || pin == 10) {
    switch(divisor) {
      case 1: mode = 0x01; break;
      case 8: mode = 0x02; break;
      case 64: mode = 0x03; break;
      case 256: mode = 0x04; break;
      case 1024: mode = 0x05; break;
      default: return;
    }
    if(pin == 5 || pin == 6) {
      TCCR0B = TCCR0B & 0b11111000 | mode;
    } else {
      TCCR0B = TCCR0B & 0b11111000 | mode;
    }
  } else if(pin == 3 || pin == 11) {
    switch(divisor) {
      case 1: mode = 0x01; break;
      case 8: mode = 0x02; break;
      case 32: mode = 0x03; break;
      case 64: mode = 0x04; break;
      case 128: mode = 0x05; break;
      case 256: mode = 0x06; break;
      case 1024: mode = 0x7; break;
      default: return;
    }
    TCCR0B = TCCR0B & 0b11111000 | mode;
  }
}
Merci :)

Re: Mesure des températures avec courbes

Publié : lun. janv. 25, 2016 9:46 pm
par Jacques
J'ai dit plus haut qu'il faudrait diviser par 0, il fallait bien sûr comprendre 1 (31250/1=31250)

Pour moi ce code est suffisant

Code : Tout sélectionner

void setup() {
  // put your setup code here, to run once:
TCCR1B = TCCR1B & 0b11111000 | 0x01;
}

void loop() {
  // put your main code here, to run repeatedly:

}
On peut faire un essai avec 0x05 soit un diviseur de 1024, soit 31250/1024= 30hz
En mettant une led sur le port9 on doit la voire clignoter en bougeant la main avec un pwm de 128 (un peu comme un néon en bougeant la tête)
On peut aussi mettre un HP avec une résistance de 1K en série, le son sera très grave du style vibreur.

Re: Mesure des températures avec courbes

Publié : mar. janv. 26, 2016 5:13 pm
par Tim0th3e
Quand j’exécute ce programme, rien ne se passe, le ventilateur ne change pas de vitesse.

Code : Tout sélectionner

int ventilo = 9;

void setup() {
  pinMode(ventilo,OUTPUT);
}

void loop() {
  analogWrite(ventilo,0);
}
Pourtant j'ai bien téléversé le programme que vous m'avez donné

Re: Mesure des températures avec courbes

Publié : mar. janv. 26, 2016 5:34 pm
par Paul
Concernant ton code et l'erreur: il me semble que tu ne peux pas déclarer tes setPwmFrequency() en dehors d'une fonction void :-\
Tim0th3e a écrit :J'ai un doute. J'ai changé TCCR1B et TCCR2B en TCCR0B et TCCR0B. Donc touts les TCCRxB avec un autre chiffre que 0, je les ai changés. Est-ce juste?

J'ai une erreur de compilation:

exit status 1
expected constructor, destructor, or type conversion before '(' token à la ligne 10. Je ne sais pas ce que c'est... :?

Code : Tout sélectionner

// Set pin 9's PWM frequency to 3906 Hz (31250/8 = 3906)
// Note that the base frequency for pins 3, 9, 10, and 11 is 31250 Hz
setPwmFrequency(9, 8);

// Set pin 6's PWM frequency to 62500 Hz (62500/1 = 62500)
// Note that the base frequency for pins 5 and 6 is 62500 Hz
setPwmFrequency(6, 1);

// Set pin 10's PWM frequency to 31 Hz (31250/1024 = 31)
setPwmFrequency(10, 1024);

/**
 * Divides a given PWM pin frequency by a divisor.
 *
 * The resulting frequency is equal to the base frequency divided by
 * the given divisor:
 *   - Base frequencies:
 *      o The base frequency for pins 3, 9, 10, and 11 is 31250 Hz.
 *      o The base frequency for pins 5 and 6 is 62500 Hz.
 *   - Divisors:
 *      o The divisors available on pins 5, 6, 9 and 10 are: 1, 8, 64,
 *        256, and 1024.
 *      o The divisors available on pins 3 and 11 are: 1, 8, 32, 64,
 *        128, 256, and 1024.
 *
 * PWM frequencies are tied together in pairs of pins. If one in a
 * pair is changed, the other is also changed to match:
 *   - Pins 5 and 6 are paired on timer0
 *   - Pins 9 and 10 are paired on timer1
 *   - Pins 3 and 11 are paired on timer2
 *
 * Note that this function will have side effects on anything else
 * that uses timers:
 *   - Changes on pins 3, 5, 6, or 11 may cause the delay() and
 *     millis() functions to stop working. Other timing-related
 *     functions may also be affected.
 *   - Changes on pins 9 or 10 will cause the Servo library to function
 *     incorrectly.
 *
 * Thanks to macegr of the Arduino forums for his documentation of the
 * PWM frequency divisors. His post can be viewed at:
 *   http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1235060559/0#4
 */
void setPwmFrequency(int pin, int divisor) {
  byte mode;
  if(pin == 5 || pin == 6 || pin == 9 || pin == 10) {
    switch(divisor) {
      case 1: mode = 0x01; break;
      case 8: mode = 0x02; break;
      case 64: mode = 0x03; break;
      case 256: mode = 0x04; break;
      case 1024: mode = 0x05; break;
      default: return;
    }
    if(pin == 5 || pin == 6) {
      TCCR0B = TCCR0B & 0b11111000 | mode;
    } else {
      TCCR0B = TCCR0B & 0b11111000 | mode;
    }
  } else if(pin == 3 || pin == 11) {
    switch(divisor) {
      case 1: mode = 0x01; break;
      case 8: mode = 0x02; break;
      case 32: mode = 0x03; break;
      case 64: mode = 0x04; break;
      case 128: mode = 0x05; break;
      case 256: mode = 0x06; break;
      case 1024: mode = 0x7; break;
      default: return;
    }
    TCCR0B = TCCR0B & 0b11111000 | mode;
  }
}
Merci :)

Re: Mesure des températures avec courbes

Publié : mar. janv. 26, 2016 8:55 pm
par Tim0th3e
Merci pour votre réponse. J'ai laissé tomber le code et j'ai téléversé celui que Jacques m'à proposé.
Mais pour l'instant ça ne foncionne pas