Moteur courant continu

Bonsoir tout le monde

Tout d'abord je suis totalement novice ici, donc tout est bon à prendre ^^

J'ai actuellement une arduino Uno et un powershield (Ka03 de Velleman), dans le but de réaliser un pendule inversé mais je n'en suis pas encore à la. Pour l'instant je souhaiterai déjà faire fonctionner mon moteur

J'ai donc récupéré un petit moteur a courant continu d'une imprimante (RS 545PH les références). Cependant j'aurai besoin d'une puissance plus élevée que les 5V délivrée par la carte arduino. J'ai donc récupéré l'alimentation de mon imprimante (16V, 625mA). Je suis maintenant confronté à un problème : je ne comprend pas (malgré les heures de recherches...) comment alimenter mon moteur avec cette alimentation externe

Je précise que le moteur fonctionne, l'alimentation aussi (le moteur branché directement à l'alim tourne très bien). J'ai pour l'instant branché mon alimentation sur les bornes + et - de mon power shield, j'ai mi le petit cavalier juste à côté sur EXT, mais lorsque je branche mon moteur aux bornes normalement dédiées à ça. Il ne se passe rien, il ne tourne même pas. Probablement un problème d'affectation dans mon script, mais je ne sais vraiment pas comment faire

Voilà mon script (je l'ai récupéré ici il me semble et j'ai simplifié quelques trucs). Lorsque je branche mon moteur sur les pins 3 GND des sorties DIGITAL (via le power shield ^^), mon moteur tourne, mais avec les 5V et non les 16

const int 
PWM_A   = 3;
 
void setup() {
 // Open Serial communication
  Serial.begin(9600);
  pinMode(PWM_A, OUTPUT);
  Serial.println("Motor shield DC motor Test:\n");
}

void loop() {

// Set the outputs to run the motor forward

  analogWrite(PWM_A, 255);     // Set the speed of the motor, 255 is the maximum value

  delay(5000);                 // hold the motor at full speed for 4 seconds


// now stop the motor by inertia, the motor will stop slower than with the brake function
  analogWrite(PWM_A, 0);       // turn off power to the motor

  Serial.println("End of the motor shield test with DC motors. Thank you!");

  while(1);
}

Merci beaucoup de l'aide apportée et bonne soirée!

Regarde ici : http://eskimon.fr/285-arduino-601-le-moteur-courant-continu
Et je pense que tu aura les renseignements dont tu as besoin.

Rapel : dans le message de bienvenue il est recommandé de lire la totalité du tuto d'Eskimon.

Bonsoir !

Oui je suis déjà tombé plusieurs fois dessus. La partie théorique sur les moteurs a été légérement abordée en cours (je suis en deuxième année de prépa actuellement), j'ai donc lu essentiellement la partie concernant arduino

"La broche EnA sera reliée à une sortie de PWM (dans mon cas la broche 3) et les broches In1 et In2 seront reliées à n’importe quelles broches numériques (2 et 4 pour moi). Il ne nous reste plus qu’à nous occuper de l’alimentation. Tout d’abord, je mets un fil entre la masse du shield et celle de l’Arduino"

Si j'ai bien compris, cette partie ne concerne que les shield non officiels c'est cela ? Avec mon shield arduino, je n'ai normalement pas besoin de faire ces branchements, ils sont fait directement en "clipsant" le shield sur la carte c'est bien ça ?

Salut,

A tu la doc du shield moteur Ka03 de Velleman, car tu n'a pas le choix des affectations au niveaux des pins Arduino, généralement tu une relation entre les fonctions et les pins: genre In1 --> PIN XX, In2 --> Pin YYY, ect, c'est comme ça que cela se passe avec les shield moteurs, officiel ou pas.

D'aprés docs :

  • ENA : 3,5,6
  • ENB : 9,10,11
  • DIR A : 2,4,7
  • DIR B : 8,12,13

Cela correspond il à ton programme.

@+

A tu essayer le code arduino, qui se trouve sur le site Velleman ?.

@+

Bonsoir !

