Aide Aide programmation Arduino

J

JLMa

Apprenti
Le problème se passe quand le potentiomètre est en position max donc 5 Volts à l'entrée, j'avais cela souvent lors des tests avec l'ancienne librairie et vlan rebelote après plusieurs mois sans problèmes.
Bonsoir à tou.te.s
Je suppose que potentiomètre au max, tu as la vitesse maxi de ton stepper. Et si le problème était d'ordre mécanique...plusieurs mois d'utilisation ont peut-être entraînés une dérive/déréglage de la structure (au terme général) autour du moteur et ce dernier n'arriverait plus à atteindre sa vitesse maxi.
Ce n'est qu'une idée, cordialement Jean-Luc
 
S

stef1204

Compagnon
Bonsoir à tou.te.s
Je suppose que potentiomètre au max, tu as la vitesse maxi de ton stepper. Et si le problème était d'ordre mécanique...plusieurs mois d'utilisation ont peut-être entraînés une dérive/déréglage de la structure (au terme général) autour du moteur et ce dernier n'arriverait plus à atteindre sa vitesse maxi.
Ce n'est qu'une idée, cordialement Jean-Luc
Le potentiomètre au max me donne 10% de la vitesse max du stepper.
 
S

stef1204

Compagnon
Le 5V est bien issu de l'Arduino en direct ?
Normalement y'a pas de souci à mettre n'importe quel pin d'I/O directement au 5V de l'arduino mais sur le principe il vaut quand même mieux éviter les situations de court-circuit donc la 2,2k en amont du potar semble plus sécure.
Le 5V est bien issu de l'Arduino en direct!
Je vais mettre une résistance de 2.2k avec une capa, si le problème persiste un potentiomètre de 1K.
 
F

furynick

Compagnon
Je vois pas en quoi diminuer la valeur du potar aurait une quelconque influence, c'est juste un pont diviseur.
Plus sa valeur est faible plus il y a de courant qui passe au travers.

Mais c'est pas du tout mon domaine donc rien d'étonnant à ce que je ne saisisse pas la subtilité de la chose :wink:
 
S

stef1204

Compagnon
Je vois pas en quoi diminuer la valeur du potar aurait une quelconque influence, c'est juste un pont diviseur.
Plus sa valeur est faible plus il y a de courant qui passe au travers.

Mais c'est pas du tout mon domaine donc rien d'étonnant à ce que je ne saisisse pas la subtilité de la chose :wink:
Je suis d'accord que dans ce cas la valeur du pot à peu d'influence.
 
Dernière édition par un modérateur:
G

greg_elec

Compagnon
Oh que si ! c'est la différence entre la théorie et la pratique. avec des valeurs ohmiques élevées tu vas te chopper tous les parasites qui trainent
 
F

furynick

Compagnon
On est pas sur de l'analogique de précision non plus, le potar donnera des valeurs de 0 à 1023, les parasites vont faire varier la valeur de ±5 soit ~0,5%.
Vu que le potar fait varier la vitesse de 0 à 10% du maxi du moteur on est sur de l’imprécision de l'ordre de 0,05%.
Si c'est un stepper classique ça va difficilement aller plus vite que 1000tr/mn soit une imprécision de 0,5tr/mn ... on est dans l'ordre de grandeur du pet de mouche là quand même.
 
S

speedjf37

Compagnon
Bonjour,

Si tu transmets le code je peux tester !

Cordialement jf
 
J

JLMa

Apprenti
Le potentiomètre au max me donne 10% de la vitesse max du stepper.
Re
Oui, mais même si tu n'es qu'à 10% de la vitesse max du stepper avec un couple très diminué ** , peut-être que tu es au max de vitesse/couple de ton stepper+la mécanique qu'il doit emmener. Ce qui me fait penser à cela c'est que as dû passer par une librairie qui gère l'accel pour avoir un fonctionnement correct !
Un essai simple à faire : diminuer ta consigne de vitesse quand le potentiomètre est au max.

**( plus V augmente, plus C diminue, sans parler des demis/quarts et huitièmes de pas qui influent également sur le couple )
 
S

stef1204

Compagnon
Pour moi le fait de ne pas pouvoir mettre la vitesse a 0 (le 2 en rouge) est un bug, cela plante le programme.
int motorSpeed = map(sensorReading, 0, 1023, 2, 600);

C'est ma première application avec Arduino, j'utilise des PIC's en assembleur ou C.

Le code:

#include <AccelStepper.h>
#define dirPin 8 //dir-
#define stepPin 9 //pull-
#define motorInterfaceType 1
int SPR = 200;

const int buttonPin = 2;
const int buttonPin2 = 4;
int buttonState = 0;
int buttonState2 = 0;
AccelStepper stepper(motorInterfaceType, stepPin, dirPin);
void setup() {
pinMode(dirPin,OUTPUT);
pinMode(stepPin,OUTPUT);
//
stepper.setMaxSpeed(4800);
stepper.setAcceleration(4800);
#define DISSABLE 12
const int buttonPin = 2;
const int buttonPin2 = 4;

pinMode(buttonPin, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(DISSABLE,OUTPUT);
}

void loop() {

buttonState = digitalRead(buttonPin);
buttonState2 = digitalRead(buttonPin2);
stepper.runSpeed();

if (buttonState == true | (buttonState2 == true))
{
digitalWrite(DISSABLE,LOW);
}
else
{
digitalWrite(DISSABLE,HIGH);
}
int stepDirection;
if (buttonState == HIGH) {
int sensorReading = analogRead(A0);
int motorSpeed = map(sensorReading, 0, 1023, 2, 600);
stepper.setSpeed(motorSpeed);


}
else if (buttonState2 == HIGH) {
int sensorReading = analogRead(A0);
int motorSpeed = map(sensorReading, 0, 1023, 2, 600);
stepper.setSpeed(-motorSpeed);


}

}
 
D

Dudulle

Compagnon
On est pas sur de l'analogique de précision non plus, le potar donnera des valeurs de 0 à 1023, les parasites vont faire varier la valeur de ±5 soit ~0,5%.
Vu que le potar fait varier la vitesse de 0 à 10% du maxi du moteur on est sur de l’imprécision de l'ordre de 0,05%.
Si c'est un stepper classique ça va difficilement aller plus vite que 1000tr/mn soit une imprécision de 0,5tr/mn ... on est dans l'ordre de grandeur du pet de mouche là quand même.

Sans compter que le CAN des arduino est loin d'être linéaire
 
F

furynick

Compagnon
Y'a un truc qui me chagrine dans le code, tu vas modifier la vitesse du PàP des centaines voire des milliers de fois par seconde.
Tu vas aussi consommer un max de temps de calcul à lire la valeur du potar, autant de temps qui ne sera pas utilisé à générer les impulsions du moteur.
Il faudrait plutôt lire le potar à 5Hz et juste lire l'état des boutons.
Autre détail, il n'y a pas de debounce sur les boutons, sur les 15/20 premières millisecondes tu vas potentiellement démarrer et arrêter le moteur ce qui ne va pas forcément plaire au driver et/ou au moteur.
 
S

stef1204

Compagnon
Y'a un truc qui me chagrine dans le code, tu vas modifier la vitesse du PàP des centaines voire des milliers de fois par seconde.
Tu vas aussi consommer un max de temps de calcul à lire la valeur du potar, autant de temps qui ne sera pas utilisé à générer les impulsions du moteur.
Il faudrait plutôt lire le potar à 5Hz et juste lire l'état des boutons.
Autre détail, il n'y a pas de debounce sur les boutons, sur les 15/20 premières millisecondes tu vas potentiellement démarrer et arrêter le moteur ce qui ne va pas forcément plaire au driver et/ou au moteur.
J'y ai bien pensé au rebondissement de l'interrupteur mais pas d'effet anormal vérifié côté driver avec mon oscilloscope, je présume que la lenteur de la boucle solutionne le problème.

L'Arduino n'a pas grand chose à faire si ce n'est que de lire le potentiomètre et générer des impulsions. Il faudrait voir dans la librairie comment c'est réalisé.
 

Sujets similaires

wika58
Réponses
122
Affichages
20 116
Philippe85
Philippe85
N
Réponses
3
Affichages
1 307
jpbbricole
jpbbricole
lolo
Réponses
0
Affichages
770
lolo
T
Réponses
1
Affichages
675
Teddy55
T
D
Réponses
0
Affichages
487
dodochef
D
osiver
Réponses
14
Affichages
54 607
osiver
osiver
P
Réponses
0
Affichages
398
Ptitleud
P
D
Général langage MMBASIC
Réponses
14
Affichages
1 997
greg_elec
G
J
Réponses
12
Affichages
1 129
Robert
R
B
Réponses
4
Affichages
601
Fran
P
Réponses
33
Affichages
35 174
wika58
wika58
T
Réponses
2
Affichages
43 769
Tristan l'apprenti
T
Haut