Brushless ppm vers pwm

L’espace pour parler de tout ce qui concerne l’électronique embarquée
Gbdf1
Messages : 9
Inscription : 11 mai 2013 10:13

Brushless ppm vers pwm

Message par Gbdf1 »

Bonjours tous,

Je suis nouveau sur le forum je vous présente mon projet pour avoir un peu d'aide sur la programmation de l'arduino.
Il s'agit d'un ROV filoguide avec 6 brushless, 4 pour la propulsion et 2 pour descendre ou remonter.il ont tout les 6 leurs variateur.concernant le branchement des variateur,des moteurs,des batteries,et de l'arduino ça va mais pour la programmation c'est plus compliqué.je m'explique
Concernant les entrées de l'arduino j'utilise simplement 2 fils de la prise ecolage( Dsc) avec ma radiocommande graupner x-412 donc ma radio est relié en filaire à mon arduino.ce signal qui est en ppm doit être géré par l'arduino pour être décode en 6 signal.premier problème le code à réalise et très compliqué.deuxieme problème je me sens presque capable de programme les sorties pwm pour les moteurs j'ai trouver facilement des modèles mais il y a des scénario que je ne voit pas comment faire.je m'explique
Les moteurs sont positionner comme 4 roues d'une voiture si les 4 tourne dans le même sens la voiture avance,si les 2 de gauche avance et que les deux de droite recule la voiture toune sur elle meme donc j'imagine bien mon code dire lorsque le palonnier de la mains gauche et en haut la voiture avance quand il est à droite la voiture tourne sur place mais si mon palonnier et en haut et que j'ai 4 roues qui avance comment lui dire que des que mon palonnier varie un peu à droite les 2 moteurs de droite ne parte pas en marche arrière mais qu'il ralentisse un peu pour la voiture avance tout en tournant à droite,

J'espère que vous avez compris un peu ce que je veut dire

Moteur brushless robbe 5055/45
Variateur robbe 918 avec son programmateur
Arduino mega
Radiocommande graupner x-412
Batterie robbe 4s 4400ma

Si quelqu'un peu me donner un coup de main

Merci
Avatar de l’utilisateur
Geeks
Messages : 3593
Inscription : 03 juil. 2010 21:04
Localisation : Brive la Gaillarde (Correze 19)

Re: Brushless ppm vers pwm

Message par Geeks »

Et bien, tu parle d'une des problématique que je n'ai pas encore gérer dans mon propre système de télécommande.

Je prendrais le temps, demain, de te mettre le code exact que j'ai utiliser pour faire quelque-chose de très similaire.

