Code Arduino DUE

pour nos membres français - Notez le traducteur de google en haut à droite

Re: Code Arduino DUE

Postby Tfou57 » Sun 19. Apr 2015, 22:04

Salut,

Pour ton code , :shock: tu es parti de celui de Haikao ou d'une des 3 versions de Sirnoname ?

Le code que j'essaie en vain pour l'instant de d'adapter est un de tes codes datant de juillet dernier, le X-PID SSP2.3
Le code de l'Arduino Due est reconnu par le plugin X-Pid de Sirnoname .
:o Dur ! .... Dur ! le code Arduino quand on a pas l'habitude de programmer ! , mais j'arriverais bien à force ! :oops:

Pour l'instant je me casse la tête pour adapter le code Arduino Due maintenant reconnu par X-Pid afin qu'il délivre pour chaque moteur :
- 1 tension PWM ( 0 à 3,3V) pour la commande de vitesse
- 2 tensions digitales ( 0V ou 3,3V) pour le sens de rotation
Pour chacun des moteurs , je cherche à sortir ces 3 signaux .

:?: D'après ta connaissance du plugin X-Pid de Sirnoname quelle est la résolution maximum ( nb de bits ) des inputs analogiques et des sorties PWM ?
( L'Arduino Due pouvant gérer ces sorties en 12bits et voir en 16 bits )

Merci pour tous les tutoriaux et les codes que tu nous communiques ! :P
User avatar
Tfou57
X-Sim Supporter
 
Posts: 43
Joined: Tue 20. Mar 2012, 21:59
Location: France (57100 Thionville)
Has thanked: 0 time
Been thanked: 0 time

Re: Code Arduino DUE

Postby Wanegain » Mon 20. Apr 2015, 13:12

Salut,

Je suis parti du premier code de Sirnoname car il n'y en avait qu'un au début que j'ai adapté pour la Sabertooth : celui où dans le code il fallait choisir soit la Motomonster soit un Hbridge chinois.

Mon code est-il fonctionnel avec un Due ?

Par contre mes codes sont prévus pour les Sabertooth, pas pour des cartes que tu utilises... Le mieux serait peut être de repartir d'un code de sirnoname qui est déjà prévu pour ce genre de carte.

Sortir des signaux, ce n'est pas très compliqué, il faut que tu modifies la fonction Set pwm.

Le plugin de sirnoname envoie les infos en 16bits mais converti en 10bits pour que ça corresponde aux valeurs relevées par les potentiomètres.

Par contre les entrées sorties, sont définies par l'Arduino pas par le plugin... Par défaut les entrées analogiques, c'est 10 bits mais je crois qu'il existe une manip pour le faire sur 16.
User avatar
Wanegain
 
Posts: 55
Images: 1
Joined: Mon 19. Nov 2012, 17:55
Has thanked: 1 time
Been thanked: 0 time

Re: Code Arduino DUE

Postby Tfou57 » Mon 20. Apr 2015, 14:57

Salut,

A ta question: “Mon code est-il fonctionnel avec un Due ?”
:idea: Il était directement devenu fonctionnel dès que j’avais remplacé ligne par ligne la gestion de l’EEPROM par la FLASH
et en installant DueFlashStorage.h>
Gestion de la mémoire FLASH comme une EEPROM ===> https://github.com/sebnil/DueFlashStorage ---><DueFlashStorage.h>

A ta réponse: “Le plugin de sirnoname envoie les infos en 16bits mais converti en 10bits pour que ça corresponde aux valeurs relevées par les
potentiomètres.”
:?: Où Sirnoname converti les infos feedback en 10 bits ? (afin que j’annule ces lignes !)
:?: Comment reconnait-on dans le code si 8 , 10 ,12 ou 16 bits ?

A ta réponse: “Par contre les entrées sorties, sont définies par l'Arduino pas par le plugin...”
:!: X-Pid declare donc pas la definition de ces données

:?: Les traitements des signaux Target et Cibles sont-ils en 10bits également ? Peut-on sans risque les passer en 12 ou 16 bits ?

:roll: Un autre point qui me chagrine, ce sont ces lignes dans ton code”Sabertooh” et qui fait partie de la fonction void ParseCommand()
analogWrite(Pin_PWM_Moteur1,0); // 'X' 207 0 0 C = Désactiver la puissance sur le moteur 1
analogWrite(Pin_PWM_Moteur2,0); // 'X' 208 0 0 C = Désactiver la puissance sur le moteur 2
ST.stop();
disable = 1; // disabled = 1 ==> Puissance coupée sur les moteurs à l'arrêt ==> Arrêt

analogWrite(Pin_PWM_Moteur1,127); // 'X' 209 0 0 C = Activer la puissance sur le moteur 1
analogWrite(Pin_PWM_Moteur2,127); // 'X' 210 0 0 C = Activer la puissance sur le moteur 2
ST.motor(1, 16);
ST.motor(2, 16);
disable = 0; // disabled = 0 ==> Moteurs alimentés en puissance

:?: Pour mon utilisation, dois je ? : :oops:
- supprimer les lignes avec ST ….
- Mettre la valeur maxi (100% PWM)
analogWrite(Pin_PWM_Moteur1,255); // 'X' 209 0 0 C = Activer la puissance sur le moteur 1
analogWrite(Pin_PWM_Moteur2,255); // 'X' 210 0 0 C = Activer la puissance sur le moteur 2

8-) :D Merci de ton aide , c’est vraiement sympa de ta part ! :mrgreen:
Last edited by Tfou57 on Mon 20. Apr 2015, 23:11, edited 2 times in total.
User avatar
Tfou57
X-Sim Supporter
 
