Salut les potos,
Comme dit précédemment, voila quelques explications sur les problèmes que l'ont rencontrent dans la synchronisation entre l'ordinateur qui envoi les données et le DAC.
Avant de rentrer dans le sujet, il me faut expliquer comment le DAC fonctionne actuellement.
Celui-ci passe sont temps à attendre des données, il ne fait aucune demande à l'ordinateur puisque cela pose d'autres problèmes :
- Ajouter une information réseau (DAC -> ordinateur) chiant à faire, la flemme !
- quel temps de récurrence ?
- augmentation de l'occupation réseau ?
- que ce passe t-il si la demande croise l'arriver des données ?
- ....
Le plus simple est un DAC qui attend ! Une sorte de DAC "open loop".
Le programme principal pourrait se présenter comme suite :
Code: Select all
DEBUT
INITIALISATION GENERALE
POUR TOUJOUR
DEBUT
TANT QUE (pas de donnée)
ALORS
// on boucle ici, tant que rien recu niveau reseau.
FIN TANT QUE
SI (données est du type : ARP)
ALORS
// gerer ARP, pas le sujet ici.
FIN SI
SI (données est du type : PING)
ALORS
// gerer PING, pas le sujet ici.
FIN SI
SI (données est du type : LASER)
ALORS
TANT QUE (donnée laser)
ALORS
// set galva X
// set galva Y
FIN TANT QUE // boucler
FIN SI
FIN
FIN
Après ce blabla, le soft envoi des données LASER à inter-val régulier, prenons 1 seconde, c'est a dire que toute les secondes
l'ordinateur envoi 700 points LASER par exemple.
Première question : Le DAC reçoit-il réellement les données toutes les secondes ou ce temps est-il approximatif ?
- Après modification du DAC pour qu'il passe à 1 ou 0 une sortie X de µP pour voir ces créneaux à l'oscillo, j'ai ce type de chronogramme :
synchro.png
(1) le DAC attend
(2) j'ai des données
(3) traitement des données
(1') j'attend
A ma grand satisfaction ce temps est plutôt régulier, ici à 35ms

(entre (1) et (1') )
De plus au niveau soft (ordinateur) il est facile de corriger une fluctuation , mais chute
comme me l'a suggérer une personne de ne pas trop en dire
Par contre on voit que le DAC passe pratiquement 1/3 de sont temps à attendre (le niveau 1 est 3 fois plus grand que le niveau 0, tronqué sur l'image), Pourquoi ?
- le DAC va trop vite à lire les données LASER, Il a fini de lire (donc envoyer les données aux galva)
bien avant la réception des 700 données suivantes, tout simplement.
Nota 1 : 35ms pour 700 points ça fait quoi en fait ? ben, 0.035 secondes / 700 pts = 0.00005 secondes pour 1 point, soit pour une secondes, 1/0.00005 = 20 000 points/seconde (20 Kpps).
Nota 2 : pourquoi 700 points ? et bien une trame réseaux fait en principe 1500 octets par défaut (MTU pour les puristes), donc 700 points sur 8 bits ca fait 1400 octets, reste
100 octets qui sont utilisés pour le réseaux proprement dit.
Cette valeur de 1500 est une limite, sinon les donnée sont coupées en plusieurs block. je me vois mal programmer le DAC pour qu'il "concatène" les block !!!
Nota 3 : Pourquoi 1/3 de sont temps ? simple, la les données sont à 20Kpps, comme le DAC a une vitesse de 67Kpps, ça fait pratiquement 1/3.
tout ce retrouve et j'aime ça !!
Bon ,nous avons un DAC qui va trop vite pour des données à 20Kpps, il faut le ralentir entre chaque point, d'où un nombre X d’itérations pour intercaler une tempo
afin qu'il lise pratiquement la dernière donnée LASER juste avant la réception des 700 points suivants. diminution de (1 ou 1').
problème:
- Si ont le ralenti trop, c'est pas bon, car le buffer de réception va arriver à saturation.
- Si ont le ralenti pas assé, il y aura un temps d'attente (1), qui en fait est pas si grave (une autre idée mais chute ...)
Voici pour rappel la courbe qui donne le nombre d’itération en fonction du Kpps (1/Kpps). (Ralentissement du DAC)
kpps-temps.png
(cette courbe est propre Ă mon type de DAC !)
Je termine pour ce soir ce mini "tuto" sur la synchronisation, il faut juste retenir que :
- le DAC va trop vite (en full vitesse il passe Ă 67Kpps, 2*8bits)
- il faut le ralentir en fonction du KPPS désiré (itération variable de la tempo)(paramétrable)
- diminuer au maximum le temps d'attente du DAC, (1). Se qui revient Ă le synchroniser.
- ...
et tout cela de façon dynamique, et oui si je veut du 30Kpps, il faut :
- recalculer le temps entre les "block" (trame) de 700 points (gestion soft ordinateur)
- ralentir le DAC, oui mais moins qu'a 20Kpps ! (encore gestion ou calcul au niveau ordinateur)
(Rappelez vous de ces deux derniers points pour ceux qui suivent)
Bye
Yannick
Ps : si du monde a suivit ? à 20Kpps j'ai un réseau a 42Kbyte/seconde, normal ?
You do not have the required permissions to view the files attached to this post.