BTS7960 et nano

Bonjour à tous,

Je souhaite utiliser une BTS7960 pour commander un actionneur linéaire avec un Arduino nano.

Précédemment j'utilisais un L298N mais l'actionneur demande trop de courant. Je me suis donc orienté vers le BTS7960.

Avant de l'intégrer dans le montage final, j'ai essayé le code ci-dessous :

#define RPWM 9 // pin D9 pin RPWM BTS7960
#define LPWM 10 // pin D10 pin LPWM BTS7960
#define PWM 11 //  pin D11 pin R_EN and L_EN BTS7960

void motor_CW() {
  digitalWrite (LPWM, LOW);
  digitalWrite (RPWM, HIGH);
  analogWrite (PWM,500);
  Serial.println ("CW");
}

void motor_CCW() {
  digitalWrite (LPWM, HIGH);
  digitalWrite (RPWM, LOW);
  analogWrite (PWM,500); 
  Serial.println ("CCW");
}

//Function buat motor STOP
void motor_stop() {
  digitalWrite (LPWM, LOW);
  digitalWrite (RPWM, LOW);
  analogWrite (PWM,0);
  Serial.println ("STOP");
}

void setup() {
  Serial.begin (9600); 
  Serial.println ("START");
  pinMode (RPWM, OUTPUT);
  pinMode (PWM, OUTPUT);
  pinMode (LPWM, OUTPUT);
}

//Main program
void loop() { 
  motor_CW(); 
  delay (5000); 
  motor_stop();
  delay (5000);
  motor_CCW();
  delay (5000);
  motor_stop(); 
  delay (5000);
  //Loop terus
}

Le code fonctionne bien avec des LEDs mais dès que je mets le module dessus, la tension des GPIOs s'écroule à 2,7V.
Mon nano est alimenté par le port USB du PC. +5v et gnd de l'arduino sont connectés à VCC et GND du module.
Avez vous une idée ?
Merci

Utilisez une batterie lipo séparée pour alimenter le BTS7960.
Vous pouvez suivre cette vidéo:

Merci mais dans cette vidéo, c'est la lipo est utilisée pour alimenter le moteur...Pas le module.

Bonsoir miralant

Attention, VCC du module est une alimentation, si l'Arduino est alimenté par l'USB, cette connexion n'est pas nécessaire.
Le module est autonome pour ce qui est de son alimentation 5v.

Il faut, bien sûre, alimenter le module (moteur) sur B+ et B-.

analogWrite c'est 255 maximum.

Cordialement
jpbbricole

Merci jpbbricole.

Je ne comprends pas votre remarque concernant le VCC. J'ai relié le +5V de l'arduino au VCC du module pour alimenter le module (pas l'inverse) :grin:

Ce que dit la doc:

VCC: 5V du microcontrôleur (MCU)
GND: GND du microcontrôleur (MCU)
L_PWM: 5V du microcontrôleur (MCU) pour CCW(CW) tours
R_PWM: 5V du microcontrôleur (MCU) pour CW(CCW) tours
R_EN et L_EN: PWM du microcontrôleur(MCU)

Il suffit de quatre lignes du MCU au module de pilote (GND. 5V. PWM1. PWM2);
Alimentation de puce d'isolation 5V (peut partager avec MCU 5V);

Bonsoir miralant

Le module n'a pas besoin d'être alimenté, si ce n'est via l'alimentation du moteur (B- et B+), il a son propre régulateur 5v, c'est celui-ci que l'on retrouve sur sa borne 5v ou VCC.
Cette alimentation peut servir pour alimenter l'Arduino, en l'absence de la connexion USB ou d'alimentation via le jack.

Cordialement
jpbbricole

Ok, la subtilité m'avait échappé.
Je risque du coup, d'avoir cramer le module ou l'arduino en faisant cette mauvaise manip ?!?
Je teste ça demain en ne reliant que le GND.
Merci

Bonsoir miralant

Non, je ne le pense pas, mais il faut savoir que cette pin est une alimentation :wink:

Pour tes essais, n'oublie pas que PWM (analogWrite) c'est maximum 255.

Bonne soirée
Cordialement
jpbbricole

Je rebondis sur cette remarque concernant la pin +5V du nano. Littérature n'est pas claire (ou ma compréhension) :slight_smile: ; j'avais compris que lorsqu'on est en USB, elle est à +5v et qu'en mode autonome, on peut alimenter l'arduino via cette pin (protection via une diode shotcky). Je l'utilise d'ailleurs pour alimenter un écran OLED et un MPU6050 :slight_smile:
Mon projet doit fonctionner relié en USB car j'envoie les commandes à l'arduino avec une application c# depuis le PC.

J'ai testé le pont en H sans connecter le VCC mais en alimentant le module uniquement via b+ et b-. J'ai contrôlé la tension entre VCC et GND de la carte mais je n'ai rien et le module ne fonctionne pas mieux. (J'ai 3,3v sur les GPIos).

Je ne comprends ce qui vous fait penser qu'il n'a pas besoin d'alimentation. Dans la doc que vous communiquez, on voit le régul de tension mais pour moi, il est hors module?!

Bonjour miralant

Oui, tout à fait.

Je suis confus :woozy_face:, j'ai testé sur mon module et je n'ai rien. Je m'étais basé sur le fait que je n'ai rien de connecté sur cette pin VCC et que, d'après l'exemple page 5 de la doc, c'est le module qui alimente le montage.

Je pense qu'il est dans le module

Mon câblage est ainsi:

Encore navré :woozy_face:

Cordialement
jpbbricole

Sans soucis.
Si je comprends bien, vous avez que le GND donc.

