CATEGORII DOCUMENTE |
Bulgara | Ceha slovaca | Croata | Engleza | Estona | Finlandeza | Franceza |
Germana | Italiana | Letona | Lituaniana | Maghiara | Olandeza | Poloneza |
Sarba | Slovena | Spaniola | Suedeza | Turca | Ucraineana |
DOCUMENTE SIMILARE |
|
On désire réaliser un filtre numérique à partir d’un DSP TMS320C50 cadencé à 40 MHZ et d’un CAN/CNA parallèle l’AD7339 d’Analog Device.
On définit un filtre analogique par sa réponse temporelle et par réponse fréquentielle. En général, c’est par rapport à sa réponse fréquentielle que l’on se base. On obtient ainsi des filtres passe-bas (atténuation des fréquences hautes, seules les fréquences basses passent) des filtres passe-haut (atténuation des fréquences basses) et des filtres passe-bande (seule une bande de fréquences passe).
Si l’on prend l’exemple du filtre passe-bas idéal, c’est à dire que ce filtre ne laisse passer que les fréquences inférieures à la fréquence de coupure du filtre notée fc. Les fréquences supérieures sont fortement atténuées. Ce filtre idéal n’est pas réalisable, mais la plupart des filtres analogiques s’en rapprochent.
|H(jf)| = S/E fc f Réponse
fréquentielle d’un filtre passe-bas idéal
Fig. 42 : Réponse impulsionnelle et réponse fréquentielle d’un filtre passe-bas idéal.
Rappel : pour obtenir la réponse fréquentielle d’un filtre il suffit d’envoyer un signal sinusoïdal de fréquence f et de faire le rapport des amplitudes |H(jf)|=S/E. Puis recommencer cette opération pour toutes les fréquences. On obtient alors la réponse fréquentielle donné à la figure 42.
Le principe du filtre numérique est donné à la figure 43. Le problème consiste à trouver la relation entre les échantillons de sortie s(n) et les échantillons d’entrée e(n). Une solution consiste à chercher cette relation par rapport à la réponse impulsionnelle du filtre idéal (on prendra le cas du filtre passe-bas). Dans ce cas, on désire obtenir le filtre dont la réponse est donné à la figure 44.
Fig. 43 : Principe du filtre numérique.
e(t) h(t)
Fig. 44 : Réponse impulsionnelle d’un filtre passe-bas numérique, cas où Fe = 6*fc
La réponse impulsionnelle du filtre passe-bas numérique FIR (filtre à réponse finie), dépend de la fréquence d’échantillonnage Fe. Plus la fréquence d’échantillonnage est grande et plus la réponse du filtre sera fidèle à la réponse analogique du filtre idéal. L’exemple de la figure 44 est pris pour Fe = 6*fc. Pour Fe = 12*fc, la réponse du filtre est donné à la figure 45.
Fig. 45 : Réponse impulsionnelle d’un filtre passe-bas numérique, cas où Fe = 12*fc
Calcul des échantillons h(k) :
Etant donné que l’on a pris comme hypothèse que l’on a une réponse finie, et c’est ce que l’on voit sur le graphique, la réponse d’un filtre numérique est de la forme :
Pour la réponse impulsionnelle, on a seulement l’échantillon e(0). Dans ce cas on trouve s(0) = h(0).e(0), puis s(1) = h(1).e(0), puis s(i) = h(i).e(0) etc jusqu'à s(N) = h(N).e(0). Donc les h(n) sont les valeurs de h(t) (réponse impulsionnelle du filtre) aux instants d’échantillonnage.
Il suffit donc de connaitre la réponse impulsionnelle du filtre passe-bas h(t) : soit
On en déduit donc la valeur des coefficients en fonction de la fréquence d’échantillonnage :
On en déduit donc que la réponse d’un filtre à l’instant n se calcule par rapport aux N échantillons précédents. La figure 46 nous donne le principe pour un signal quelconque.
Sens de déplacement de la fenêtre s(n) Taille de la fenêtre :N échantillons
Fig.46 : Principe du filtrage numérique, l’échantillon s(n) est fonction des N échantillons précédents e(n-k)
Fig.
47.1 : Signal e(t) de fréquence f = Fe + Df est échantillonné tous les Te. (Te = 1/Fe). Te
Fig 47.2 :
signal e(t) de fréquence Df
Fig. 47 : Un signal e(t) de fréquence Fe + Df (Cf figure 47.1) est équivalent (après échantillonnage) au signal e(t) de fréquence Df (Cf figure 47.2).
Le signal e(t) de fréquence f > Fe/2 est vue par le processeur comme un signal de fréquence beaucoup plus faible. Ce qui implique que pour un filtre passe-bas un signal de fréquence très grande (f > Fe/2) pourra passer à travers le filtre passe-bas, alors qu’il aurait du être atténué.
Théorème de Shanon : La fréquence d’échantillonnage Fe doit être supérieure à deux fois la fréquence maximale du signal.
Fe = 2* Fmax
Donc pour éviter les problèmes de recouvrement de spectre, on prendra soin de placer à l’entrée du CAN un filtre passe-bas analogique de fréquence de coupure fc < Fe/2.
Le signal s(t) en sortie du filtre numérique est un signal en marche d’escalier, étant donné qu’entre 2 calculs d’échantillons, l’ancien échantillon est bloqué pendant Te. Afin de lisser le signal de sortie, on placera un filtre passe-bas en sortie du CNA de fréquence de coupure fc > Fe.
La figure 48 illustre ce principe : Un signal sinusoïdal de fréquence f = Fe*6 (répond au théorème de Shannon) est filtré par un filtre FIR. En sortie de ce filtre on obtient un signal en escalier.
Fig. 48 : Signal sinusoïdal de fréquence f
en sortie d’un CNA de fréquence Fe = f/6.
La chaine complète du traitement du signal sera donc toujours constitué des mêmes éléments :
un filtre passe-bas anti-repliement qui élimine toutes les fréquences supérieures à Fe/2,
un CAN de fréquence d’échantillonnage Fe,
un processeur qui génère un signal s(n) en fonction des échantillons e(n-i) précédents et de l’échantillon courant (Filtre FIR) et des s(n-i) précédents (Filtre IIR),
un CNA qui génère un signal analogique en escalier,
un filtre passe-bas de lissage qui filtre le signal.
Fig. 48 :Chaine de traitement du signal.
On désire implémenter ce filtre à l’aide d’un DSP TMS320C50 cadencé à 20 MHz et d’un CAN-CNA l’AD7339 convertisseur 8 bits d’Analog Device dont la documentation technique est donné en ANNEXE.
Pour cela nous avons besoin de connaitre les chronogrammes en lecture et en écriture du DSP (ces chronogrammes sont fournis en ANNEXE) et les chronogrammes de l’AD7339.
l’AD7339 possède :
un CAN (ADC) sortie parallèle :entrée signal AIN et sortie sur 8 bits (D7-D0),
2 CNA (DAC) parallèle : entrées DA7-DA0 et DB7-DB0, sorties DACA et DACB,
2 CNA (DAC) séries : entrées SDATA et SCLK, sorties SDAC0 et SDA1 (sorties différentielles),
référence de tension interne.
Nous allons utiliser le CAN et le CNA DACA à sortie parallèle.
Le CAN quantifie les signaux analogiques entre +1V et -1V. Son quantum q est donc égal à :
q = 2V/256 = 7,8mV.
Le CNA a sa tension de sortie Vout qui varie entre -1,4V et +1,4V et donc possède un quantum q égal à
q = 2,8V/256 = 10,93mV
Le CAN-CNA nous amène donc un gain de 1,4.
7,8mV
Fig. 49 : Caractéristiques d’entrée/sortie du CAN Fig. 50 : Relation entre entrée/sortie du CNA.
Schéma de principe de la carte:
Remarques sur le CAN : une lecture du chronogramme de l’AD7339 (figure 3 de la fiche technique sur l’AD7339) nous montre que l’échantillonnage se fait sur le front montant de ADCCLK et que cet échantillon est lisible après un temps t4 suivant le front descendant de ADCCLK. Il est de plus évident que cet échantillon reste présent sur les broches D7-D0 jusqu’au prochain échantillonnage. Ce qui implique, pour ne pas perturber le bus de données, de placer entre les broches D7-D0 et le bus de données un buffer 3 états.
Remarques sur le CNA : l’écriture des données dan le CNA se fait sur le front montant du signal DACCLK. Il faut (Cf figure 4 de la fiche technique sur l’AD7339) que la donnée soit présente pendant le temps t9 (130 ns) avant le front montant et reste pendant t10 (50 ns) après le front montant.
Remarques sur le DSP : une lecture du CAN se fait par le biais des broches de commandes DS et RD pour un accès en mémoire données et par les broches IS et RD pour un accès aux ports d’entrée/sortie. L’accès au CAN se fera par l’instruction IN (soit un accès aux ports).
Une écriture vers le CNA de la même façon se fait par les boches de commandes DS et WR en mémoire données et par les broches IS et WR pour un accès aux ports d’entrée/sortie. L’accès au CNA se fera par l’instruction OUT (soit un accès aux ports).
Pour simplifier, nous ne ferons pas de décodage d’adresses, et donc une écriture à n’importe quelle adresse de l’espace des ports viendra écrire dans le CNA et de même, une lecture viendra lire le CAN, et ceci quel que soit l’adresse.
On obtient donc le schéma de principe suivant : Cf figure 51
Il nous reste à déterminer les 2 logiques de décodage qui permettront de répondre aux contraintes posées par les 2 chronogrammes du DSP et de l’AD7339.
Pour cela, il nous faut faire la synthèse des 2 chronogrammes en lecture et en écriture. Ceci est fait à la figure 52 et 53.
Fig. 51 : Schéma de principe de la carte à base d’AD7339.
Pour le DSP la lecture sur le bus de données s’effectue sur le front montant de la broche RD, alors que le CAN est plutôt fait pour être lu sur le front descendant de la broche ADCCLK. Lorsque RD est à 0 (demande de lecture) il faudra rendre passant le buffer 74HC540 (soit G mis à 0). Ceci est résumé par le timing de la figure 52.
Fig. 52 : synthèse des chronogrammes pour la lecture du CAN
La contrainte la plus forte est donnée par le temps t3 qui doit être au moins de 210 ns. En fonction de la figure 52, on déduit les tableaux de KARNAUD des signaux ADCCLK et G en fonction de RD et IS.
G ADCCLK
RD/IS |
RD/IS | |||||
Donc G = RD OU IS et ADCCLK = RD OU IS
De plus les signaux RD et IS doivent avoir un niveau bas pendant au moins 210 ns. Ors TCLKOUT1 = 100 ns
( 2/20 MHz) et sur le timing fourni en ANNEXE le RD dure une demi période soit TRD = 50 ns pour un 0 Wait State. Il faudra donc rajouter des temps d’attente logiciels. On prendra 2 temps de cycle d’attente (TRD =250 ns).
Lors d’un accès en écriture sur les ports, les broches WE et IS passe à 0 et la valeur est placée sur le bus de données. Pour le CNA, c’est un front montant sur la broche DACCLK qui génère la conversion numérique analogique (Cf figure 53).
Les contraintes de timing sont imposées par le CNA. Il faut que la données soit présente pendant le temps t9 (130 ns) avant le front montant et reste pendant t10 (50 ns) après le front montant. Etant donné que l’on a inséré un temps d’attente de 2 cycles (soit 250 ns) la condition sur t9 est vrai. Le timing donné par TEXAS nous donne un temps de 40 ns entre le front montant de WE et la disparition des données ce qui n’est pas suffisant.
Solution :on prendra un 74HC273 (octuple bascule D) qui permettra de garder sur AD7-AD0 la valeur écrite sur le bus de données et cela jusqu’au prochain échantillon.
Fig. 53 : synthèse des chronogrammes pour l’écriture sur le CNA
La logique de décodage est évidente : DACCLK = WE OU IS
Le schéma de la carte est donné en ANNEXE.
Le programme réside en mémoire EEPROM. A l’initialisation, la mémoire SARAM est placée en mémoire données interne et le bloc B0 en mémoire programme. L’espace des entrée/sortie sera lu avec 2 temps d’attente. la fréquence d’échantillonnage est fixée à 50 KHz, pour Fclk = 20 MHz.
Pour programmer un filtre FIR, on a 2 solutions :
utilisation des buffers circulaires :Cf programme donné en ANNEXE
utilisation de l’instruction MADD : vu au chapitre 2.1.7.
Nous utilisons la deuxième méthode. AR7 est initialisé sur la fin du tableau et AR6 pointe sur le début du tableau. AR7 est le pointeur courant sur le tableau. A chaque fois que l’on part en routine d’interruption timer pour le calcul du filtre, les échantillons sont déplacés vers le bas, ce qui laisse la place pour le nouvel échantillon à l’échantillonnage suivant. Le filtre implémenté aura 9 échantillons. La figure ci-dessous nous donne l’état de la mémoire au moment du calcul du filtre et juste après le calcul (instruction APAC)
.title ‘Filtre FIR’
.mmregs
.ds 0310h
TEMP .word
.ps 030h ; coefficient du filtre
COEFF .word ;placer les 9 coefficients
.ps 0808h ; adresse du vecteur d’interruption de timer
timer : B rout_timer ; Branchement vers la routine d’interruption ITINT
.ps 0840h
.entry ; point d’entrée du programme
SETC INTM ; désactivation des interruptions
LDP #0 : page 0
SPLK #0820h, PMST ; RAM = 0 et OVLY = 1
; SRAM en mémoire données et vecteurs d’it à l’adresse 0800h
SETC CNF ; bloc B0 en mémoire programme
SETC OVM ; prise en compte de la saturation
; init wait state
LACL #0
SAMM CWSR ; Big = 0, choix d’attente pour toutes les mémoires égal à 0,1,2,3
SAMM PDWSR ; pas d’attente pour les accès en mémoire externe
SPLK #AAAAh, IOWSR : attente de 2 cycles pour l’espace des entrée/sortie
LAR AR6, #300h ; initialisation de AR6
MAR *, AR6 ; AR6 est le pointeur courant
;initialisation du timer
SPLK #199, PRD ; Tint = 200 * Tclkout = 20 us
SPLK #20h, TCR ; Charge PRD TIM et 0 PSC et TSS = 0 : départ compteur
SPLK #1000b, IFR ; efface toutes les interruptions
LACL #0 ; initialisation de ACC pour la routine d’interruption du TIMER
CLRC INTM ; activation des it
WAIT B WAIT
.ps FE00h ; routine d’it placée dans le bloc B0 pour accélérer le traitement
rout_timer : LAR AR7, #309h ; initilaisation de AR7
SPLK #COEFF, BMAR ; récupération du début de l’adresse des coefficients
LAMM 50h, AR6 ; lecture du port dans ACC
SACL *, AR7 ; (AR6) ACC, pointeur courant AR7
RPTZ #9 ; ACC = PREG = 0. For i = 9 to 0 Do
MADD *- ; Somme des ai * xi xi+1 = xi
APAC ; dernière somme
LDP #6
SACH TEMP
LACL TEMP
LDP #0
SAMM 50h, AR6 ; envoie de la valeur sur le port
RETE
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1897
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved