Autres PAP piloté par Arduino

  • Auteur de la discussion gaston83
  • Date de début
gaston83
gaston83
Compagnon
17 Fev 2016
1 492
FR-71520
  • Auteur de la discussion
  • #1
Bonjour à tous,
Je voudrais piloter un moteur PAP avec un HY-DIV268.
Pourquoi Arduino ? J'ai récupéré ce programme

D'après mes (petites) connaissances en programmation, je vois que dans la première boucle du loop, la pin Enable est à 1 et Dir à 0 alors que la pin Pulse passe de l'état 1 à 0 toutes les 50 microsecondes.

Ma question:
Si je mets à 1 ENA et DIR à 0 et que je branche un générateur (signal carré) sur le PUL, devrais-je pouvoir faire varier la vitesse du moteur ?

GG
 
Dernière édition par un modérateur:
M
MCrevot
Ouvrier
1 Jan 2016
470
Bonjour,

Drole d'idée ! Le PUL est une sortie, tu vas au conflit ...

Tu peux déjà extraire les 2 premières lignes de chaque boucle, et les placer avant le for
Si tu veux faire varier la vitesse, il faut que tu fasses varier le second delay de chaque boucle : tu peux par exemple récupérer la position d'un potentiomètre sur une entrée et t'en servir pour faire varier le 50

Michel
 
vax
vax
Modérateur
5 Mar 2008
7 821
Guipavas (près de Brest)
Je pense que Gaston83 voulait mettre le générateur en entrée de son drive, pas sur la sortie de l'Arduino...

Pour le reste, d'accord avec Michel.
 
JCS
JCS
Compagnon
22 Juin 2007
2 556
Cher
Bonne année à tous,

Pour tester le neurone après le premier mojito de l'année, j'ai complété le sketch de Gaston 83 en mettant un potentiomètre relié à + et - et le point milieu à A0 :



Ainsi on fait varier la vitesse du PAP avec le potentiomètre.
Ou avec un convertisseur fréquence => tension on doit pouvoir faire varier la vitesse à la place du potentiomètre.

Je pense que JPB, notre spécialiste, va certainement faire mieux.

@+

JC.
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 492
FR-71520
  • Auteur de la discussion
  • #5
vax
vax
Modérateur
5 Mar 2008
7 821
Guipavas (près de Brest)
Je ne vois pas l'intérêt de répéter à chaque passage de boucle les ordres DIR et ENA...
Une fois avant la boucle on valide ENA et on définit DIR. Une fois la boucle terminée (si on le souhaite, cela dépend des applications) on dévalise ENA...
Merci de vos éclairements si une subtilité dans Arduino impose le contraire.
 
jpbbricole
jpbbricole
Compagnon
26 Mai 2016
2 248
Corsier-sur-Vevey (Vaud)
Bonsoir et bonne année à tous!

Je vois que les neurones sont déjà au top niveau.
Si je mets à 1 ENA et DIR à 0 et que je branche un générateur (signal carré) sur le PUL, devrais-je pouvoir faire varier la vitesse du moteur ?
Certainement, mais je ne peut pas certifier n'ayant pas ce type de matériel. Si tu nous dit quelle est l'application de ce montage on pourras mieux t'aider.

@vax +1, @MCrevot l'avait déjà signalé précédemment.
C'est plus du temps machine perdu inutilement qu'une erreur.
ça devrait ressembler à ça:
Tu remarquera que, pour la définition des pin DIR PUL et ENA, j'ai transformé le int en #define.
En effet, il n'est pas nécessaire de "consommer" des octets mémoires pour des valeurs qui ne changeront jamais en cours de fonctinnement.
Pour ce type d'application, je préfère y aller directement avec une bibliothèque, AccelStepper à téléchargée ici, consacrée aux MPAP et qui inclu tout les paramètres nécessaire, vitesse, accélération nécessaire à une utilisation optimale des MPAP.

Cordialement
jpbbricole
 
Dernière édition:
T
tronix
Compagnon
6 Mar 2012
1 478
Toulouse
Bonsoir,

mon commentaire à 2 sous : la consommation mémoire n'est plus un problème aujourd'hui, et il faut privilégier la lisibilité à l'économie de quelques octets ou quelques lignes de codes, sachant en plus que le compilateur va optimiser tout ça bien mieux qu'on pourrait le faire. En revanche, l'utilisation de boucles de delay est classique, surtout en Arduino, mais c'est une horreur. Le processeur est bloqué et ne peut rien faire d'autre. En gros, un seul signal peut être contrôlé précisément, tout le reste sera faux. Toutes les fonctions vont se perturber mutuellement. Il y a d'autres façons de faire bien plus efficaces, pas très compliquées une fois qu'on les a comprises, mais peut-être un peu longue à expliquer ici.
 
