Autres PAP piloté par Arduino

  • Auteur de la discussion gaston83
  • Date de début
G

gaston83

Compagnon
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

Compagnon
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
 
V

vax

Modérateur
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.
 
J

JCS

Compagnon
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.
 
V

vax

Modérateur
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.
 
J

jpbbricole

Compagnon
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
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:
V

vax

Modérateur
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.
 
G

gaston83

Compagnon
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:
J

jpbbricole

Compagnon
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
 
G

gaston83

Compagnon
Bonjour à tous,
Bon, j'ai téléchargé la bibliothèque. Je farfouille un peu et je reviens...
GG
 
G

gaston83

Compagnon
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
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
 
G

gaston83

Compagnon
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
 
G

gaston83

Compagnon
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:
J

jpbbricole

Compagnon
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
 
G

gaston83

Compagnon
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:
G

gaston83

Compagnon
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

  • Vidéo0001[1].mp4
    4 Mo · Affichages: 85
Dernière édition:
J

jpbbricole

Compagnon
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?
 
G

gaston83

Compagnon
Je teste...

C'est pareil... toujours ce cafouillage.
 
G

gégé62

Compagnon
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.
 

Sujets similaires

V
Réponses
3
Affichages
923
vibram
V
F
Réponses
6
Affichages
25 593
fraiddy
F
G
Réponses
123
Affichages
19 010
gaston83
G
G
Réponses
0
Affichages
573
gaston83
G
Mcar
Réponses
65
Affichages
11 567
Mcar
zygo4619
Réponses
34
Affichages
35 391
zygo4619
zygo4619
shodan47
Réponses
7
Affichages
9 665
shodan47
shodan47
Moi33
Réponses
3
Affichages
47 955
speedjf37
S
U
Réponses
85
Affichages
7 095
Hubert86
H
V
Réponses
62
Affichages
5 193
vibram
V
M1M1HRC10
Réponses
7
Affichages
37 991
M1M1HRC10
M1M1HRC10
01power
Réponses
3
Affichages
13 742
01power
01power
Haut