Bonjour à tous
J’aurais besoin de votre aide afin de calculer un angle avec un sinus et un cosinus.
Je vous explique le fonctionnement de mon système (excusez moi pour la complexité de ma synthèse) :
J’ai à la base deux signaux analogiques (un sinus et un cosinus) qui ont une amplitude d’environ 100mVpp. Ces signaux peuvent être négatifs (jusqu’à -0.3V), mais je mets un offset de 0.5V donc nous avons des signaux uniquement positifs. Cette amplitude de 100mVpp n’est effectivement pas fixe car il peut y avoir un certain delta (qui est indépendant, c’est à dire qu’il peut y avoir des variations dans l’amplitude max et min du sinus et d’autres variations pour le cosinus). Ces variations sont de l’ordre de 10 mV. De plus la fréquence de mes signaux peut varier de 0hz (signal constant) à 4khz, sans que l’on soit informés de cette variation.
Lorsque la température diminue ou augmente (de -40°C à +105°C) les signaux peuvent se dilater, ou s’aplatir et un offset peut même se rajouter et ce encore une fois indépendamment sur chacun des signaux.
L’angle calculé à l’aide d’une tangente (sin/cos) doit être traduit sur 11 bits aussi rapidement et aussi précisément qu’il est possible de faire. A 4khz, cela demande un échantillonnage fréquencé à 2,88 Msps pour obtenir une précision de 1° (avec le théorème de Shannon).
Je dois au final transmettre l‘angle calculé avec une liaison RS 422.
J’ai deux solutions qui se rapprochent assez :
- Je peux utiliser un convertisseur analogique numérique 14 ou 16 bits et un FPGA. J’ai donc une certaine valeur de sinus et de cosinus traduite en binaire en fonction de la tension de référence max entrée dans le CAN. J’ai également deux valeurs +Vref et –Vref (positives) qui, disons, vont respectivement majorer et minorer l’amplitude max et min des deux signaux. En fonction de ces valeurs je peux donc augmenter la précision de calcul de l’angle. Cependant ces valeurs de référence ne sont pas très précises (elles ne font que « majorer ») et la traduction en binaire va donc être imprécise elle aussi par rapport à ce que l’on veut réellement.
L’inconvénient de ce système est la place qu’il prend car je suis limité à une carte de 34 mm.
- La deuxième solution est d’utiliser un CAN intégré à un microcontrôleur. J’ai trouvé un atmel AVRXmega 128A1 qui pourrait correspondre à ce que je recherche. Cependant il n’a qu’un CAN de 12 bits et un échantillonnage de 2Msps ce qui donnerait un précision d’environ 8° rien que sur l’échantillonnage. Mais 12 bits signifie une amplification pour une plus grande précision (qui ne sera tout de même pas celle recherchée) et donc un système d’amplification externe qui prendrait de la place.
L’idéal (au niveau de la précision et des variations de la tension max et min) aurait été un détecteur d’enveloppe pour avoir des tensions +Vref et –Vref précises. Mais cela ne fonctionne pas lorsque le signal est constant.
J’aimerais donc avoir votre avis sur mon système de traitement de signal et sur l’obtention des tensions de référence en fonction de mes signaux.
-----