Dernière édition:
vax
vax
Modérateur
5 Mar 2008
7 821
Guipavas (près de Brest)
Bonsoir et bonne année à tous!

@vax +1, @MCrevot l'avait déjà signalé précédemment.
C'est plus du temps machine perdu inutilement qu'une erreur.

Pour ce type d'application, je préfère y aller directement avec une bibliothèque, AccelStepper à téléchargée ici, consacrée aux MPAP et qui inclu tout les paramètres nécessaire, vitesse, accélération nécessaire à une utilisation optimale des MPAP.

Cordialement
jpbbricole
Merci, je n'avais pas relu tout le post, loin de moi l'idée de prétendre que c'était une erreur.
Ne connaissant pas encore Arduino, je me laissais même le droit d'avoir tord ! :wink:

Je vais aller voir cette bibliothèque, elle a l'air parfaite vu tes éloges à son sujet. Est-ce du C exploitable avec des puces ARM autre que sur Arduino ?

@tronix : je suis d'accord avec toi, mais je suis un "vieux" qui a appris à économiser un octet même "juste" pour la forme !... C'est donc plus par nostalgie que par besoin tu as raison.
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 492
FR-71520
  • Auteur de la discussion
  • #10
Certainement, mais je ne peut pas certifier n'ayant pas ce type de matériel. Si tu nous dit quelle est l'application de ce montage on pourras mieux t'aider.
Bonjour,
J'ai bien noté toutes les infos.
C'est uniquement le "savoir" qui me pousse à faire des expérimentations, des tests, des essais... et je me doutais qu'il n'était pas nécessaire de tripoter chaque dois le DIR et le ENA.
Comme matériel: j'ai un driver HY-DIV268N et deux types de PAP. Un PM42L-048-MLK8 (bipolaire 48 pas) et deux KH56JM2 (unipolaire 200pas).
Bon ,c'est sûr que... j'ai une petite arrière petite idée... mais pour l'instant je voudrais mieux cerner le fonctionnement avec des manips.
Et justement à propos de cette bibliothèque. Je suis allé voir mais comment on fait ?
Quand je clique dessus, je lis le sketch... et après ?
GG
 
Dernière édition:
jpbbricole
jpbbricole
Compagnon
26 Mai 2016
2 248
Corsier-sur-Vevey (Vaud)
Salut gaston83

Tu as téléchargé le fichier AccelStepper-master.zip
Tu l'as décompressé et mis le répertoire AccelStepper-master dans le répertoire libraries du programme Arduino.
A partir de là, quand tu lances l'IDE Arduino, dans le menu
Fichier/Exemples/Accelstepper/
upload_2018-1-2_11-13-52.png

Tu as des exemples de l'utilisation de cette bibliothèque.
(n'utilises pas AFMotor_ConstantSpeed.pde c'est pas adapté à ton problème)

Un chose que tu dois faire pour que celà fonctionne pour ton installation, est de changer la ligne
AccelStepper stepper; // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5
en
#define PULpin 7 //define Pulse pin
#define DIRpin 6 //define Direction pin
AccelStepper stepper(1, DIRpin, PULpin);
// 1=commande d'un driver, expliqué ici (AccelStepper mystepper(1, pinStep, pinDirection);
Essaies Bounce en changeant les valeurs.
Regardes aussi le détail de cette bibliothèque ici.

Cordialement
jpbbricole
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 492
FR-71520
  • Auteur de la discussion
  • #15
Bonjour à tous,
Bon, j'ai téléchargé la bibliothèque. Je farfouille un peu et je reviens...
GG
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 492
FR-71520
  • Auteur de la discussion
  • #17
On va y aller par étape...
Je reviens sur ma première question :
Si je branche un générateur (signal carré) sur le PUL, devrais-je pouvoir faire varier la vitesse du moteur ?
He bien oui... ça marche. (c'était juste pour savoir... entre 300 Hz (en dessous ça décroche) et 800 Hz au delà ça va plus.. )

ça c'est fait.. on continue
 
S
speedjf37
Compagnon
15 Oct 2009
2 217
indre et loire
entre 300 Hz (en dessous ça décroche) et 800 Hz au delà ça va plus.. )
Bonsoir,

Cela doit descendre jusqu'a 0 Hz soit l'arret .
A très basse fréquence le moteur avance d'un cran à chaque créneau qui correspond au réglage du driver (1 PAS 1/2 1/4 1/8 1/16 etc).