Alors oui le EnA 3 correspond a mon affectation "PWM_A = 3" il me semble. C'est une des sorties où il y a un signal "pwm"

DirA ne m'intèresse pas pour le moment, c'est simplement pour le sens. Je m'en occuperai plus tard ^^

Et EnB/DirB sont pour un second moteur, je n'en ai qu'un seul

@Hameau : Oui j'ai essayé celui qu'ils donnent en exemple ici : Downloads – Support – Velleman – Wholesaler and developer of electronics, il ne fonctionne pas non plus (d'ailleurs mon moteur fait un petit bruit, étrange ^^)

Et sur leur forum j'ai trouvé un problème similaire au mien avec un code plus détaillé que le mien mais qui revient au même http://forum.velleman.eu/viewtopic.php?f=42&t=16208

Salut,

Dans le programme tu doit utiliser DirA, car même si tu utilise qu'un sens, il faut dans tous les cas, activité cet PIN avec un etat logique 0 ou 1, sinon le moteur ne se mettra en marche.

Dans le programme tu doit utiliser , EnA, DirA, PWM_A, au minimum pour que le moteur puisse tourner.

@+

Je viens de voir ton programme, celui-ci est incomplet et le moteur ne peut pas se mettre en marche, regarde un exemple ci dessous :

http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.MATERIELArduinoShieldArduinoMotroShieldV3L298

D'accord en effet, je n'avais pas pris cela en compte. Une question, cette ligne

const int vitesseMotA=3; 
const int sensMotA=12;

signifie que j'attribue au pin 12 la commande de direction c'est bien cela ? Mais comment je branche mon moteur ? Le cable rouge sur la sortie 3, le cable noir sur la sortie GND ? Ou bien je branche mon moteur sur les sorties du power shield (https://www.velleman.eu/downloads/0/infosheets/datasheet_ka03_fr.pdf là ou il y a écrit Sortie A)

EDIT : A quoi sert la variable EnA du coup ? Comment la "brancher" au reste ?
Je reprécise que mon shield est directement "clipsé" sur l'arduino

Merci d'avance!

Voilà le code complet :

// --- Déclaration des constantes des broches E/S numériques ---

const int vitesseMotA=3; // Constante pour la broche 3
const int sensMotA=12; // Constante pour la broche 12
const int freinMotA=9; // Constante pour la broche 9


// ////////////////////////// 2. FONCTION SETUP = Code d'initialisation ////////////////////////// 
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup()   { // debut de la fonction setup()


Serial.begin(115200); 

// ------- Broches en sorties numériques -------  
 pinMode (vitesseMotA,OUTPUT); // Broche vitesseMotA configurée en sortie
 pinMode (freinMotA,OUTPUT); // Broche freinMotA configurée en sortie
 pinMode (sensMotA,OUTPUT); // Broche sensMotA configurée en sortie

// ------- Broches en entrées numériques -------  

// ------- Activation si besoin du rappel au + (pullup) des broches en entrées numériques -------  

// ------- Initialisation des variables utilisées -------  

// ------- Codes d'initialisation utile -------  
digitalWrite(vitesseMotA,LOW); // a l'arret
digitalWrite(sensMotA,LOW); 
digitalWrite(freinMotA,LOW); // frein off 

} // fin de la fonction setup()
// ********************************************************************************

////////////////////////////////// 3. FONCTION LOOP = Boucle sans fin = coeur du programme //////////////////
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop(){ // debut de la fonction loop()


//------ test initial du moteur A ---- 
//- sens 1
digitalWrite(sensMotA,LOW); // sens 1
digitalWrite(vitesseMotA, HIGH); // vitesse maximale
delay(2000); // 2 secondes
digitalWrite(vitesseMotA, LOW); // vitesse maximale

//- sens 2
digitalWrite(sensMotA,HIGH); // sens 2
digitalWrite(vitesseMotA, HIGH); // vitesse maximale
delay(2000); // 2 secondes
digitalWrite(vitesseMotA, LOW); // vitesse maximale

while(1); // stop loop

}

Le moteur se branche sur le bornier A, borne 1 : GND (câble noir) et borne 2 : VCC moteur (câble rouge), Alimentation du shield bornier PWR, Batterie + sur +, Batterie - sur -.

Suivant position du cavalier, la carte arduino est alimenté par le shield ou par USB ou prise noir, si alimenté par shied la tension maxi qui alimente celui-ci (batterie) ne peut pas dépasser 12V.

Que se passe t'il quand tu utilises le programme Ka03_sample_code qui se trouve sur le site welleman, sans modifier celui-ci. Dans leur code il ne font pas référence à EnA, c'est franchement étrange.

Pour avoir choisi ce shield, imposé ou autre.

Suivant position du cavalier, la carte arduino est alimenté par le shield ou par USB ou prise noir, si alimenté par shied la tension maxi qui alimente celui-ci (batterie) ne peut pas dépasser 12V

.

Ma tension d'entrée est de 16V. Le max autorisée sur le shield n'est pas de 55V comme indiqué sur la doc?

Si j'utilise le code "Ka03_sample_code" sans le modifier et que je fais les branchement que tu m'as dis, il ne se passe rien. Le cavalier est mis en "EXT", l'alimentation est bien branché sur le bornier + et - respectifs (y'a écrit PWR ^^) et j'ai testé le moteur sur les deux borniers moteurs A (bornes 1 et 2), et B (bornes 3 et 4) et il ne se passe rien. Le moteur ne tourne pas du tout

EDIT : Je précise que lorsque je tourne manuellement le moteur, la LED correspondante s'allume (vert dans un sens, rouge dans l'autre)