Bon, venons-ens au souci principal. Tu récupère des trames venus de ta télécommande. Sur quel protocole est-ce basé ? (Un protocole étant le type de trame transmisse + synchonisation d'horloge. C'est important sans quoi, pas de synchronisation possible.
Ensuite, il serais bon de faire un algorithme. Comment gère tu tout ça ?

Exemple d'algo. que j'ai mis en oeuvre:

Code : Tout sélectionner

// Initialisation

//Debut de boucle
   //Recevoir les données de la radio
   //Traiter les signeaux puis sortir x et y
   //Transformer x et y en pwm
   //Sortir les infos sur les ports dédiés
   //Gérer le retour d'info
   //Vers écran / leds / voyants
   //Attendre 90ms -> temps nécessaire au refesh d'un cycle PWM compatible avec un servomoteur ou un variateur
//Boucler
Chaque ligne de commentaire correspond à une étape qui est composé de plusieurs codes assemblés entre eux. Si tu début, commence par te calquer la dessus. Tu verra c'est assez basique mais ça fonctionne. C'est la dessus que j'ai fait ceci: Engin piloter par UC + protocole maison.

Voila, déjà quelques pistes. Ensuite, en fonction des soucis et du code, on va voir ce qu'on peut faire :Up:
A défaut d'avoir la science infuse, j'infuse la science. - Racleur de fond depuis Pons 2014.
Sous-marin en état de repos sur cale : Minimog 01
Gbdf1
Messages : 9
Inscription : 11 mai 2013 10:13

Re: Brushless ppm vers pwm

Message par Gbdf1 »

Bonsoir,

Présenter comme cela ça parai limpide, déjà au moins je connais les différentes étape à résoudre,malheureusement je n'ai pas la compétence pour ça.
Les trames de la télécommande sont de types ppm 20 ms ;http://diydrones.com/profiles/blogs/705 ... Post:38393
Beaucoup de post en anglais mais rien en français c'est à croire qu'il maîtrise mieux que nous ou qu'il y à plus de passionner.

Je serai curieux de voir ton code décortiquer en différente étape comme tu as indiquer pour que j'essayer de comprendre comment ça fonctionne..ton code est avec arduino?

Merci
Avatar de l’utilisateur
Geeks
Messages : 3593
Inscription : 03 juil. 2010 21:04
Localisation : Brive la Gaillarde (Correze 19)

Re: Brushless ppm vers pwm

Message par Geeks »

Oh, c'est pas bien dur, je viens de te commenter ce que fait le code.

Au passage, je suggère une sécurité qui n'existais pas à l'origine et j'attire ton attention sur deux variables non déclarés. ;)

Code : Tout sélectionner

//Ici on lance l'initialisation
void setup() {
	Serial.begin(57600); //Liaison de type série à 57600 bauds
	pinMode(3, INPUT); //La pin 3 sera en mode input (entrée) donc elle ne pourra pas fournir de signal. Seulement en recevoir
}

//Ici on commance la boucle
void loop() {

	int compteurAttenteFrame = 1;	//Initialisation d'un compteur d'attente de frame de type integer
	
	//Attente de la première frame
	while(pulseIn(3, LOW) < 5000) {
		//Ne jamais laisser un while vide. Donc ici ajoute toi un compteur tel que
		compteurAttenteFrame++;	//Ici on ajoute "1" à chaque passage
		
		//Sécurisation au cas ou aucune framme ne viendrais
		//Si il se passe plus de 10 passages
		if(compteurAttenteFrame >= 10) {
			break; //Sortir de la boucle.
		}
		
		//Ici c'est qu'une idée de ce qu'il faudrais faire mais ça te donne une piste. Franchement, a la place du break, je mettrait un voyant de type LED. Du moins pour indiquer le défaut
	} 
	
	//Durant la boucle on prends la position de la voie
	//Gaffe, tu l'a pas d'initialisation de channumber. Je pense qu'un int avec le nombre de voie devrais être mis en haut.
	for(int x=0; x<=channumber-1; x++) {
		//Stock dans un tableau, toujours non déclarer, les voies.
		//Tel que value[0] = 10, value[1] = 100, ..., value[x] = val de la voie x...
		value[x]=pulseIn(3, LOW);
	}
	
	//Ici on fait l'inverse de la précédente fonction. On traite les données issue du tableau en des sorties donnés.
	for(int x=0; x<=channumber-1; x++) {
		//Ecrire sur le port série la valeur du tableau correspondante
		Serial.print(value[x]); //Print the value
		
		//Espace
		Serial.print(" ");
		
		//Valeur contenu dans le tableau
		value[x]=0; //Clear the value afeter is printed
	}
	
	//Saute une ligne
	Serial.println("");
}
J'ai pris soin de laisser un bug. Et oui faut cherché un peu ! Je te dirais ou c'est après.

Vas'y à petit pas. D'abord l’initialisation et un loop vide. Ensuite le premier groupe de fonction. Relève ce qui se passe.

N'hésite pas à te faire un check point du style : Serial.println("Ok"); ou Serial.println(compteurAttenteFrame);.

Attention aux oublies de fin de ligne ";" et aux caractères spéciaux.

Préfère une convention de nommage de variable tel que l'on puisse le comprendre tel que cmptSecurAtemptSignal (compteur de sécurité pendant l'attente d'un signal valide). Et voila tu sait désormais programmé.

Hein ? :o Quoi ? :shock: J'en voie aux fond de la classe qui dorment :evil: Attendez que je note ça dans vos cahiers de correspondance :ugeek:
Bon ça ira pour cette fois :mrgreen:
A défaut d'avoir la science infuse, j'infuse la science. - Racleur de fond depuis Pons 2014.
Sous-marin en état de repos sur cale : Minimog 01
Avatar de l’utilisateur
coaxial
Messages : 3673
Inscription : 23 janv. 2010 19:35
Localisation : saint orens 31

Re: Brushless ppm vers pwm

Message par coaxial »

:dodo: la j'ai raté un truc pendant ma sieste :siffle:
Moins je réfléchis plus fort et plus j'agis moins vite
Les bons crus font les bonnes cuites => Pierre Dac .
.... la simplicité est-ce bien la plus simple solution ..........?
La femme est l'avenir de l'homme .
Avatar de l’utilisateur
Patjabix
Modérateur
Messages : 4979
Inscription : 06 janv. 2010 00:13
Localisation : Chanas (Isère)

Re: Brushless ppm vers pwm

Message par Patjabix »

J'ai trouvé le bug !!!

:excited:


C'est le machin écrit en vert !!


:frust:



:gne:




:labas:
A+
Pat, membre de la guilde des racleurs de fond
Image Image
Gbdf1
Messages : 9
Inscription : 11 mai 2013 10:13

Re: Brushless ppm vers pwm

Message par Gbdf1 »

Salut

C'est pour l'instant trop avancé comme code pour moi, mais j'essaye de le déchiffrer avec la référence arduino.
J'ai beaucoup de mal avec les point virgule les parenthèse les accolade et les lettre de À à Z.tout le code quoi! Lol

Mais je ne désespère pas j'essaye de comprendre

À tout à l'heure
Avatar de l’utilisateur
Geeks
Messages : 3593
Inscription : 03 juil. 2010 21:04
Localisation : Brive la Gaillarde (Correze 19)

Re: Brushless ppm vers pwm

Message par Geeks »

Oh oh,

Panique pas. Pour les accolades, comme pour les parenthèses si tu en ouvre une il faudra la fermer ensuite.

Le point virgule c'est le retour chario au niveau du compilateur. C'est comme dans cet exemple de notre français.
Si je fais une première phraseJe passe maintenant à la seconde mais j'ai pas mis de point pour sauter la ligne
Comme tu voie mes deux plases sont illisible, il manque la ponctuation. Du coup le point virgule fini ta ligne d'instruction et indique au compilateur que ce qui va suivre est différent de la précédente.

Faut pas avoir peur avec le code. Et les commentaires, écrit déjà une initialisât ion et un l'opposition vide. Tu aura la base du code nécessaire pour toute programmation Arduino. Lopp() étant déjà une Méthode ( une fonction en somme).

Hésite pas si t'a des questions sur une des portions du code.
A défaut d'avoir la science infuse, j'infuse la science. - Racleur de fond depuis Pons 2014.
Sous-marin en état de repos sur cale : Minimog 01
Avatar de l’utilisateur
Geeks
Messages : 3593
Inscription : 03 juil. 2010 21:04
Localisation : Brive la Gaillarde (Correze 19)

Re: Brushless ppm vers pwm

Message par Geeks »

Bonjour,

Oops, je crois que j'ai du te décourager :oops:

Bon, essaie juste des bouts de code. Un blink qui est fourni par défaut avec l'EDI Arduino. Déjà, quand tu aura fais clignoter une led, tu comprendra mieux la suite. Je pensait un peu trop vite que tu avait un bon niveau. Bref, t'inquiète pas, on est là aussi pour en discuter.

Ah tien, j'y pense. A tu été voir le site Arduino justement ?
Tu y trouvera des infos et aussi un forum actif sur la partie code. Mais, je ne dis pas ça pour que tu parte. Juste pour t'en informé.

Voila, Oniff, lui il a insister, il a fait évoluer le concept, il a fini par faire un bug et a deux ça a été corrigé. Résultat, son ROV fonctionne :Up:

En codage, il faut toujours insister et y aller par petit pas. J'en ai encore fais les expériences ces jours-ci. Je connaissait pas du tout jQuery (une forme de langage basé sur javascript, lui même étant un langage que j'évite au maximum dans mes pages web). A force de bout de code, de coup de google, d'essais, de conversations sur les forum, je suis arrivé à faire ce que je voulais. La prochaine étape, sera peut-être de travaillé de nouveaux concepts. :Up:

Voila, indique nous ce qui cloche, ce que tu a fait, les erreurs qui te sont retourné à l'écran (sous forme d'image ou de texte). Bref, n'hésite pas. On aura toujours une petite piste à le donner.
A défaut d'avoir la science infuse, j'infuse la science. - Racleur de fond depuis Pons 2014.
Sous-marin en état de repos sur cale : Minimog 01
Gbdf1
Messages : 9
Inscription : 11 mai 2013 10:13

Re: Brushless ppm vers pwm

Message par Gbdf1 »

salut geek,

non tu ne m'a pas decourager il en faut un peu plus lol

j'ai rencontrer quelqu'un sur marseille que mon projet interresse et il va m'aider pour le code car il maitrise ca tres bien il a fait quelque tuto sur l'arduino sur le net !
ca m'empeche pas de continue a conprendre le code c'est necessaire pour rentrer dans la matrice :Up:
j'ai recuperé des bout de code que j'ai reussi a comprendre car tres detailer et explicite, ya plus qu'a joué avec tous ca.

vous inquité pas je reste sur le forum pour poster mes avancé ca interressera surement quelqu'un qui un jour fera les meme demarche que moi.

Code : Tout sélectionner

#include <Servo.h> // Pour contrôler le moteur on utilise la librairie servo.

Servo mServo;  // Déclaration de la variable du moteur (semblable à celle d'un servo).

int inPotPin = 1; // Analog input pin #1 reads pot value (ici l'auteur du code emploie un potentiomètre pour réguler le régime de son brushless)
int outPinPPM = 11; // PPM output pin #11 (sortie prochainement attachée au moteur).

int throttlePulse = 1500; // Valeur de la largeur des impulsions, 1500 = 0%

int pulseDelay = 300; // Délais entre chaque impulsion (cette valeur varie-t-elle selon les moteurs/ESC ?)
int pulseMin = 700; // Largeur d'impuslion minimale, 700 = -100%
int pulseMax = 2300; // Largeur d'impulsion maximale, 2300 = +100%

void setup()
{
  mServo.attach(outPinPPM, pulseMin, pulseMax); // Attache le moteur à outPinPPM (sortie 11), et déclare la fourchette de largeur d'impulsion.
  mServo.writeMicroseconds(throttlePulse);  // Initialise le moteur en régime neutre (0%) pour que la sécurité embarquée dans l'ESC ne refuse pas le démarrage du moteur.

}

void loop()
{
  throttlePulse = map(analogRead(inPotPin), 0, 1023, pulseMin, pulseMax); // Etalonne la valeur sortante du pot pour correspondre à la fourchette de largeur d'impulsion.
  mServo.writeMicroseconds(throttlePulse); // Envoie la valeur de largeur d'impulsion voulue à l'ESC pour obtenir la vitesse moteur souhaitée.
  delayMicroseconds(pulseDelay); // Delais entre cette impulsion et la suivante.
}

a + tard
Répondre