Posts: 43
Joined: Tue 20. Mar 2012, 21:59
Location: France (57100 Thionville)
Has thanked: 0 time
Been thanked: 0 time

Re: Code Arduino DUE

Postby Wanegain » Mon 20. Apr 2015, 16:47

Oula...

Je vais essayer de reprendre point par point :mrgreen:

Exact je me rappelle le coup de la Flash par rapport à l'EEPRom :idea:

Pour le 16 bits, c'est le format des données que l'on reçoit. Tu as une communication série entre l'Arduino et le Soft et tu as normalement choisi des données de 8 bits (format standard, donc ne touche pas à ça). Pour avoir 16 bits, c'est que tu as divisé tes données en 2 octets, tu peux comprendre ça dans le format des trames définis par le plugin de sirnoname : X 1 HL checksum, le HL ce sont les deux octets de tes données (ici pour le moteur 1). Il a juste converti les données 16 bits en 10 bits (donc tu as des bits qui seront toujours à 0 dans la partie H) dans le plugin, pas dans l'Arduino. Tu n'as rien à toucher là, c'est son format de données. Et puis c'est calculé aussi en fonction des valeurs min/max de tes potentiomètres...

Les Arduinos par défaut lisent les valeurs analogiques sur 10 bits (0 à 1023), si toi tu les lis sur 12bits, alors convertit les pour en avoir 10 (division par 4). Car si tu as une des deux valeurs en 10 bits, ça ne sert à rien de la passer en 12, il vaut mieux que tu descendes l'autre à 10. Tu ne le vois pas dans le code ça par contre, il faut juste le savoir... C'est là que je te dis que c'est définis par les Arduino et non par le plugin.

Il faut comprendre que le plugin a comme intérêt que tu peux paramétrer à la volée tes potentiomètres, ton pid et quelques autres choses (visualisation de la courbe, puissance des pwn, etc...). Ce qui se résume par ton Arduino communique avec ton soft, alors que tu peux très bien utiliser ton Arduino SANS passer par le plugin, dans ce cas là, ça fonctionnera tout aussi bien mais ça ne communiquera que dans un sens (ce qui est le cas si tu passes par USO).

