Odometrie robot tondeuse

image
le décodeur attend sur son Rx un signal 'SBUS normal, cad inversé par rapport à une sortie TX de carte Arduino

Un transistor est il en place en sortie TXn de la carte Arduino ?

Quel est le niveau logique au repos entre les trames 'SBUS' que tu tentes maintenant de décoder ?

Oui j'inverse bien le signal qui vient de la carte arduino avec un transistor et 2 resistances.

Je ne suis plus sur place pour verifier l'état entre chaques trames, je verifis demain.

Quoi qu'il en soit j'ai testé plusieurs fois les 2 configurations.(avec inversion et sans inversion)

Tu peux sauver un enregistrement (fichier .sr)
changer son extension par .zip pour le mettre en fichier joint à un message
ça permet à d'autres de participer à l'exploration des données :wink:

(pour info un fichier .sr est un dossier zippé contenant 3 fichiers)

Référence : Input output formats - sigrok

+en manipulant sur un même l'écran plusieurs sessions tu peux chercher des différences entre deux trames censées être identiques.....Idem dans un tableur en reportant les valeurs de plusieurs exports en .csv......

ok, voila un enregistrement au format .sr renommé en . zip, il s'agit de la sortie de l'arduino inversé .

trame_inverse.zip (1,9 Ko)

Sur une bonne partie de la trame il y est indiqué 'invalid data'

Bonjour

Tu échantillonnes à 200kHZ pour 100000 bauds, c'est trop limite
Le théorème de Shannon donne une limite théorique, en pratique pour exploiter un signal échantillonné il faut pousser la cadence , je mettrai 1MHz pour 100000 bauds

Le décodeur UART de Pulseview ne voit qu'un seul bit de stop sur les 2 requis pour SBUS
soit c'est une conséquence de la fréquence d'échantillonnage trop basse
soit c'est un défaut du signal émis par la carte Arduino

Je viens d'essayer et le décodage se fait bien, merci car je n'aurais pas pensé a sa.

Curieusement le décodage se fait bien a ce débit avec le récepteur radio.

C'est logique : le besoin en nombre d'échantillons par bit est celui de l'UART émulé dans Sigrok/PulseviewA

Avec un signal numérique asynchrone ,en particulier, , il lui faut une bonne 'définition' pour ne pas perdre les pédales

Voila la correspondance des canaux de la télécommande:

Je viens de tester, la tondeuse ne réagit a aucune des mes commandes, je ne comprends pas, j'inverse pourtant le signal...

si je comprend bien

  1. voici la carte recevant le signal SBUS

2)quand tu lui injectes des trames SBUS sortant du récepteur de télécommande la tondeuse réagit normalement

3)quand tu lui injectes, après inversion logique, le signal issu de ta carte Arduino elle ne régit pas et pourtant le décodeur SBUS de Pulseview y voyait des trames valides

cest bien ça ?

Oui, c'est sa, j'ai du louper un truc mais je ne vois pas quoi

tu es confiant dans les données envoyées dans les divers canaux ?

Je pense avoir reperé tous les canaux, oui

peux-tu déposer ici deux enregistrements ?
-un fichier .sr de référence avec qq trames SBUS issues de la télécommande
-un fichier .sr avec qq trames SBUS valides sortant du transistor d'inversion logique

l'idéal serait que les deux enregistrements envoient les mêmes valeurs dans les canaux pour faciliter la recherche de différences

ok, je fais sa ce soir

SBUS ? SBUS2 ?

il est question ici de deux versions de SBUS
https://github.com/BrushlessPower/SBUS2-Telemetry

Le SBUS2 serait bidirectionnel, le niveau logique haut serait 3,3V et la valeur de l'octet final serait différente
As-tu u vérifié à l'oscillo la valeur de l'état haut su signal SBUS sortant de la télécommande ? (3,3v ? 5V ?)

Voila les trames:

Le recepteur:

sortie_recepteur.zip (9,0 Ko)

la sortie de la carte arduino avec inversion:

sortie_arduino_avec inverseur.zip (9,0 Ko)

J'ai mis la radiocommande comme si le robot allait en marche avant, les 2 valeurs a 200 sont les potentiometres qui sont au minimum.

Sinon j'ai mis ceci dans la carte arduino:

  uint16_t channels[16] = {
    200,   // Canal 1
    1800,    // Canal 2
    1000,   // Canal 3
    1000,   // Canal 4
    1000,    // Canal 5
    1000,   // Canal 6
    200,    // Canal 7
    200,   // Canal 8
    1000,   // Canal 9
    1000,   // Canal 10
  };

Je viens de vérifier, c'est du 3.3V en sortie du récepteur radio.

Donc la résistance de collecteur du transistor inverseur doit être reliée à 3,3V et non 5V pour envoyer le bon niveau haut pour le signal généré dans la carte Arduino

je redarderai plus tard tes enregistrements

Je n'ai as essayé en connectant au 3.3v mais je ne pense pas que sa puisse poser problème.

Au sujet des enregistrements, ils sont presques identiquent, à part a la fin, vraiement curieux que sa ne fonctionne pas.