LES PROCESSEURS DU SIGNAL (DSP) DANS LE CONTRÔLE NUMERIQUE Étude d’un DSP dédié au contrôle moteur LES PROCESSEURS DU SIGNAL (DSP) DANS LE CONTRÔLE NUMERIQUE Étude d’un DSP dédié au contrôle moteur Généralités sur les DSP - Caractéristiques - Structures - Comparaison entre mProcesseur et DSP Etude du processeur TMS 320LF2407 Application à la carte d’évaluation eZdsp LF2407 - Architecture - Gestion des interruptions - Programmation Exemples de programmes Codage des nombres Applications Introduction Définition Un DSP : mProcesseur particulier; - Intègre un ensemble de fonctions spéciales; - Bonnes performances; - Généralement conçu pour être utilisé sous la forme d’un monocircuit; Intègre: - mémoire RAM et ROM - ports série rapides - ports d ’entrées / sorties Il est destiné à être «embarqué»; Introduction Avantages Souplesse de la programmation; Stabilité; Reproductibilité; Introduction Le marché en 1996 selon Forward Concepts Principaux constructeurs Motorola 8% Analogue Device 11% Autres 7% Texas Instruments 45% AT&T 29% Introduction Domaines d’application Télécommunications Son Vidéo Instrumentation: analyseurs de spectres; générateurs de fonctions; analyse des signaux et des images biologiques; radar et sonar Systèmes de commande: commande de moteurs électriques; synthèse des correcteurs de servomécanisme équipement automobile; Différences entre un mProcesseur et un DSP Soit: A ( B. C) D Le 68000 (par ex.) a besoin de: 10 cycles d’horloges pour effectuer une addition 70 cycles d’horloges pour effectuer une multiplication soit au total 80 cycles d’horloges Les DSP disposent de fonctions optimisées: Il peuvent effectuer simultanément les 3 opérations suivantes: lecture d’une donnée en mémoire effectuer une multiplication puis une addition écrire en mémoire le résultat Cette opération s’appelle MAC et prend 1 cycle d’horloge Performances des DSP Vitesse de calcul: Nombre d ’instructions par seconde ACRONYM E ANGLAIS DEFINITION Million Floating-Point Operations Per Second MFLOPS Mesure le nombre d’opérations à virgule flottante(multiplication, additions, soustraction…etc) que le DSP à virgule flottante peut réaliser en une seconde Million Operations Per Second MOPS Mesure le nombre total d’opérations que le DSP peut réaliser en une seconde. Les opérations concernent également les accès DMA, les transferts de données, les opérations d’E/S…etc. Million Instructions Per Second MIPS Mesure le nombre de codes machines (instructions) que le DSP peut effectuer en une seconde. Mega-Bytes Per Second MBPS Mesure la largeur de bande d’un bus particulier ou d’un dispositif D’E/S, c-à-d son taux de transfert Différences entre un mProcesseur et un DSP Structure Von Neuman Adresse Mémoire Programme et Données Donnée Entrées Sorties Unité arithmétique et logique Différences entre un mProcesseur et un DSP Structure Harvard Adresse Mémoire Programme Donnée Adresse Entrées Sorties Unité arithmétique et logique Donnée Mémoire Données Différences entre un mProcesseur et un DSP Structure Harvard Modifiée Mémoire Programme Adresse MUX Donnée Mémoire Données MUX Entrées Sorties Unité arithmétique et logique Différences entre un mProcesseur et un DSP Structure Von Newman Structure Harvard mProcesseurs mProcesseurs spécialisés : DSP Structure Harvard modifiée Coût plus faible Performances des DSP Temps d ’accès à la mémoire: Un DSP peut simultanément: - chercher en mémoire une instruction et ses données - réaliser une opération MAC - ranger en mémoire le résultant du MAC précédent. gain de temps évident. Performances des DSP Modes d’adressages des données: - Unité logique de génération d’adresse - travaille en parallèle avec UAL. Choix d ’un DSP Le choix dépend : - de la puissance de traitement nécessaire - du type de DSP à utiliser - des ressources mémoire utilisées -des besoins d’un ou de plusieurs Timers internes, de ports série - du coût par rapport au rapport « performance/prix » - de la qualité de la documentation - de la qualité du système de développement utilisé -de la possibilité d ’utiliser un langage de haut niveau ….etc Étude du processeur TMS 320 LF 2407 Architecture du TMS 320 LF2407 Basée sur la structure de Harvard modifiée: - les bus programme et données sont séparés - Accès simultané aux instructions programme et aux données C2xx CPU+JTAG +544x16 DARAM Logic I/F Flash / ROOM (Up to 32Kx16) SARAM (up to 2Kx16) Mem I/F P bus I/F P bus Event Managers (EVA and EVB) SPI SCI CAN WD ADC control ADC Interrupts reset,etc I/O registers Unité centrale de calcul Bus Programme UA des pointeurs Registre instruction Registres pointeurs: AR0…AR7 Bus Données Prédécaleur Multiplieur UAL Générale Registre TREG Accumulateur Registre PREG Postdécaleur Postdécaleur Bus de Données en écriture DWEB Bus de Données en lecture DRDB Bus de Programme en lecture PRDB TREG Multiplieur 16x16 MUX PREG Décalage 0-16bits (Prescaler) Décalage -6,0,1,4 bits (Pscaler) MUX ALU C Accumulateur Décalage 1-7 bits (Postscaler) MUX Générateur d ’adresses Bus de Données en lecture ARB AR7 AR6 AR5 AR4 AR3 AR2 AR1 AR0 ARP MUX Registre Instruction MUX ARAU Bus adresses données Bus Données Flash EEPROM DARAM B1 / B2 DARAM B0 Test Emulation Interface Mémoire Externe Bus Programme Contrôleur Programme Registre Instruction ARAU Pré-décaleur Multiplieur Registre d’état ALU TREG Registres Aux. Accumulateur PREG Géné. Temps d’attente Gestionnaire d’événement Timers Registres mappés en mémoire Post-décaleur Post-décaleur Unités comparaison Captue /QEP Module Horloge Module Interface système Bus Périphérique Convertisseur A/D Interface Série Watchdog Architecture du TMS 320LF2407 Le LF2407 est organisé autour de 3 types de mémoire Mémoire programme: 64 Kmots de 16 bits Mémoire données internes: 64 Kmots de 16 bits, parmi lesquels: 3 blocs de mémoire double accès (DARAM) B0, B1, B2 (544 mots de 16 bits) Espace des entrées / sorties: 64 Kmots de 16 bits, pour l’interfaçage avec les périphériques extérieurs Au total un espace mémoire de 192 Kmots Architecture du TMS 320 F240 Mémoire Programme: - Programme à exécuter - Le bloc B0 peut être en mémoire programme (CNF): • CNF=0: Les 544 mots (B0+B1+B2) mémoire données • CNF=1: - Les 256 mots du bloc B0 mémoire programme - Les 288 mots de B1 et B2 mémoire données - Mémoire Flash (MP/MC): • Se comporte comme une ROM • Formée de 32 Kmots de 16 bits • MP/MC = 0 : le DSP est en mode mcontrôleur • MP/MC = 1 : le DSP est en mode mprocesseur Bloc B0: 256 mots de 16 bits FE00h à FFFFh Bloc B1: 256 mots de 16 bits 0300h à 03FFh Bloc B2: 32 mots de 16 bits 0060h à 007Fh Architecture du TMS 320 F240 Mémoire Données internes: Comprend 3 Blocs de mémoire double accès - Le bloc B0 configurable en mémoire programme ou données selon la valeur du bit CNF - Les blocs B1 et B2 sont réservés à la mémoire données seulement le mode d’adressage peut être direct ou indirect en mode direct: adressage par blocs de 128 mots appelé page de données • Il existe 512 pages de 0 à 511 • Accès à une page: pointeur de page DP du registre d’état ST0 en mode indirect, adressage par l’un des 8 registres auxiliaires ARn Organisation de la mémoire Contenu de la page 0: 2 registres accessibles sans délai d’attente - registre de masques d’interruptions (IMR) - registre de drapeaux d’interruptions (IFR) zone mémoire de travail: Bloc B2 (RAM: 32 mots de 16 bits) une zone réservée pour le test et l’émulation Modes d ’adressage On dispose de 3 modes d ’adressage: t direct paginé t indirect et indirect indexé t immédiat L ’adressage direct utilise le registre de page DP (9 bits de poids fort de l ’adresse) L ’adressage indirect utilise les registres - pointeurs ARn L ’adressage immédiat utilise le compteur ordinal pour repérer une donnée en mémoire de programme Modes d ’adressage Mode direct, adressage par blocs de 128 mots appelés pages de données • Il existe 512 pages de 0 à 511 • Accès à une page: pointeur de page DP du registre d’état ST0 DP 0000 0000 0 0000 0000 0 0000 0000 1 0000 0000 1 . . . 1111 1111 1 1111 1111 1 ldp add add #1 00F0h #0ED83h Offset 000 0000 111 1111 000 0000 111 1111 000 0000 111 1111 Mémoire données Page 0 : 0000h - 007Fh Page 1 : 0080h - 00FFh Page 511 : FF80h - FFFFh ; selection page 1 ; le contenu de l’adresse 00F0h est ajouté au contenu de l’Accu ; ajout de ED83 au contenu de l’Accu. Modes d ’adressage Mode indirect, adressage par l’un des 8 registres auxiliaires ARn LAR AR1, # 00F0h ; AR1 pointe sur le contenu de la mémoire 00FH MAR *, AR1 ; choix de AR1, ARP=1 ADD * ; le contenu de la mémoire pointée par AR1 est ; ajouté à celui de l’Accumulateur Modes d ’adressage Lorsqu’un registre-pointeur est utilisé, AR(ARP) représente toujours l’adresse d ’un des opérandes * *+ **0+ *0*BR0+ *BR0- AR(ARP) utilisé comme adresse, ARP reste inchangé AR(ARP) AR(ARP)+1 AR(ARP) AR(ARP)-1 AR(ARP) AR(ARP)+AR0 AR(ARP) AR(ARP)-AR0 AR(ARP) AR(ARP)+AR0 et propagation de la retenue de gauche à droite après l’adressage AR(ARP) AR(ARP)-AR0 et propagation de la retenue de droite à gauche après l’adressage Registres d’état Le processeur dispose de 2 registres d’état ST0 et ST1 Registre ST0 15 14 13 12 11 ARP OV OVM 8 7 6 5 4 3 2 1 0 10 9 1 INTM DP ARP: pointeur d’adresse ( registre auxiliaire courant) OV : indique la présence d’un dépassement OVM: le résultat est saturé lors d’un dépassement si 1 INTM: masquage global des interruptions si 1 DP: permet l’adressage par page Registres d’état Registre ST1 15 14 13 12 11 ARB CNF TC 10 9 SXM C 8 1 7 1 6 5 4 3 2 1 0 1 1 XF 1 1 PM ARB: stocke le précédent ARP CNF: indique si la mémoire à double accès (B0) est en mode prog.ou données TC: bit indiquant le résultat d’un test logique SXM: (Sign eXtension Mode) extension du bit de signe lors des décalages à droite C: stocke le résultat de la retenue lors d’une opération arithmétique XF: (eXternal Flag) état de la broche XF du processeur PM: mode de décalage des produits PM 00: Aucun décalage 01: Décalage d’un bit à gauche 10: Décalage de 4 bits à gauche 11: Décalage de 6 bits à droite avec extension du signe Gestionnaire d’évènement 2 Gestionnaires d’évènements: EVA et EVB fonctionnent de manière identique Chacun comprend: • 2 Timers; • 3 Unités de comparaison; • 1 Module de génération de signaux PWM avec temps mort et possibilité de SVPWM; • 3 Unités de capture; • 1 Circuit « Quadature Encoder Pulse : QEP » adapté aux codeurs incrémentaux pour la mesure de position • Une logique de gestion des interruptions Event Manager Block Diagram (EVA) Reset PIE EV Control Registers / Logic GP Timer 1 Compare / 2 TCLKINA / TDIRA ADC Start Output Logic T1CMP/T1PWM GP Timer 1 Data Bus • Compare Unit 1 Compare Unit 2 PWM Circuits Output Logic PWM Circuits Output Logic Compare Unit 3 PWM Circuits Output Logic GP Timer 2 Compare Output Logic PWM1 PWM2 PWM3 PWM4 PWM5 PWM6 T2CMP/T2PWM GP Timer 2 MUX CLK DIR QEP Circuit • Capture Units • • CAP1/QEP1 CAP2/QEP2 CAP3/QEPI1 Récapitulatif Caractéristiques du LF2407: • Fréquence 40 MHz : 40x106 instructions par seconde (40 MIPS) • 2x2 Timers • 2x3 unités de comparaison: 2x 6 signaux PWM (MLI) • Circuits gérant les signaux PWM: Fonctionnement en MLI vectorielle (SVPWM) Gestion des temps morts • 2x3 Compteurs d ’impulsions « Capture units » • 2 modules avec des entrées « QEP » compatible avec des codeurs incrémentaux • Faible niveau de tension : 3,3 V Les Timers 2 Timers par module 4 Bases de temps indépendantes: • Génération d’une période d’échantillonnage dans un système de contrôle • Bases de temps pour les compteurs d ’impulsions • Bases de temps pour les circuits QEP (seulement les timers 2 et 4) • Bases de temps pour la génération des signaux MLI Chaque timer comprend: • un registre compteur TxCNT accessible en lecture et écriture • un registre de contrôle GPTCON • un registre de comparaison TxCMPR accessible en lecture et écriture • un registre période TxPR • un registre de contrôle TxCON • un diviseur de fréquence applicable aux horloges interne et externe • une logique gérant les interruptions et leur contrôle • une sortie (TxPWM / TxCMP) correspondant au résultat de la comparaison (TxCMPR) Fonctionnement des Timers T1PR ou T3PR Registre période T2PR ou T4PR Registre période (Dédoublé) (Dédoublé) GPTCON Registre ctrl Timer MUX TxCMPR Registre comparaison (Dédoublé) Logique de comparaison TxCNT Compteur Horloge CPU interne Logique de contrôle TxCON Registre de contrôle Géné. dents scie Sym. / Asym. Logique sorties Drapeaux Interruption (Flags) Démarrage Conversion ADC TCLKINA/B TDIRA/B TxPWM Registres de Contrôle des Timers TxCON qui détermine: quel mode de comptage est utilisé; si le Timer utilise une horloge interne ou externe; quelle valeur du diviseur de fréquence utiliser; dans quelle condition le registre de comparaison est rechargé; si le Timer est valide ou pas; si l’opération comparaison est valide ou pas; si les Timers 2 et 4 utilisent leur propre période ou celle du Timer1 et Timer3 Configuration des Timers Registre de contrôle des Timers TxCON 15 Free 14 Soft 7 TSWT1 6 TENABLE 13 Réservé 12-11 TMODE2-TMODE0 5-4 TCLKS1-TCLKS0 3-2 TCLD1-TCLD0 10-8 TPS2-TPS0 1 TECMPR 0 SELT1PR Bits 15,14: conditions d’arrêt du Timer Bits 13 : Réservé Bits 12-11: mode de comptage Bit 10-8 : valeur du diviseur de fréquence Bit 7 : Permet de démarrer le Timer 2 (ou le Timer4) en même temps que le Timer1 (ou le Timer3) Bit 6 : Démarrage du Timer Bits 5-4 : source de l’horloge des Timers Bits 3-2 : condition de chargement des registres de comparaison Bit 1 : validation de l’opération comparaison Bit 0 : choix de la période (concerne Timer 2 et 4) Configuration des Timers Registres de Contrôle des Timers GPTCONA/B: spécifie les actions à prendre en compte par le Timer; indique le sens du comptage. Configuration des Timers Registre de contrôle des Timers GPTCONA/B 15 T3STAT 6 TCOMPOE Bits 15 Bit 14 Bit 13 Bit 12-11 Bit 10-9 Bit 8-7 Bit 6 Bits 5-4 Bits 3-2 Bits 1-0 14 T2STAT 13 T13STAT 5-4 T3PIN 12-11 T3TOADC 3-2 T2PIN 10-9 T2OADC 8-7 T1OADC 1-0 T1PIN : Réservé : Sens de comptage (concerne Timer 2 ou Timer 4) : Sens de comptage (concerne Timer 1 ou Timer 3) : Réservés : démarrage du convertisseur ADC par un événement du Timer2 ou Timer 4 : démarrage du convertisseur ADC par un événement du Timer1 ou Timer 3 : permet de valider la sortie: comparaison des Timers : Réservés : polarité de la sortie du Timer 2 ou du Timer 4 : polarité de la sortie du Timer 1 ou du Timer 3 Interruptions Timer 4 Interruptions par Timer: Overflow: TxOFINT ( Compteur = FFFFh); Underflow: TxUFINT ( Compteur = 0000h); Compare match: TxCINT ( Compteur = Val TxCMPR)); Période match: TxPINT ( Compteur = Val (TxPR)); Programmation des Timers 3 modes de fonctionnement sont possibles: Mode 1: « Continuous up » Signaux asymétriques Mode 2: « Continuous up / down » Signaux symétriques Mode 3: « Directional up /down » Signaux asymétriques TxCMPR TxPWM Mode asymétrique Mode symétrique TxCMPR TDIRA/B Mode 3: « Directional up /down » Programmation des Timers Valeur du registre TxPR ou Valeur du registre TxCMPR Mode 1 Mode 2 (Valeur réelle/THCPU) -1 Valeur réelle /(2.THCPU) Programmation des Timers Exemple: Timer1 en mode asymétrique Période = 200 ns, soit 8*25 ns et Niveau comparaison: 100 ns, soit 4*25 ns Configuration des Timers Timer1 en mode asymétrique: Période 8*25 ns Niveau comparaison:4*25 ns T1PR = 8-1=7 T1CMPR = 4-1=3 GPTCONA = 0000 0000 0100 0010 b polarité de la sortie: Active High sorties des 2 Timers valides T1CON = 1001 0000 0100 0010 b Validation du mode comparaison Recharge registre T1CMPR si compt.=0 Horloge interne Timer1 valide: démarrage Timer1 Mode continuous-up opération non affectée par l’arrêt de l’émulation Configuration des Timers Code assembleur: Timer1 en mode asymétrique GPTCONA T1CNT T1CMPR T1PR T1CON .set .set .set .set .set 7400h 7401h 7402h 7403h 7404h LDP SPLK SPLK SPLK SPLK SPLK #0E8h #0042h,GPTCONA #0007h,T1PR #0003h,T1CMPR #0000h,T1CNT #9042h,T1CON Configuration des Timers Timer1 en mode symétrique: Période 4*2*25 ns Niveau comparaison: 2*2*25 ns T1PR = 4 T1CMPR = 2 T1CNT = 0 GPTCONA = 0000 0000 0100 0010 b polarité de la sortie: active high sorties des 2 Timers valides T1CON=1000 1000 0100 0010 b Validation du mode comparaison Recharge registre T1CMPR si compt.=0 Démarre Timer1 Horloge interne Mode continuous-Up/Down opération non affectée par l’arrêt de l’émulation Configuration des Timers Code assembleur: Timer1 en mode symétrique GPTCONA T1CNT T1CMPR T1PR T1CON .set .set .set .set .set 7400h 7401h 7402h 7403h 7404h LDP SPLK SPLK SPLK SPLK SPLK #0E8h #0042h,GPTCONA #0004h,T1PR #0002h,T1CMPR #0000h,T1CNT #8842h ,T1CON Gestion des sorties PWM 3 Unités de comparaison par module: • compare units 1,2 et 3 dans EVA : Base de temps Timer1 • compare units 4,5 et 6 dans EVB : Base de temps Timer3 Chaque unité est associée à 2 sorties PWM : 2x 6 sorties PWM Les registres de contrôle des sorties PWM EVA CMPR1 CMPR2 CMPR3 COMCONA ACTRA EVB CMPR4 CMPR5 CMPR6 COMCONB ACTRB Programmation des sorties PWM avec un temps mort «Compare Action Control Register» ACTRA 15 14 13 12 11 10 9 8 SVRDIR D2 D1 D0 CMP6ACT1 CMP6ACT0 CMP5ACT1 CMP5ACT0 7 6 5 4 3 2 1 0 CMP4ACT1 CMP4ACT0 CMP3ACT1 CMP3ACT0 CMP2ACT1 CMP2ACT0 CMP1ACT1 CMP1ACT0 Bit 15 : sens de rotation de la MLI (PWM) vectorielle Bits 14-12 : définissent la position des vecteurs tension en MLI vectorielle Bits 11-0 : définissent les polarités des sorties PWM Programmation du circuit PWM avec un temps mort Registre de contrôle du mode comparaison COMCONA 15 CENABLE 14 CLD1 13 CLD0 12 SVENABLE 7 6 5 4 11 ACTRLD1 3 Réservés 10 ACTRLD0 9 FCOMPOE 8 SCOMPOE 2 1 0 Bit 15 : permet de valider l’opération comparaison Bits 14-13 : définissent les conditions de chargement du registre CMPRx Bit 12 : validation du SVPWM (PWM vectorielle) Bits 11-10 :définissent les conditions de chargement du registre ACTR Bit 9 : valident les sorties PWM Bit 8 : Etat de la broche PDPINTA Bit 7-0 : Réservés Programmation du circuit PWM avec un temps mort Le temps mort est nécessaire pour éviter les court-circuits dans les structures en pont des onduleurs: Registre de contrôle du temps mort DBTCONA 15-12 Réservés 7 EDBT3 6 EDBT2 5 EDBT1 4 DBTPS2 11 DBT3 10 DBT2 3 DBTPS1 2 DBTPS0 9 DBT1 1-0 Réservés Bits 15-12: Réservés Bits 11 -8 : permet de définir la valeur du temps mort Bit 7 : Validation du temps mort pour PWM5 et PWM6 Bit 6 : Validation du temps mort pour PWM3 et PWM4 Bit 5 : Validation du temps mort pour PWM1 et PWM2 Bits 4-2 : Diviseur de fréquence 000 = x /1 001 = x /2 010 = x /4 011 = x /8 Bits 1-0 : Réservés 100 = x /16 101 = x /32 110 = x /32 111 = x /32 x: Fréquence du CPU 8 DBT0 Programmation du circuit PWM avec un temps mort Si DBTCONx [11-8] = m DBTCONx [4-2] correspond à x /p DBTCON[4-2] p DBTCON[11-8] m 0 110 (p =32) 0 100 (p=16) 0 011 p=(8) 0 010 (p = 4) 0 001 (p =2) 0 000 (p = 1) 0 1 0,8 0,4 0,2 0,1 0,05 0,025 2 1,6 0,8 0,4 0,2 0,1 0,05 3 2,4 1,2 0,6 0,3 0,15 0,075 4 3,2 1,6 0,8 0,4 0,20 0,1 5 4 2 1 0,5 0,25 0,125 6 4,8 2,4 1,2 0,6 0,3 0,15 7 5,6 2,8 1,4 0,7 0,35 0,175 8 6,4 3,2 1,6 0,8 0,40 0,2 9 7,2 3,6 1,8 0,9 0,45 0,225 A 8 4 2 1 0,5 0,25 B 8,8 4,4 2,2 1,1 0,55 0,275 C 9,6 4,8 2,4 1,2 0,6 0,3 D 10,4 5,2 2,6 1,3 0,65 0,325 E 11,2 5,6 2,8 1,4 0,7 3,35 F 12 6 3 1,5 0,75 0,375 temps mort en ms mx. p .106 x 40MHz Circuits PWM associés aux Unités de comparaison COMCONA [11-13] COMCONA [9] Géné Scie Sym / Asym Comparaison MUX Unité Temps mort Logique de sorties DBTCONA ACTRA dead-band timer control register Compare action registre SVPWM ACTRA [12-15] COMCONA [12] PWM1 à PWM6 Programmation des sorties PWM avec un temps mort: Module EVA Procédure de programmation: - charger le registre - charger le registre - charger le registre - initialiser les registres - charger le registre - charger le registre - charger les registres T1PR ACTRA DBTCONA CMPR1,2,3 COMCONA T1CON CMPR1,2,3 pour démarrer l’opération avec les bonnes valeurs Programmation des sorties PWM avec un temps mort: Module EVA PWM en mode symétrique 2 signaux PWM par unité de comparaison Base de temps utilisé: Timer1 Exemple: Période 250ns = 5*2*25 ns, Temps mort = 25 ns ACTRA = 0000 0110 0110 0110 b sortie 1: active high sortie 2: active low DBTCONA = 0000 0001 1110 0000b Prescaler = x/1 Validation temps mort pour les 3 phases Temps mort = 25 ns Programmation des sorties PWM avec un temps mort: Module EVA CMPR1 = 3h CMPR2 = 2h CMPR3 = 4h COMCONA = 1000 0010 0000 0000 b Validation sorties PWM Chargement registres ACTR quand T1CNT=0 Chargement registres CMPRx quand T1CNT=0 Validation de l’opération comparaison T1PR = 5h T1CNT = 0h T1CON = 8842h Programmation des sorties PWM avec un temps mort: Module EVA Code assembleur: Timer1 en mode symétrique GPTCONA T1CNT T1PR T1CON COMCONA ACTRA DBTCONA T1CON CMPR1 CMPR2 CMPR3 .set .set .set .set .set .set .set .set .set .set .set 7400h 7404h 7403h 7404h 7411h 7413h 7415h 7404h 7417h 7418h 7419h LDP SPLK SPLK SPLK SPLK SPLK SPLK SPLK SPLK SPLK #00E8h #0666h,ACTRA #01E0h,DBTCONA #3h,CMPR1 #2h,CMPR2 #4h,CMPR3 #8200h,COMCONA #5h,T1PR #0h,T1CNT #8842h ,T1CON Valeurs des registres comparaison. Valeur du Timer Temps mort PWM1 Active high PWM2 Active low PWM3 Active high PWM4 Active low PWM5 Active high PWM6 Active low Circuit QEP « quadrature Encoder Pulse » pour EVA • Utilisé pour décoder et compter les impulsions aux entrées QEP1 et QEP2 (EVA) ou QEP3 et QEP4 (EVB) Position & vitesse • Prévu pour être interfacé avec un codeur incrémental ( mesure de position) • Base de temps: Timer2 pour EVA et Timer4 pour EVB • Les Timers doivent être programmés en mode « Directional up /down » CLKIN CLKOUT Prescaler Timer2 T2CON[4,5] TDIRA T2CON[8,9,10] CLK DIR QEP Decoder logic CLKOUT CAPCONA[13,14] 2 2 2 Capture Units1,2 CAP1/ QEP1 CAP2/ QEP2 Circuit QEP « quadrature Encoder Pulse » CLK QEP1 QEP2 Décodeur logique Compteur T2CNT Direction La programmation du circuit nécessite les registres: • T2PR ou T4PR • T2CON ou T4CON • CAPCONA ou CAPCONB K Gestion des interruptions Le LF2407 dispose de: -2 signaux externes non masquables: RS et NMI -6 interruptions masquables INT1, INT2,...., INT6 -3 instructions pour le déclenchement logiciel des interruptions: INTR, NMI et TRAP - Les interruptions INTx sont activées par des sources issues des EVA et EVB - Ces sources sont organisées en 3 groupes A,B et C Les interruptions de EVA Groupe A B C Source d’interruption Description CMP1INT CMP2INT CMP3INT T1PINT T1CINT T1UNINT T1OFINT Compare unit 1 Compare unit2 Compare unit 3 Timer 1 period Timer 1 compare Timer 1 underflow Timer 1 overflow T2PINT T2CINT T2UNINT T2OFINT Timer 2 period Timer 2 compare Timer 2 underflow Timer 2 overflow CAP1INT CAP2INT CAP3INT Capture unit 1 Capture unit 2 Capture unit 3 Interruption INTx Les interruptions de EVB Groupe A INT2 INT3 INT4 B C Source d’interruption Description CMP4INT CMP5INT CMP6INT T3PINT T3CINT T3UNINT T3OFINT Compare unit 4 Compare unit5 Compare unit 6 Timer 3 period Timer 3 compare Timer 3 underflow Timer 3 overflow T4PINT T4CINT T4UNINT T4OFINT Timer 4 period Timer 4 compare Timer 4 underflow Timer 4 overflow CAP4INT CAP5INT CAP6INT Capture unit 4 Capture unit 5 Capture unit 6 Interruption INTx INT2 INT3 INT4 Gestion des interruptions Registre Drapeau Registre Masque EVAIFRA EVAIMRA EVAIFRB EVAIMRB EVAIFRC EVAIMRC EVBIFRA EVBIMRA EVBIFRB EVBIMRB EVBIFRC EVBIMRC Gestionnaire d’évènement EVA EVB Les masques d’interruption de EVA EVAIMRA 15-11 10 9 8 7 6-4 3 2 1 0 Réserves T1OFINT T1UFINT T1CINT T1PINT Réservés CMP3INT CMP2INT CMP1INT PDPINT A EVAIMRB 15-4 3 2 1 0 Réserves T2OFINT T2UFINT T2CINT T2PINT EVAIMRC 15-3 2 1 0 Réserves CAP3INT CAP2INT CAP1INT IMR 15-6 5 4 3 2 1 0 Réservés INT6 INT5 INT4 INT3 INT2 INT1 Gestion des interruptions Pour autoriser les interruptions de manière globale: CLRC INTM ; armement du mécanisme des ITs pour toutes ; les sources masquables Pour les inhiber: SETC INTM ; désarmement du mécanisme des ITs ADC Module Block Diagram (dual sequencer mode) Analog MUX Result MUX ADCINA0 ADCINA7 12-bit A/D Converter S/H MUX ADCINB0 ADCINB1 RESULT0 RESULT1 S/H A ... MUX B S/H B Result Select Sequencer Arbiter SOC1/ EOC1 ADCINB7 MAX_CONV2 CHSEL00 (state 0) CHSEL01 (state 1) CHSEL02 (state 2) CHSEL08 (state 8) CHSEL09 (state 9) CHSEL10 (state 10) CHSEL07 (state 7) Start Sequence Trigger ... (ADCSOC) MAX_CONV1 ... Software EVA Ext Pin SEQ2 Autosequencer CHSEL15 (state 15) Start Sequence Trigger RESULT7 RESULT8 RESULT9 SOC2/ EOC2 SEQ1 Autosequencer ... MUX A Result Select ... ... ADCINA1 RESULT15 Software EVB Convertisseur Analogique Digital ADC Les registres nécessaires à la programmation: • ADCTRL1 • ADCTRL2 • MAXCONV • CHSELSEQ1 • CHSELSEQ2 • CHSELSEQ3 • CHSELSEQ4 • RESULT0 ……RESULT15 Bits15-12 Bits11-8 Bits7-4 Bits3-0 3 2 3 2 CHSELSEQ1 x 12 7 6 CHSELSEQ2 x x x x CHSELSEQ3 x x x x CHSELSEQ4 Exemple de mesure d’un courant via l’ADC + DC_BUS -0.15 V < Vin < +0.15 V PWM1 0 V < VADCin < +3.3 V A R PWM2 Vin R + Shunt resistor GND TMS320F2407 2R ADCINx VCCA Int resultADC; 3.3 v VSSA resultADC = ADCRESx ^ 0x8000; Vin ADCRESx Data Mem Signed Q15 0.15 0 -0.15 1111|1111|1100|0000 0111|1111|1100|0000 0000|0000|0000|0000 0111|1111|1100|0000 1111|1111|1100|0000 1000|0000|0000|0000 +0.999023 -0.000977 -1.000000 Convertisseur Analogique Digital ADC Les tensions d' entrée V 3,3 V ADCIN Le convertisseur étant sur 10 bits, le résultat de la conversion est: V ADCIN Valeur numérique 1023 3,3 Gestion des convertisseurs A/N (ADC) Les registres résultats RESULTx 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0 0 0 Bit 15-6 : résultat de la conversion sur 10 bits Lecture du résultat d’une conversion En assembleur LACC SACH RESULTx,10 variable ; décalage de 10 bits à gauche pour récupérer le résultat ; récupérer la partie haute de l’accu. En langage C unsigned int tmp; Float entree=0.0; tmp = RESULTx > 6 entree=((float)tmp/1023.0)*3.3 /* Programmation d’une interruption avec le Timer2 */ IMR 15-6 Réservé 5 4 3 INT6 INT5 INT4 2 1 0 INT3 INT2 INT1 IFR Réservé INT6 INT5 INT4 INT3 INT2 INT1 EVAIMRB 15-4 Réservé 3 2 1 0 T2OFINT T2UFINT T2CINT T2PINT Codage des nombres • Représentation en complément à 2: Soit X un nombre codé sur N bits en complémént à 2 X bN-1 bN-2 ............. i=N-2 X= -2N-1.bN-1 avec: + bi.2i i=0 bN-1= 0 si X > 0 bN-1= 1 si X < 0 Xmax = 2N-1 -1 Xmin = - 2N-1 b1 b0 Codage des nombres • Addition de 2 nombres de N bits • Produit de 2 nombres de N bits Résultat nécessite 2N-1 bits Résultat sur N+1 bits au moins • Le registre produit est sur 2N bits: Les 2 bits de poids fort sont identiques Le MSB est inutile: Décaler le résultat d’un bit à gauche (PM) Codage des nombres • Représentation en virgule fixe: On utilise le terme «Format Qk» : K bits après la virgule Si X est codé sur N bits en format Qk. X bN-1-K Partie entière bN-2-K ..... b1 b0 b-1 Partie fractionnaire b-2 ....... b-K X = - bN-1-K.2N-1-K + bN-2-K.2N-2-K +......... + b0 + b-1.2-1 +......+ b-K.2-K Erreur < 2-K Pour éviter de traiter les puissances négatives, on multiplie X par 2K. Cela correspond à la représentation de l’entier Y tq Y= round ( X.2K) Codage des nombres • Représentation en virgule fixe: Valeurs extrêmes Exemples : Xmax = 2N-1-K - 2-K Xmin = - 2N-1-K | Xmin | = 2-K 110 10001 en format Q5 sur 8 bits soit: -22+21+2-1+2-5 = -4+2+0.5+0.0312 5= -1.46875 Représentation sur 8 bits en format Q5 Nombre réel 1/3 sqrt(2) Format Q5 000 01011 001 01101 011 00101 100 00000 Equivalence 0,34375 1,40625 3,15625 4 Erreur 0,0104166 0,0079635 0,0146573 0,02 Erreur en % 3,125 0,563 0,466 0,5 Codage des nombres • Addition: Aligner les parties entières et les parties décimales • Multiplication: Le produit de 2 nombres sur N bits donne un résultat sur 2N bits Les 2 bits de poids forts sont identiques ( bits de signe) Seuls 2N-1 bits sont nécessaires pour le résultat • Produit de 2 nombres en formats différents: QK1 x QK2 : Résultat en QK1+K2 Si on souhaite un résultat en format QK3 , on doit effectuer: - un décalage vers la droite de K1+K2-K3 - ou un décalage vers la gauche de 16 - (K1+K2-K3 ) Codage des nombres Exemple: soit la multiplication suivante: I.cos Avec: I =0.816 cos =0.5 Format Q12 Format Q12 I = 0.816 x 212=3342 d D0E h cos = 0.5 x 212=2048 d 800 h D0E h x 800 h = 687 000 h au format Q24 Résultat en Q12: • Décalage à droite de 24-12=12 et prendre la partie basse • ou décalage à gauche de 16-( 24-12)=4 et prendre la partie haute 687 000 h après décalage : 0000 0110 1000 0111 b 0.4079589844 alors que I.cos = 0.816 x 0.5 = 0.408 Codage des nombres Calcul en virgule fixe Adresses Valeurs Multiplication de 2 nombres en format Q15 ad_début Val1 Val2 Val3 Val4 ... ... ad_donnée ad_résultat Val xxxx LAR MAR LT MPY PAC SACH AR1, #ad_début ; AR1= adresse de Val1 *, AR1 ; Choix de AR1 comme pointeur ad_donnée ; Treg =Val = valeur pointée par ad_donnée * ; Preg = Treg x Val1: Q30 sur 32 bits ; Transfert de Preg dans l’accu. ad_résultat,1 ; Décalge du résultat de 1 bit à gauche ; et stockage de la partie haute de l’accu ; dans ad_résultat. Résultat en Q15[31...16] Codage des nombres Calcul en virgule fixe: Multiplication de 2 nombres en format Q15 et Q13 Valeurs du tableau en format Q13 Contenu de l’adresse ad_donnée en format Q15 Adresses début Le résultat sera en Q28 sur 32 bits. Pour ramener le résultat en Q15 il faut diviser par 213 et ne conserver que les bits de poids faibles ou multiplier par 23 et ne conserver que les bits de poids forts c-à-d effectuer un décalage de 3 bits à gauche Valeurs en Q13 Val1 Val2 Val3 Val4 ... ... ... Codage des nombres 31 30 29 28 27-24 23-20 19-16 15-12 11-8 7-4 3-0 Preg 16 bits de poids forts 31 30 29 28 27-24 23-20 16 bits de poids faibles 19-16 15-12 11-8 7-4 3-0 Preg 16 bits de poids forts LAR MAR LT MPY PAC SACH AR1, # ad_début *, AR1 ad_donnée * ad_résultat ,3 16 bits de poids faibles ; AR1= adresse de Val1 ; Choix de AR1 comme pointeur ; Treg = valeur pointée par ad_donnée ; Preg = Treg x Val1: Q30 sur 32 bits ; Transfert de Preg dans l’accu. ; Décalge du résultat de 3 bit à gauche ; et stockage de la partie haute de l’accu ; dans ad_résultat. Résultat en Q15[31...16]