bonsoir,
j'avoue que je tourne en rond...
j'ai un projet de cablecam qui à pour fonction de parcourir une distance mesurée par un encodeur avec comme objectif de la réaliser sur une durée fixe.
exemple : le moteur doit parcourir 12m sur 10sec et le PWM doit adapter le vitesse.
j'ai déjà réalisé le comptage des révolutions via attachInterrupt(digitalPinToInterrupt(ENCA),readEncoder,RISING);
volatile int counter ; // compteur
int Enc_NbRevolution = 600; // nb de révolution par tour
float time_execution = 10; // temps en sec
float distance_mm = 12000; // distance à parcourir en mm
float RoueCirc = 300.02; // circonférence de la roue motrice
le signal PWM sera de 0 à 255
Avez vous des idées, pistes à me donner
merci d'avance.
Merci je connais cette librairie.
actuellement je compte bien les révolution de l'encodeur dans la variable 'counter'
mon pb est de calculer la vitesse du moteur pour effectuer la distance sur un temps fixé
Je n'ai pas bien compris â quel niveau tu attend de l'aide de la part du forum!
As tu définit quel serait ton moteur?
Comment tu compte le piloter, c'est à dire avec quel module (pour ne pas dire "drivers"!)?
Comment est monté ton codeur sur ta roue ou moteur, avec ou sans réduction?
Escompte tu faire un asservissement de vitesse ou non?
As tu les réponse à tout cela?
Ou attend tu de nous que nous t'aidions à le faire?
Autre chose que je n'ai pas littéralement compris, c'est ce commentaire dans ton code: "nombre de révolutions par tour"
Un tour, c'est déja une révolution non?
Tu veux sans doute dire qu'une voie de l'encodeur fait 600 tops par tour?
OUI c'est un moteur ICAN 24V BLDC 103W 24V avec un réducteur 1:7,5
aces le driver DLD-120A
précision je le pilote bien via le PWM de 11 à 255 (10 <= Arrêt)
Comment est monté ton codeur sur ta roue ou moteur, avec ou sans réduction?
il est monté directement sur la roue
j'ai déjà fais des tests:
PWM 11 = roue à 14,6 tr/min pour 8753 révolutions (encodeur)
PWM 255 = roue à 520 tr/min pour 312407 révolutions
Tu veux sans doute dire qu'une voie de l'encodeur fait 600 tops par tour?
-Oui pour un tour d'encodeur = 600 révolutions
Escompte tu faire un asservissement de vitesse ou non?
OUI c'est justement mon problème...
je voudrais adapter cette vitesse (PWM) pour effectuer la distance shouaité sur un temps donnée.
Ne serais ce pas plutôt BLD-120 au lieu de DLD-120?
BLD-120 est bien un driver, pilotable par un PWM.
Je comprends mieux ton montage, le codeur que tu rajoute te sers juste pour mesurer la distance parcourue, à condition que la roue ne patine pas sur le câble, c'est cela?
Le moteur posséde lui même un codeur effet Hall, et le driver utilise ces signaux du moteur pour gérer entre autre la vitesse du moteur.
Donc en théorie il est capable de gérer lui même l'asservissement de vitesse du moteur (sans tenir compte du patinage, grande inconnue).
Les mesure que tu nous donne seraient encore plus parlantes avec plus de 2 points de mesures, au moins 5 stp.
J'ai lu que la fréquence du PWM devait se situer entre 1kHz et 10kHz, qu'elle est la fréquence du PWM Arduino que tu utilise?
Voici à quoi çà va ressembler...
je n'ai pas mis la seconde 'flasque' pour voir l'intérieur
la poulie bleu de l'encodeur et entrainer directement par le moteur que entraine aussi le roue motrice jaune.
Pour calculer PwmValue, j'utiliserai le système "empirique" d'essayer des valeurs. Je n'aurai pas la capacité de calculer cette valeur
A voir, tu as un UNO R4 et c'est long à compiler, ce que je te propose, c'est d'inclure à ton programme, la possibilité de faire varier PwmValue avec des commandes dans le moniteur, ainsi plus besoin de recharger chaque fois le programme.
Intéressé?
Merci pour ton aide mais je voudrais trouver une méthode de calcul.
ma première approche est de mettre mon 'cableCam' sur la position d'arrivée puis mettre 'counter = 0'
puis déplacer le 'cableCam' sur sa position de départ afin que le 'counter' revoie la valeur exemple : 23998 (encodeur)
dans ce cas on aurait : =(counter/Enc_NbRevolution)*RoueCirc = (23998/600)*300,02/1000 = 12000mm soit 12m à faire.
je voudrais maintenant faire les 12000 mm en 10sec.
et enfin calculer le PwmValue, et là je sèche MDR..
Je ne pense pas que tu puisses calculer ainsi, il n'y a pas de rapport direct entre une valeur PWM et les tours/minutes de ton moteur, il y a trop de paramètres "entre deux" pour ce faire. Suivant la charge sur le moteur, sa vitesse va varier même si le PWM est stable.
Je ne serais pas vexé si tu ne répond pas, mais pour avoir une idée de la réponse à ton systéme, à savoir Vitesse (tr/mn) = f (PWM), il serait intéressant de connaître plus de 2 points de mesures.
Tu nous indique seulement:
Ça fait 2 points seulement, entre deux, c'est une droite, une courbe ...?
Ça serait trés utile de le savoir je pense.
Notamment pour déterminer au moins empiriquement la valeur du PWM que tu souhaite.
EDIT, et je rajoute:
La fréquence par défaut de l'Arduino UNO est de 490 Hz pour les pins 3, 9, 10, 11 et de 980 Hz pour les pins 5, 6.
Ors le drivers demande un PWM de fréquence 1kHz à 10kHz, 980Hz, c'est presque, mais pas 1kHz...
Je ne serais pas vexé si tu ne répond pas, mais pour avoir une idée de la réponse à ton systéme, à savoir Vitesse (tr/mn) = f (PWM), il serait intéressant de connaître plus de 2 points de mesures.
je vais refaire quelques tests avant 12h
Ça fait 2 points seulement, entre deux, c'est une droite, une courbe ...?
en fait pour les premiers tests, j'ai juste mis une courroie entre le moteur et l'encodeur (rapport 1:1) pour mesurer ses tr/min...
Ça dépand de l'asservissement inclu dans le driver, ça sert à cela un asservissement, il y a tout ce qu'il faut pour cela (le moteur a son propre codeur, il envoie ses tops au driver), alors pourquoi ça ne marcherait pas?
Et ton PC, tu compte lui mettre un câble série de 12m de long pour lire le moniteur série, la carte Arduino étant embarquée avec le moteur.
C'est un abus de langage, le moniteur série n'est pas le seul moyen d'envoyer un message sur le port série d'un Arduino
je pense que @jpbbricole pensais par exemple envoyer des commandes via son téléphone intélligent en bluetooth.