Vous pilotez le module avec quel type d'arduino ?
Je me demande si ça n'est pas le port USB du PC qui ne délivre pas assez de jus.

Sachant que je dois conserver le port USB, est ce que je peux ajouter une alimentation externe avec cette contrainte ?

Bonjour miralant

Oui.

Avec UNO ou un Mega et le câblage ainsi:

Oui, un simple chargeur USB (5V.) connecté sur le 5V de l'Arduino, soit en "éclatant" le câble et récupérant les file rouge (+5V) et noir (GND) soit en installant ce type de plug.

Mais je doute que cela soit la cause de ton problème.

J'ai modifié ton programme en fonction du câblage ci-dessus, tu remarquera que cela économise un port.

/*
	Câblage selon https://www.handsontec.com/dataspecs/module/BTS7960%20Motor%20Driver.pdf 
*/
#define RPWM 9 // pin D9 pin RPWM BTS7960
#define LPWM 10 // pin D10 pin LPWM BTS7960
//#define PWM 11 //  pin D11 pin R_EN and L_EN BTS7960

void motor_CW(int pwmSpeed) {
	analogWrite (LPWM, 0);
	analogWrite (RPWM, pwmSpeed);
	//analogWrite (PWM,500);
	Serial.println ("CW");
}

void motor_CCW(int pwmSpeed) {
	analogWrite (LPWM, pwmSpeed);
	analogWrite (RPWM, 0);
	//analogWrite (PWM,500);
	Serial.println ("CCW");
}

//Function buat motor STOP
void motor_stop() {
	digitalWrite (LPWM, LOW);
	digitalWrite (RPWM, LOW);
	//analogWrite (PWM,0);
	Serial.println ("STOP");
}

void setup() {
	Serial.begin (9600);
	Serial.println ("START");
	pinMode (RPWM, OUTPUT);
	//pinMode (PWM, OUTPUT);
	pinMode (LPWM, OUTPUT);
}

//Main program
void loop() {
	motor_CW(200);
	delay (5000);
	motor_stop();
	delay (5000);
	motor_CCW(50);
	delay (5000);
	motor_stop();
	delay (5000);
	//Loop terus
}

A+
Cordialement
jpbbricole

Bonsoir Jpbbricole, je viens de tester ton code en réalisant le câblage adéquate (il y a en effet 2 modes de fonctionnement pour ce module). J'ai mis le pwmSpeed au max à 255. Cependant le problème reste le même >> :frowning:

J'ai essayé également en reliant le VCC du module au +5v du nano >> idem :frowning:

J'ai aussi testé en branchant le module sur un chargeur USB plutôt sur sur le PC >> idem :frowning:

La tension sur les GPIO s'écroulent systématiquement dès que je le branche sur le module (mais pas le +5V qui est stable à ~4,3v)
Pour info, j'avais commandé un 2nd module (en backup) et j'ai le même problème.

J'avoue ne plus savoir quoi faire. J'ai testé avec mon autre nano et j'ai le même soucis. Les 2 sont des nano ATMega328p (old boot loader) venant de chine (idem les ponts en H).

Bonsoir miralant

Le code ci-dessus est testé "en vrai".
Il y a des chances pour pour que ton module soit out, si tes signaux s'écroulent.

Cordialement
jpbbricole

Ou incompatible avec le nano. Ça me semble dingue car les 2 modules ont le même comportement :frowning:
Je vois beaucoup d'exemples avec le UNO mais rien avec le nano.

J'ai un esp32 de dispo. Je me dis que je pourrais essayer mais il me semble que les GPIos sont à 3,3v à l'état haut.

Bonsoir miralant

Certainement pas !

C'est la même chose, seul le format change.

Cordialement
jpbbricole

Bonsoir miralant

La documentation dit Control Input Level: 3.3~5V.

Mais je pense plutôt que ton module PWM a un problème.

Cordialement
jpbbricole

Merci jpb de te pencher sur mon problème. C'est à devenir fou.
Tu penses que c'est le pwm du module ou celui de l'arduino ?
Au pire, je peux essayer en testant juste le module avec une alim 5v :

Rpwm = +5v
Lpwm = 0v
R_En et L_En = +5V
VCC = +5v
GND = 0V

Le pwm est juste la pour moduler la tension de sortie (+5v équivalent à analogwrite (255)?)

Ça dedoinera le module.

Bonjour miralant

Vu que ça se produit avec plusieurs Arduino, certainement le module.

Oui, en fait on modifie la largeur des impulsions (c'est toujours du 5V)

Oui, c'est valable. Il faut, bien sûre, alimenter le module (moteur) sur B+ et B-.

Juste une mesure avant, comme tu dis que les signaux "s'écroulent" sitôt connectés sur le module, toutes branchement enlevés sur le module, au moyen d'un ohmmètre, mesures entre GND et chaque entrée de commande, Rpwm, Lpwm, R_En L_En pour voire s'il ne sont pas en court-circuit avec GND.

Cordialement
jpbbricole

30kohms entre le GND et les 4 pins de commandes.


J'ai testé avec une alim 5v et j'ai le même problème.
Rpwm = +5v
Lpwm = 0v
R_En et L_En = +5V
VCC = +5v
GND = 0V

La tension baisse un peu mais c'est moins flagrant (suffisant pour être un niveau haut). Pour autant, j'ai rien entre M+ et M-.
Ce que je trouve fou c'est que les 2 modules ont le même comportement alors je me dit que j'ai du passer à côté de quelque chose et cramer les 2.
Ou le fournisseur m'a envoyé 2 daubes...