JF
 
jpbbricole
jpbbricole
Compagnon
26 Mai 2016
2 248
Corsier-sur-Vevey (Vaud)
Salut gaston
ça c'est fait.. on continue
Super, tu as compris que c'est un domaine où il faut avancer ......... pas à pas:-D

Bonne continuation et bonne soirée.
jpbbricole
 
gégé62
gégé62
Compagnon
26 Fev 2013
2 908
Harnes (Pas de Calais)
entre 300 Hz (en dessous ça décroche)
oui, je n'y connais pas grand-chose mais c'est curieux que ça décroche en vitesse trop basse. Ce ne serait pas le générateur qui ne génère plus ?
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 492
FR-71520
  • Auteur de la discussion
  • #21
Ce ne serait pas le générateur qui ne génère plus ?
Bonjour gégé,
Non, mon générateur fonctionne bien. Testé avec mon oscillo. C'est bizarre. Mais bon, ce n'est pas grave ce n'était juste que pour tester, j'avais la flemme de ressortir l'arduino et tout et tout... maintenant qu'il est en route sur le bureau, j'ai éteinds le géné.
Georges
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 492
FR-71520
  • Auteur de la discussion
  • #22
Là, y a pas plus simple... 1 pas par seconde

maintenant, je veux régler la vitesse avec un pot sur A0 donc avec un réglage de 0 à 1024 (0-5Volts). Donc il faut que je fasse varier la valeur de stepper.setSpeed de 0 à 1024.
Aie, aie, aie...
 
Dernière édition par un modérateur:
jpbbricole
jpbbricole
Compagnon
26 Mai 2016
2 248
Corsier-sur-Vevey (Vaud)
Donc il faut que je fasse varier la valeur de stepper.setSpeed de 0 à 1024.
Pas forcément, il y a une fonction dans la programmation de l'Arduino que je trouve SUPER, c'est map()
Qui permet de translater tes valeurs du pot de 0 à 1023 en 1 à 150 par exemple:

int valPot = analogRead(A0);
int vitMpap = map(valPot, 0, 1023, 1, 150);
Tu peux aussi, si ton pot est câblé à l'envers changer le mapping ainsi
int vitMpap = map(valPot, 0, 1023, 150, 1);

et après...
stepper.setSpeed(vitMpap); //Réglage de la vitesse du moteur en pas par seconde

Cordialement
jpbbricole
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 492
FR-71520
  • Auteur de la discussion
  • #24
pitit à pitit... l'oiseau... bon bref.
voilà ce que j'ai fait..

çà fonctionne mais ce n'est pas trop linéaire... à certaines position du pot, le moteur ne sait plus quoi faire... j'avance, je recule... on prend le train...(non,non, je n'irais pas plus loin) :axe:
 
Dernière édition par un modérateur:
gaston83
gaston83
Compagnon
17 Fev 2016
1 492
FR-71520
  • Auteur de la discussion
  • #25
Pas forcément, il y a une fonction dans la programmation de l'Arduino que je trouve SUPER, c'est map()
Oui, j'ai testé, çà fonctionne ... mais j'ai toujours ce cafouillage à certaines positions du pot.
Une petite vidéo...
 
Fichiers joints
Dernière édition:
jpbbricole
jpbbricole
Compagnon
26 Mai 2016
2 248
Corsier-sur-Vevey (Vaud)
Si tu otes la ligne
stepper.moveTo(analog_in);
est-ce-que la vitesse du MPAP suit les moiuvements du pot et régulièrement?
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 492
FR-71520
  • Auteur de la discussion
  • #27
Je teste...

C'est pareil... toujours ce cafouillage.
 
gégé62
gégé62
Compagnon
26 Fev 2013
2 908
Harnes (Pas de Calais)
Non, mon générateur fonctionne bien. Testé avec mon oscillo.
oui bizarre donc....
je penserais à un phénomène de résonance, au dessus de 300 Hz le moteur "bénéficierait de son élan" pour passer au cran suivant à chaque impulsion, mais la fréquence de résonance du rotor (voisine de 300 Hz sans doute) ferait que cet effet devient en opposition de phase avec l'impulsion suivante....
Pour optimiser il faudrait peut-être utiliser des fractions de pas, les drivers permettent cela, avec des straps.

par contre si l'explication se tient, ça devrait fonctionner à des fréquences sensiblement inférieures à 300 Hz, jusque 0. Il y aurait "une bande interdite" dans la zonr des 300 Hz....à voir, je dis ça au pif.
 
Haut