Go Down

Topic: [Résolu!] La fonction analogWrite(..) ne fonctionne pas sur Arduino Mega 2560. (Read 2065 times) previous topic - next topic

simonlefort

[Edit: Résolu! Le problème vient de l'IDE 1.6.4 sur Fedora 25. Ça marche depuis une Ubuntu Mate 16.4 avec l'IDE en version "2:1.0.5+dfsg2-4". Pour régler le problème sur Fedora, j'ai du installer la version 1.8.2 manuellement. /Edit]

/Edit]

Bonjour à tous,

J'utilise des Arduino depuis 5-6 ans et je suis bloqué face à quelque chose qui me semble bête comme tout...

J'ai besoin de gérer du PWM pour contrôler la vitesse de quatre moteurs. J'utilise des VNH2SP30 de chez Pololu comme contrôleur moteur. Le sens du moteur est choisi via les pin "INA" et "INB". La vitesse est contrôlée par un signal PWM.

J'ai fait des tests hier avec une Arduino Nano et ça marche sans aucun problème. Dès que je passe sur une Arduino Mega, ça ne va plus. (J'en ai essayé deux.)

Mon problème :
Le signal PWM n'est pas généré par l'Arduino Mega 2560.

Code: [Select]

//MOTEUR
const int Pin_pwm_1 = 9;
const int Pin_ina_1 = 15;
const int Pin_inb_1 = 14;

void setup() {
  pinMode(Pin_pwm_1, OUTPUT);
  pinMode(Pin_ina_1, OUTPUT);
  pinMode(Pin_inb_1, OUTPUT);

  Serial.begin(38400);
  Serial.println("setup");
}

void loop() {
  Serial.println("loop");
 
  digitalWrite(Pin_ina_1, HIGH);
  digitalWrite(Pin_inb_1, LOW);
 
  analogWrite(Pin_pwm_1, 200);

  delay(200);
}


J'ai bien 5V sur la broche 15 (INA) et 0V sur la broche 14 (INB) mais quelque soit la valeur du PWM que je mets dans analogWrite, j'ai 0V!

J'ai branché correctement les câbles, la Pin 9 est bien capable de générer du PWM sur une Arduino Mega 2560, le code est tout petit et ne devrait pas poser de problème... Je suis perdu.

Normalement, on peut bien brancher l'arduino sur USB tout en l'alimentant en 12V ? Sur cette page, il est mis que la source est sélectionnée automatiquement ( "The Mega 2560 can be powered via the USB connection or with an external power supply. The power source is selected automatically." ). C'est confirmé sur ce post du forum.

J'ai fait quelques photos que vous pouvez retrouver dans cette galerie.


ard_newbie


Arduino Mega PWM: 2 to 13 and 44 to 46. Provide 8-bit PWM output with the analogWrite() function.

simonlefort

Arduino Mega PWM: 2 to 13 and 44 to 46. Provide 8-bit PWM output with the analogWrite() function.
Thanks... But if you read my first post, you'll see I use pin 9 which provide PWM.

Quote from: _pepe_
Bonsoir

Ton programme n'est pas en cause. Par acquis de conscience je l'ai chargé dans un Arduino Mega 2560, et la sortie 9 fournit bien le signal PWM attendu.

Il s'agit probablement d'un problème de câblage, voire de mesure (avec quoi lis-tu 0V ?).
Je pense que ce n'est malheureusement pas un problème de câblage. J'ai tout débranché et puis j'ai branché juste une led avec une résistance d'1kΩ sur la broche 9 et le câble USB. (Pas d'autre alimentation)

Si je fais un "digitalWrite(Pin, HIGH);", la led s'allume. Si je fais un "analogWrite(pin, 250);", la led ne s'allume pas.

Je mesure 0V avec un simple multimètre. Sur une autre Arduino, je vois bien une valeur correspondant au PWM (~4V si je mets le PWM à 200, par exemple).

Ce qui allume la led :
Code: [Select]

const int Pin_pwm = 9;

void setup() {
  pinMode(Pin_pwm, OUTPUT);

  Serial.begin(38400);
  Serial.println("setup");
}

void loop() {
  Serial.println("loop");
  
  //analogWrite(Pin_pwm, 254);
  digitalWrite(Pin_pwm, HIGH);
  
  delay(100);
}


Dès que je passe avec "analogWrite(Pin_pwm, 254);", ça ne s'allume pas.
Code: [Select]
const int Pin_pwm = 9;

void setup() {
  pinMode(Pin_pwm, OUTPUT);

  Serial.begin(38400);
  Serial.println("setup");
}

void loop() {
  Serial.println("loop");
  
  analogWrite(Pin_pwm, 254);
  //digitalWrite(Pin_pwm, HIGH);
  
  delay(100);
}


Ce qui est "marrant", c'est que si je mets "analogWrite(Pin_pwm, 255);", la led s'allume correctement!

C'est à n'y rien comprendre.


Concernant l'alimentation, il vaudrait mieux alimenter en combien ? 9V ?

simonlefort

Je n'avais pas pris le temps de vérifier, mais je me disais bien qu'il devait y avoir quelque chose comme ça.

Par curiosité, où peux-tu voir le détail des fonctions ?

[Edit: J'imagine que ce n'est pas possible que ça vienne d'un problème software de l'IDE Arduino ?
Je suis en version 1.6.4 sur une Fedora 25.

[edit2: On a eu la même idée du problème lié à l'IDE. Je vais essayer depuis une autre machine.

[edit3: Sur une autre machine, une Ubuntu Mate 16.04, j'ai l'IDE en version "2:1.0.5+dfsg2-4". Et ça fonctionne! Je peux faire varier la luminosité de ma led, donc le PWM fonctionne. \o/

[edit4: J'ai supprimé puis réinstallé l'IDE d'Arduino sur ma Fedora. Le problème persiste. Je tente une installation manuelle de la dernière version stable (1.8.2), téléchargeable depuis ]arduino.cc.

J'ai décompressé l'archive, lancé le script d'installation (qui n'a pas remplacé l'IDE en version 1.6.4 présent sur la machine...) et puis finalement juste lancé, depuis le dossier décompressé :
Code: [Select]
$ ./arduino

Ça fonctionne. Je peux uploader le code avec un analogWrite et ÇA MARCHE!

Merci _pepe_ pour ton aide et ton temps. :-)

simonlefort

Sur Fedora, le dossier est là :
Code: [Select]
$ ls /usr/share/arduino/hardware/arduino/avr/cores/arduino/
abi.cpp                   IPAddress.cpp             USBCore.cpp
Arduino.h                 IPAddress.h               USBCore.h
binary.h                  main.cpp                  USBDesc.h
CDC.cpp                   new.cpp                   WCharacter.h
Client.h                  new.h                     WInterrupts.c
HardwareSerial0.cpp       Printable.h               wiring_analog.c
HardwareSerial1.cpp       Print.cpp                 wiring.c
HardwareSerial2.cpp       Print.h                   wiring_digital.c
HardwareSerial3.cpp       Server.h                  wiring_private.h
HardwareSerial.cpp        Stream.cpp                wiring_pulse.c
HardwareSerial.h          Stream.h                  wiring_shift.c
HardwareSerial_private.h  Tone.cpp                  WMath.cpp
HID.cpp                   Udp.h                     WString.cpp
hooks.c                   USBAPI.h                  WString.h


Je fouillerai ça un jour. :)

En tout cas, en version 1.8.2, ça marche bien. C'est juste con que Fedora n'ait pas encore cette version dans les dépôts! J'imagine que ça ne tardera pas trop... En attendant, je me débrouillerai avec l'installation manuelle.

Go Up