Je me suis mal exprimé concernant l'alimentation du shield et de la carte arduino, il y deux 2 cas :

1 cas : cavalier sur INT : dans ce cas, le shiel moteur alimente aussi la carte arduino, donc il n'y a plus qu'une souce d"alimentation pour les deux cartes, mais cette source ne doit pas dépasser 12 V.

2cas : cavalier sur Ext, il faut un source pour le shield, qui peut aller jusqu’à 55 V , et un source d'alim pour la carte arduino USB ou connecteur noir 12 V maxi.

En haut à droite de la carte il y 4 blocs de connecteurs avec 1 cavalier par bloc, peut tu donner la position des cavaliers, car cela impacte l'affectation des pins dans le programme.

Quand tu teste, la carte arduino est bien branché en USB, et l'alim 16 V sur le bornier PWR.

@+

D'accord merci pour les précisions. Dans mon cas je suis donc alimenté en externe par les 16V de mon alimentation + le cable USB (celui ci alimente la carte j'imagine, alors que les 16V alimentent les moteurs)

Ok pour les cavaliers. Donc celui de l'alim est bien sur EXT. Et ceux des pins sont sur 3, 2, 9 et 8 (respectivement pour pwmA, dirA, pwmB et dirB)

Il me semble donc que ca correspond aux affectations du programme

int pwm_a = 3;  //PWM control for motor outputs 1 and 2 
int pwm_b = 9;  //PWM control for motor outputs 3 and 4 
int dir_a = 2;  //direction control for motor outputs 1 and 2 
int dir_b = 8;  //direction control for motor outputs 3 and 4

La si cela ne fonctionne pas , c'est très étrange, de plus on ne trouve pas d'autre exemple que celui de velleman sur le Net, il doit manquer ?? quelques choses dans le code, car j'ai déjà mis en ouvre d'autre shield moteur pour arduino en version officiel ou autre sans soucis.

Oui, j'ai essayé une petite dizaine de codes... J'ai passé une semaine et demi de vacance la dessus et ca me prend la tête ^^

Tu n'aurai pas une autre idée ? Eventuellement au niveau du shield, des soudures mal faites ou quelque chose comme ca ?

Quelqu'un aurait une idée de mon soucis?

Je vais essayer de brancher un oscillo. Est ce que quelqu'un saurait me dire comment vérifier que les borniers moteurs sont bien reliés à l'alimentation ? Ou quoique ce soit pour avoir une idée d'où vient le problème ^^ ?

Merci d'avance!

C'était un problème de soudure...
Post donc résolu