Si toi tu n'utilises pas une Sabertooth, alors toutes les lignes avec ST tu peux les supprimer.
Il faut comprendre que les fonctions ST.motor(1, x) va dire au moteur 1 de tourner à la vitesse x (-127 à 127). Donc toi tu dois remplacer ça par tes fonctions analogwrite et digitalwrite pour le sens de rotation. Encore une fois, je te conseille de repartir sur un code de sirnoname qui sera propre.

Donc par exemple, quand je mets les moteurs en action à la valeur 16, ça correspond à 1/8 de la puissance mais ça ne sert pas à grand chose il me semble.

Surtout qu'avec les dernières versions de mes codes, normalement j'ai bien nettoyé ces fonctions que je n'utilise pas !
User avatar
Wanegain
 
Posts: 55
Images: 1
Joined: Mon 19. Nov 2012, 17:55
Has thanked: 1 time
Been thanked: 0 time

Re: Code Arduino DUE

Postby Tfou57 » Mon 20. Apr 2015, 22:57

:? :o Oula …Oula comme tu dis … :shock:

:mrgreen: Merci pour toutes les précieuses informations que je glane grâce à toi.
Je vais mettre un peu de temps à les digérer ! ... :D
:mrgreen: Chapeau pour tes connaissances et la vulgarisation de tes explications , tu as appris sur le tas ou as-tu appris la programmation dans ton cursus scolaire ? :geek:

Tu me conseilles de repartir d’un des codes source de Sirnoname.
Sirnoname, dans 2 de ces codes, utilise des subtilités supplémentaires que je ne domine pas du tout
- Dans « X-PID-Arduino-PID-motor-control-master » et « X-PID-Arduino-PID-motor-control-Moto-Monster-Version » il parle de diviseur ( switch(divisor) )
- Dans « X-PID-Arduino-PID-motor-control-Moto-Monster-Version » en plus il manipule des numéro de ports (Atmel chip port number for direct port manipulation)

Ta version XPID_SSPv2_30 et même la XPID_SSPv2_31 (dernière version dont je possède) semble avoir les mêmes difficultés que la « X-PID-Arduino-PID-motor-control-Sabertooth-2x60-Edition » version la plus simple de Sirnoname
:?: A quoi sert la Définition pour la configuration et le nettoyage des bits des registres (« defines for setting and clearing register bits ») ?
C’est d'ailleurs une partie commune aux 3 versions de Sirnoname et à ta dernière version XPID_SSPv2_31

:oops: Ne comprenant cette partie, j’ai effacé cette partie du code que j’essaie d’adapter.
:P Apprenant la programmation sur le tas, je joue à l’apprenti sorcier,si je ne comprends vraiment pas , j’efface et j’observe les conséquences…. ! :roll:

:?: Penses-tu qu'une erreur dans le FASTADC puisse créer un plantage définitivement la carte Arduino Due ? ( reprogrammation impossible ) ?
J’avais lu , il y a plusieurs mois un article mettant en garde sur les bidouillages à ce niveau !

:?: Sans FASTADC, quelle est l’influence de cette fréquence PWM à 490Hz par rapport à un taux de rafraichissement élevé du PID avec une Arduino Due à 84 Mhz?

:?: Penses-tu que dans mon application (PWM 490HZ--->Circuit ampli 0 à 10V ---> Commande de l'électronique des variateurs de fréquences triphasé ) , je puisse rencontrer un PWM fréquences sont audibles ?

Dans un post précédent tu parlais à propos de PW% à 490Hz de " si tu as un résonateur sur le chemin et tu peux te retrouver avec des sifflements..." .
:?: Quels sont les résonateurs possibles ?
User avatar
Tfou57
X-Sim Supporter
 
Posts: 43
Joined: Tue 20. Mar 2012, 21:59
Location: France (57100 Thionville)
Has thanked: 0 time
Been thanked: 0 time

Re: Code Arduino DUE

Postby Wanegain » Tue 21. Apr 2015, 10:52

Salut !

tu inverses 2 choses : le FASTADC est un "hack" de l'Arduino qui permet de lire les valeurs analogiques beaucoup plus rapidement pas d'écrire (cas d'une PWM).
le diviseur sert pour la fréquence d'écriture en PWM car par défaut on est limité à 490Hz ce qui génère du bruit audible et donc pas terrible... Avec un autre hack il permet de monter ces fréquences au-delà de 20kHz et donc inaudible.

Pour le port en fait tu as un regroupement de 8 E/S qui va former un octet (je suppose que c'est ça ce dont tu parles). Il peut donc lire/écrire instantanément toutes ces valeurs et c'est ce dont il se sert.

Quelle est la carte que tu utilises ? Motomonster ou un H-Bridge ?

Tu sais le plus simple aussi je pense (j'en suis même convaincu), c'est que tu achètes un Arduino UNO. Ca coute environ 25€ et tu auras beaucoup moins de problèmes de portabilité...
User avatar
Wanegain
 
Posts: 55
Images: 1
Joined: Mon 19. Nov 2012, 17:55
Has thanked: 1 time
Been thanked: 0 time

Re: Code Arduino DUE

Postby Tfou57 » Tue 21. Apr 2015, 14:31

Salut
“le FASTADC est un "hack" de l'Arduino qui permet de lire les valeurs analogiques beaucoup plus rapidement”
Donc avec une carte Arduino Due à 84 Mhz , le FASTADC est inutile. C’est une bonne nouvelle !!! Un truc de moins à adapter ! :)
:oops: Il est vrai que je confondait le FASTADC et le Hack permettant de monter les fréquences PWM à 20kHz

:?: Penses-tu qu'une erreur dans le Hack permettant de monter les fréquences PWM à 20kHz puisse créer un plantage définitivement la carte Arduino Due ? ( reprogrammation impossible ) ?
J’avais lu , il y a plusieurs mois un article mettant en garde sur les bidouillages à ce niveau !
Oupss… :oops: C’était bien un article sur l’augmentation de la fréquence du PWM et pas ce fameux FASTADC que je cofondait.

:arrow: “Quelle est la carte que tu utilises ? Motomonster ou un H-Bridge ?” : Ni l’une , ni l’autre !
Ce n’est pas des moteurs DC que je cherche commander mais des moteurs AC
Je cherche à terme à commander via l'Arduino Due -> 4 variateurs de fréquences 220v Tri -> 4 motoréducteurs 220v alternatif triphasés (2 motoréducteurs de 550W tri et 2 motoréducteurs de 180W tri)
Je m'intéresse principalement aux simulateurs d'avion.
Je souhaitais éviter tous les effets combinés sur le même axe. Je ne comprends pas on peu réellement ressenti un effet d'accélération sur un axe sans perte en ressenti au niveau de la position de cet axe
Mon projet étant un genre de 2 double DOF : une plate forme 2 DOF commandée par les informations de position et sous cette plateforme mobile, un second 2 DOF sous le siège uniquement et commandé avec les informations d’accélérations ( un peu comme un Frex)

:arrow: Pour l’instant , la seule interface que je connais et que je peux acheter tout faite est l’interface 6 DOF de Thanos et elle travaille en mode série.
Pour l’instant j’ai Vicpopo, que je salut d’ailleurs, qui m’a proposé comme solution un carte « Adapt » ( origine probable Thanos)
“Adapt.zip” http://www.x-sim.de/forum/download/file.php?id=2147 : Le fichier se lit avec le logiciel http://b.urbani.free.fr/pagetci/tci.htm
« Schéma du câblage sur une carte Thanos AMC1.6  Variateurs http://www.x-sim.de/forum/download/file.php?id=2146
Thanos sur sa nouvelle carte 6 DOF semble avoir repris un peu la philosophie de cette carte « Adapt » mais l'étage supplémentaire de puissance avec les transistors de sortie.
Thanos a dû apercevoir que ces transistors sont inutiles vis-à-vis à l'intensité requise pour commander les variateurs de fréquence.

:idea: Je pense donc, une fois le code opérationnel via un débugage par le moniteur série de l'interface Arduino, tenter la réalisation d'une petite interface reliée à l’Arduino Due en parallèle ( 13 fils ) et composé de principalement 2CI LM358 ou 1 CI LM324N et 1 CI ULN2803 + condensateurs et résistances

:o Acheter une carte Arduino Uno serait un échec pour moi, j’ai le temps devant moi pour utiliser le Due :lol:
J’ai d’ailleurs plusieurs cartes de ce type que j’avais acquis à un prix inférieur à une Arduino Uno.
Bref , je resterais sur la Due , le code fonctionnera bien un jour … ! :lol: :D
User avatar
Tfou57
X-Sim Supporter
 
Posts: 43
Joined: Tue 20. Mar 2012, 21:59
Location: France (57100 Thionville)
Has thanked: 0 time
Been thanked: 0 time

Re: Code Arduino DUE

Postby Wanegain » Tue 21. Apr 2015, 14:54

Ok :oops:

Bon alors pour le FASTADC je ne connais pas les caractéristiques de la Due, mais c'est clair que tu peux le désactiver sans soucis (là n'est pas la question je sais).

Pour le hack des vitesses ultrasoniques des PWM oui ça peut planter ton Due car on joue avec les vitesses des timers et il est fort probable que ça n'ai pas touché les bons timers et donc tu pourrais perdre toute la synchronisation :? Mais je ne suis pas assez expert là-dedans pour être sûr de ça :oops:

Ok pour les cartes mais le principe semble être le même que le H-Bridge : 2 bit de direction et 1 pwm par moteur.

Pour les effets combinés je comprends, surtout en aviation c'est différent qu'en voiture mais sur un simulateur auto je peux t'assurer que c'est un réel plus (moi même sur un 2 dof frex je combine 5 effets :mrgreen: ).
Je n'ai aucune expérience avec la carte de Thanos, mais effectivement tu peux demander à Vicpopo, riton ou vulbas qui sont assez familiers avec elle. Mais je ne comprends pas pourquoi tu veux la lier avec l'Arduino sachant que ces 2 cartes font exactement la même chose ?
User avatar
Wanegain
 
Posts: 55
Images: 1
Joined: Mon 19. Nov 2012, 17:55
Has thanked: 1 time
Been thanked: 0 time

Re: Code Arduino DUE

Postby Tfou57 » Tue 21. Apr 2015, 17:25

Salut :D

A propos de la carte d’interface , tu me dis:
“ je ne comprends pas pourquoi tu veux la lier avec l'Arduino sachant que ces 2 cartes font exactement la même chose ?”
Elles ne font pas du tout la même chose que l' Arduino
L'utilisation de deux cartes Adapt ou d'une carte d’extension 6 DOF de Thanos auraient comme but uniquement d'adapter les signaux de l'Arduino en tension et en intensité par rapport aux besoins de chacun des variateurs de fréquence 220v triphasé.
(1 signal 0 à 10 volts analogique pour la vitesse et 2 signaux 0 ou 10 volts digitaux pour le sens de rotation )
User avatar
Tfou57
X-Sim Supporter
 
Posts: 43
Joined: Tue 20. Mar 2012, 21:59
Location: France (57100 Thionville)
Has thanked: 0 time
Been thanked: 0 time

Re: Code Arduino DUE

Postby Wanegain » Thu 23. Apr 2015, 10:36

Tu peux utiliser la carte de Thanos comme ça ? T'en es sûr ?

La carte de Thanos est une carte qui communique avec le logiciel (tout comme les Arduino), elle reçoit les infos de X-Sim, les transpose pour les variateurs et communique directement avec eux, tu n'as pas besoin de passer par un Arduino ou alors j'ai raté quelque chose...
User avatar
Wanegain
 
Posts: 55
Images: 1
Joined: Mon 19. Nov 2012, 17:55
Has thanked: 1 time
Been thanked: 0 time

PreviousNext

Return to langue française

Who is online

Users browsing this forum: No registered users and 1 guest