Bonjour,
J'ai ma uno, un afficheur lcd et tout va pas si mal... Mais!
J'ai un problème sur la génération des signaux pwm.
Après un pulseIn(); et la récupération du niveau haut et apres map(); je restitue avec machin.write(dd);
jusque la tout va bien mais le signal générer a une valeur haute différente de celle captée!?
En clair je fais l'acquisition de 1.5ms et j'ai 1.44 en restitution et pire à 1.1ms j'ai plus que 700µs.
Avec la librairie servo la période pwm est à l'origine à 20ms, j'ai modifié le servo.h pour qu'il soit à 11ms comme à l'origine en sortie de mon récepteur radio.
Donc voila si quelqu'un sait pourquoi il y a ce décalage.
Merci
//lecture du signal de la radio consigne de vitesse mise en variable c, variable de 1000 a 2000
c = pulseIn(signalradio, HIGH, 11000);
c = constrain(c, 1000, 2000);
c = map(c, 1000, 2000, 0, 180); //calibrage de l'impulsion 1-1,5-2ms en 0-90-180°
cg = c; // mise consigne a droite et a gauche a consigne
cd = c;
consigneg.write(cg); //ecriture sur la sortie 9
consigned.write(cd); //ecriture sortie 10
... et en laissant la période à 20 ms ?
odisseano:
Bonjour,
J'ai un problème sur la génération des signaux pwm.
Après un pulseIn(); et la récupération du niveau haut et apres map(); je restitue avec machin.write(dd);
jusque la tout va bien mais le signal générer a une valeur haute différente de celle captée!?
En clair je fais l'acquisition de 1.5ms et j'ai 1.44 en restitution et pire à 1.1ms j'ai plus que 700µs.
Avec la librairie servo la période pwm est à l'origine à 20ms, j'ai modifié le servo.h pour qu'il soit à 11ms comme à l'origine en sortie de mon récepteur radio.
Donc voila si quelqu'un sait pourquoi il y a ce décalage.
bonsoir
d'où sort tu cette valeur de 11ms ?
la "pseudo norme" indique 20 ms
ça donne quoi sans modifier les lib en mettant le timeout du pulsin à 20000
là a chaud il semblerait y avoir un possible chevauchement entre entrée et sortie des signaux servos.
Bonsoir,
j'ai bien lu et vu aussi 20ms sur le net.
La période à 11ms est celle que j'ai mesuré à l'oscilloscope: agilent dso-x 3014a
Pour le récepteur
http://www.absolu-modelisme.com/recepteur-sr3300t-dsm-telemet.html
Et justement en passant à 11000 dans le fichier servo.h je pensais résoudre mon problème mais il reste le même...
Donc... je ne sais pas mais j'ai lu sur ce lien que je ne suis pas le seul à observer le pb; en fin de page.
Cordialement
W
En jaune mon signal d'entrée
en vert et en bleu mes signaux générés.
Cordialement
odisseano:
Bonsoir,
j'ai bien lu et vu aussi 20ms sur le net.
La période à 11ms est celle que j'ai mesuré à l'oscilloscope: agilent dso-x 3014a
Pour le récepteur
http://www.absolu-modelisme.com/recepteur-sr3300t-dsm-telemet.html
Et justement en passant à 11000 dans le fichier servo.h je pensais résoudre mon problème mais il reste le même...
Donc... je ne sais pas mais j'ai lu sur ce lien que je ne suis pas le seul à observer le pb; en fin de page.
Cordialement
W
OK , mais pour ce soir je vais au plus simple
tu prend peut etre le probleme à l'envers 8)
la "pseudo" norme est de 20 ms max entre fronts montants
comme tu semble un peu equipé avec un oscillo
regarde déjà en trigger ce qui vient de ta voie radio et ce qui sort en signal servo
regarde ensuite en inversant la voie trigger
Bonjour,
merci pour ces conseils mais:
le trigger (ou le déclenchement) ne changera rien à la mesure; je pense pouvoir être sur de ces mesures utilisant ces appareils depuis maintenant 20 ans et pas toujours dans l'enseignement; cela reste un oscilloscope....
Mon problème est la génération des signaux MLI en francais; PWM en anglais.
J'avais déjà le problème à 20ms et en changeant à 11ms il n'y fait rien....
Donc
Si je fais
cg = 0;
cd = 0;
consigneg.write(cg); //ecriture sur la sortie 9
consigned.write(cd); //ecriture sortie 10
Je ne mesure pas un niveau haut à 1ms mais à 700µs.
Donc si quelqu'un peut me donner la solution.
Cordialement
W
si on exclut un pb de restitution, et si on exclut une erreur dans ton programme (trop feignant pour vérifier), le hic se situe peut-être au niveau de l'acquisition.
le signal de sortie de ton récepteur ne fait que 3v3, c'est peut-être insuffisant pour commander proprement un arduino sous 5v ?
peux-tu envoyer le résultat de l'acquisition sur le moniteur série et regarder ce qu'il en est ?
Bonjour,
J'ai aussi essayé cette solution de passer le signal d'entrée en 5V....
Avec l'afficheur LCD je peux avoir les valeur de commande; l’acquisition se fait très bien, je lis des valeurs de 0 à 180 pour le signal MLI de 1ms à 2ms.
C'est a la commande
consigneg.write(cg);
sur "servo"
que j'ai un problème.
I vil bi back si je trouve la soluce
Merci
Bon j'ai trouvé une solution!!
J'ai remplacé la ligne
c = map(c, 1000, 2000, 0, 180);
par
c = map(c, 500, 2400, 0, 180);
à 1 ms en entrée j'ai 1.03ms
à 1.5 ms en entrée j'ai 1.505ms
et à à 2 ms en entrée j'ai 1.99ms
W