Conception d'un terminal de surveillance de la qualité de l'énergie basé sur la puce DSP TMS320F2812

Mise à jour : 12 décembre 2023
Le DSP (Digital Signal Processor) est de plus en plus utilisé dans les applications d'ingénierie d'aujourd'hui. Il y a trois raisons principales à cela : Premièrement, il possède de puissantes capacités de calcul, capables de divers algorithmes de traitement de signal numérique tels que la FFT et le filtrage numérique ; Deuxièmement, les principaux fabricants de DSP ont conçu des IDE associés (développement intégré) pour leurs produits. Environment), qui rend le développement d'applications DSP encore plus puissant ; troisièmement, il a des performances de coût élevées et est absolument compétitif avec ses performances puissantes et son prix bas.

TI a conçu l'environnement de développement visuel intégré CCS (CodeComposerStudio) pour le DSP de l'entreprise, et DSP/BIOS est une partie importante de CCS. Il s'agit essentiellement d'un noyau de système d'exploitation en temps réel basé sur la plate-forme DSP de la série TMS320, et constitue également un élément essentiel du logiciel en temps réel de TI. sans souci-Technologie eXpressDSP. DSP/BIOS comprend principalement trois aspects : noyau multithread, outil d'analyse en temps réel, bibliothèque de configuration des périphériques.

1 Configuration système requise

La fonction principale du terminal de surveillance de la qualité de l'énergie est de surveiller et d'analyser la qualité de l'énergie du réseau électrique (Trois phases Tension et courant) en temps réel. Les principales variables de surveillance sont : la valeur efficace de la tension et du courant, la puissance active et réactive, la fréquence de tension, le déséquilibre triphasé, chaque taux de contenu de tension et de courant harmonique, le facteur de puissance, le facteur de puissance de déphasage, la fluctuation de tension, le temps long, le scintillement pour un court instant.

Le système sélectionne la puce DSP haute performance de TI TMS320F2812 comme cœur de traitement, et sa vitesse de traitement de 150 MIPS est suffisante pour répondre aux exigences en temps réel du système. Selon les exigences du système, le système est divisé en modules fonctionnels suivants : autovérification guidée module, module d'exécution de tâches de collecte, module de prétraitement des données de qualité d'énergie, module d'opération d'analyse de qualité d'énergie, module de stockage de données, module de communication et module d'interaction homme-machine.

Selon la méthode de programmation traditionnelle, ces modules fonctionnels seront organisés ensemble dans une structure séquentielle, et les appels et commutations entre modules sont complétés par le code de chaque module, de sorte que les modules de l'application sont dans un état couplé. Si vous souhaitez ajouter un nouveau module de fonction ou modifier un module de fonction existant, non seulement le code d'appel du module associé doit être modifié, mais le nouveau module affectera également évidemment les caractéristiques de réponse temporelle du système d'origine, rendant la mise à niveau et entretien assez gênant.

L'émergence du DSP/BIOS fournit un autre mécanisme pour organiser les modules fonctionnels des programmes d'application. Il traite chaque module fonctionnel comme un thread de tâches. Grâce au service noyau configurable, chaque thread de tâche multiplexe les ressources CPU en fonction de la priorité du planificateur système. Chaque thread de tâche transmet la synchronisation, la communication et l'échange de données, etc. sont coordonnés. Ce mécanisme améliore la maintenabilité de l'application et fournit un moyen de test plus pratique et avancé. Selon les caractéristiques ci-dessus, ce système adopte DSP/BIOS comme noyau temps réel et conçoit l'ensemble du système sur cette base.

La figure 1 montre la classification des modules fonctionnels du système sous DSP/BIOS.

2 Conception logicielle basée sur DSP/BIOS

2.1 Planification des threads d'exécution

Dans le fonctionnement en temps réel du système, certaines fonctions sont pilotées par des signaux de commande externes ou exécutées pendant une période prédéterminée. Par conséquent, le mode de pilotage et la période d’exécution de la fonction sont très importants pour le système temps réel. DSP/BIOS prend en charge les applications multithread et les threads peuvent être définis comme des priorités différentes.

Les threads de haute priorité peuvent interrompre les threads de faible priorité, et les interactions entre différents threads, telles que le blocage, la communication et la synchronisation, sont divisées en 4 types suivants (priorité de haut en bas) : interruption matérielle (HWI), interruption logicielle ( SWI), tâche (TSK), fil de discussion en arrière-plan (IDL). Selon les exigences fonctionnelles du système de terminal de surveillance de la qualité de l'énergie, les modules de sous-fonctions du système sont divisés en 4 types de threads ci-dessus.

Tout d’abord, planifiez le thread d’interruption matérielle (HWI). Dans des circonstances normales, le code de programme principal du système est placé dans l'interruption ou la tâche logicielle ; cependant, le code de programme du module fonctionnel qui est étroitement lié au périphérique externe et nécessite des performances en temps réel élevées doit être placé dans l'interruption matérielle.

Conformément aux exigences ci-dessus, le système définit les sous-modules de fonction suivants comme threads d'interruption matérielle : module de tâche d'acquisition A/D et module de communication (réception). L'acquisition A/D est une base importante de ce système, et elle est étroitement liée au matériel sous-jacent du système, elle est donc définie comme un thread d'interruption matérielle (HWI).

Le processus principal est le suivant : la puce A/D collecte des données en temps réel du réseau électrique à une certaine fréquence, puis communique avec le port McPSP du DSP. Le DSP reçoit les données collectées par la puce A/D et les stocke dans une zone spécifique de la RAM intégrée pour préparer le fonctionnement d'autres threads. Le module de communication utilise RS485 pour communiquer avec l'ordinateur hôte, ce qui est étroitement lié au matériel sous-jacent du système, et l'interface SCI du DSP elle-même n'a qu'un FIFO avec un maximum de 16 mots. Si les données reçues ne sont pas traitées à temps, les données seront perdues.

Ce qui suit décrit les réglages des paramètres du module HWI dans DSP/BIOS. L'interruption de réception du port série McBSP est placée dans la position HWI_INT6 du module HWI, et la fonction ISR ad_rx_isr() de l'interruption de réception est remplie dans l'élément d'appel de fonction de l'interruption HWI_INT6 ; en même temps, choisissez d'utiliser la fonction de planification HWI de DSP/RI-OS, lorsque vous répondez à McBSP. Lorsque le port série reçoit une interruption, le système appellera automatiquement la fonction ad_rx_isr(). Le paramètre d'interruption de réception du port série McBSP est illustré à la figure 2.

Semblable au réglage de l'interruption de réception du port série McBSP, l'interruption de réception SCIA est définie comme interruption de réception de communication et sa fonction ISR scia_rx_isr() est renseignée dans l'élément d'appel de fonction de l'interruption HWI_INT9. En répondant à l'interruption de réception, le système appelle la fonction scia_rx_isr() pour le traitement. Le thread CLK est également l'un des threads d'interruption matérielle HWI. Il fournit une référence temporelle pour le fonctionnement de l'ensemble du système, fournit une méthode permettant aux utilisateurs d'appeler périodiquement des fonctions et fournit une référence temporelle pour certains outils d'évaluation de code. Le module CLK s'appuie entièrement sur l'interruption de minuterie du DSP. Le TMS320C2812 fournit 2 minuteries pour le DSP/BIOS.

Deuxièmement, organisez le thread d’interruption logicielle (SWI). Toutes les interruptions logicielles sont initiées via l'appel API du noyau DSP/BIOS. Afin de faciliter le contrôle, le système définit une boîte aux lettres de 16 bits (Mailbox) pour chaque objet SWI, qui peut être utilisée pour démarrer conditionnellement la boîte aux lettres correspondante. Interruption du logiciel. Les modules de sous-fonctions qui sont plus importants que les tâches ordinaires et qui se produisent fréquemment peuvent être organisés dans le thread d'interruption logicielle (SWI). Ses modules de sous-fonctions comprennent : un module de prétraitement des données sur la qualité de l'énergie, un module de communication (envoi).

Le module de prétraitement des données sur la qualité de l'énergie complète principalement le traitement ultérieur des résultats de la conversion A/D. Il est nécessaire de prétraiter le résultat de la conversion A/D. Étant donné que la puce A/D sélectionne une fréquence fixe pour l'acquisition, mais que la fréquence fo du réseau électrique fluctue, l'exécution directe d'opérations FFT sur les données acquises entraînera une fuite de spectre. Les données acquises doivent donc être prétraitées. Par exemple, une opération FFT de 1024 1024 points est effectuée sur un total de 256 4 données de 4 points pour chacun des 4 cycles. En supposant que la fréquence moyenne de 4 cycles est f, la résolution en fréquence est f/2, et les résultats de l'opération FFT sont f/4, 3f/4, 5f/4, f, XNUMXf/XNUMX… l'intensité sur la fréquence. Par conséquent, lorsque la fréquence fo du réseau électrique change, la fréquence des données du réseau électrique f pour le calcul FFT change également en conséquence, de sorte que la fréquence des données du réseau électrique f avant le calcul FFT soit toujours cohérente avec la fréquence fo du réseau électrique actuelle.

L'opération spécifique du module de prétraitement des données de qualité d'énergie consiste à interpoler les données après la conversion A/D, et l'algorithme d'interpolation utilise une interpolation linéaire. Après vérification, sous tension nominale, l'erreur de fonctionnement FFT provoquée par l'algorithme d'interpolation linéaire est comprise entre 0 et 1‰. De plus, une autre fonction du module est de calculer la valeur efficace de la tension au cours d'un cycle. Il s'agit des données nécessaires au calcul des fluctuations de tension et du scintillement à long terme et à court terme. Le module de communication (envoi) est chargé d'envoyer les données à l'ordinateur supérieur. Bien que ses exigences en temps réel ne soient pas élevées, il est étroitement lié à la couche inférieure du matériel, il est donc défini comme un thread d'interruption logicielle.

Lorsque l'interruption de réception du port série se produit, appelez la fonction scia_rx_isr() pour traiter la commande de données reçue et envoyez les données de qualité d'énergie correspondantes conformément à la commande associée. DSP/BIOS fournit une priorité de 0 à 14 pour l'objet d'interruption logicielle. Selon l'importance du thread ci-dessus, la priorité du thread de traitement des données de collecte est définie sur 14, le thread de communication hôte est défini sur 8 et d'autres priorités sont réservées aux futures mises à niveau logicielles.

Il convient de noter que les threads d'interruption (y compris les interruptions matérielles et les interruptions logicielles) s'exécutent tous sur la même pile. Lorsqu'une interruption de haute priorité se produit et amène le système à changer de tâche, le thread d'interruption de haute priorité interrompra le thread d'interruption de basse priorité ; avant d'exécuter le thread d'interruption de haute priorité, le contenu du registre pertinent du thread d'interruption de basse priorité sera enregistré et l'interruption de haute priorité après l'exécution du thread, le registre sera restauré à son contenu d'origine et continuera à compléter l'original thread de faible priorité.

Par conséquent, si trop d'interruptions matérielles ou de threads d'interruption logicielle sont définies, la pile débordera. Pour cette raison, la plupart des modules de tâches doivent être placés dans des threads de tâches. Ensuite, planifiez le thread de tâche (TSK). Comme la plupart des systèmes temps réel, les threads de tâches constituent le composant principal de l’ensemble du système. Les fonctions des threads de tâches peuvent s’exécuter indépendamment ou en parallèle. Le module de gestion des tâches DSP/BIOS organise le fonctionnement en fonction de la priorité du thread de tâche et complète la conversion d'une tâche à une autre via la fonction de commutation.

Chaque tâche a 4 états d'exécution : exécutée, prête, bloquée et terminée. La mission de janvier est créée, et elle se déroule toujours dans l'un des quatre états. DSP/BIOS fournit une priorité de -l à 15 pour chaque objet de tâche. Les tâches seront exécutées dans un ordre de priorité strict, les tâches ayant la même priorité seront classées dans l'ordre d'exécution selon le principe du « premier arrivé, premier servi ». Il est à noter que lorsqu'un thread de tâche est créé, une pile dédiée appartenant à la tâche doit être créée en même temps. La pile est utilisée pour stocker des variables locales ou d'autres imbrications d'appels de fonction.

Nous définissons le module de calcul de l'analyse de la qualité de l'énergie, le module de stockage de données et le module d'interaction homme-machine dans le fil de tâche (TSK). Le module de calcul d'analyse de la qualité de l'énergie peut être divisé en trois parties : le fil de tâche de calcul des harmoniques, le fil de tâche de calcul des fluctuations de tension et le fil de tâche de calcul du scintillement.

Le thread de tâche de calcul des harmoniques est principalement responsable de l’exécution des opérations FFT sur les données prétraitées sur la qualité de l’énergie. L'opération FFT comprend principalement cinq parties : l'opération de conversion de bits, l'opération de fenêtrage, l'opération papillon basée sur 2, l'opération de base divisée et l'opération de somme carrée. Le fil de tâche de calcul des fluctuations de tension est chargé d’enregistrer les fluctuations de la tension du réseau dans un délai de 3 minutes. Le module de prétraitement des données de qualité d'énergie précédent a obtenu la valeur efficace de la tension pour chaque cycle.

De cette façon, il suffit d'enregistrer les valeurs maximales et minimales de la valeur efficace de la tension dans les 3 minutes, et la différence entre les deux est la fluctuation de tension. Le fil de tâches de calcul du scintillement inclut le calcul du scintillement à court terme et du scintillement à long terme. Désormais, la méthode de conception du scintillement CEI est généralement adoptée.

Le signal d'auto-vérification adaptatif d'entrée passe par le démodulateur quadratique, le filtrage pondéré passe-bande, le filtrage passe-bas carré du premier ordre et l'évaluation statistique en ligne pour finalement obtenir la valeur de scintillement ; mais cette méthode est suffisamment complexe et prend du temps. En simplifiant l'algorithme, une méthode de calcul simple et réalisable est obtenue : le calcul FFT est effectué sur la valeur de tension effective de 256 cycles consécutifs, et après une série de calculs tels que la pondération, la valeur de scintillement de 12.8 s peut être obtenue, et la la valeur de scintillement est dans les 10 minutes.

La valeur peut obtenir un scintillement à court terme après le calcul de corrélation, et 12 scintillements consécutifs de courte durée (dans un délai de 2 heures) peuvent obtenir un scintillement à long terme après le calcul. Après vérification, cet algorithme présente une erreur de 1‰ par rapport à l’algorithme du scintillement CEI.

Le module de stockage de données est également placé dans le thread de tâche, et son processus consiste à stocker les résultats d'analyse de la qualité de l'alimentation, les fluctuations de tension et les valeurs de scintillement dans FIash. Le module d'interaction homme-machine comprend deux parties : la tâche de détection du clavier et la tâche d'affichage à cristaux liquides. Le fil de tâche de détection de clavier peut être complété par la fonction périodique PRD. PRD peut déterminer le temps d'exécution de la fonction en fonction de l'horloge temps réel. Ici, configurez la tâche de détection du clavier pour qu'elle s'exécute une fois toutes les 100 ms pour détecter les frappes au clavier. Selon la condition clé, le cristal liquide l’affichage La tâche affiche les dernières données actuelles sur la qualité de l'alimentation.

Enfin, il y a le thread d'arrière-plan (IDL). Le thread d'arrière-plan (IDL) a la priorité la plus basse. Généralement, le module d'analyse en temps réel (TRA) y est placé pour s'exécuter, ce qui peut effectuer une interaction et un diagnostic en temps réel de l'application DSP lors de l'exécution de l'application. CCS dispose d'outils d'analyse en temps réel tels que le diagramme de charge du processeur, le diagramme d'exécution, le contrôle du canal hôte, l'enregistrement d'informations, l'observation statistique, la carte de contrôle en temps réel et l'observation noyau/objet. Cette série de modules fonctionnels peut être placée dans le fil IDL, grâce à ces outils, le fonctionnement de l'ensemble du système DSP sera clair en un coup d'œil.

2.2 Communication et synchronisation entre les threads

Dans ce système multithread, l'accès aux ressources partagées nécessite une coordination mutuelle entre les threads à résoudre.

Il existe trois méthodes de communication dans l'environnement DSP/BIOS, à savoir la communication basée sur le canal (PIPE), la communication basée sur le canal (SIO) et la communication basée sur le canal hôte (HST).

Le tableau 1 montre les façons dont 4 threads partagent des données et réalisent la synchronisation.

3 Analyse et débogage du système en temps réel

La surcharge du noyau DSP/BIOS lui-même aura un impact sur les performances en temps réel du programme système. Pour cette raison, le noyau DSP/BIOS doit être optimisé. Vous pouvez utiliser l'outil d'analyse DSP/BIOS fourni dans CCS pour déterminer la surcharge DSP/BIOS et la capacité de calcul de l'ensemble du système d'application. Par exemple, le diagramme de charge CPU dans l'outil d'analyse en temps réel fourni par DSP/BIOS est l'un des outils couramment utilisés.

Dans la phase d'intégration finale, en raison de l'interaction en temps réel et d'autres raisons, il y aura souvent des erreurs ou des réponses intempestives. De manière générale, parce que ces phénomènes sont non périodiques et ont une faible fréquence d'occurrence, ils sont difficiles à trouver et à suivre. Cependant, comme le module RTA du DSP/BIOS est intégré dans son noyau, combiné au vecteur de détection personnalisé fourni par le développeur, il offre une visibilité unique sur la cause première de l'erreur. Cette fonction de visualisation aide grandement à isoler et à corriger les erreurs, ce qui n'est pas disponible dans les systèmes de développement embarqués généraux.

Les performances d'exécution du programme d'application dans l'ensemble du système peuvent être améliorées à partir des quatre aspects suivants : sélectionner soigneusement le type de thread pour les différentes fonctions du programme ; placez la pile système dans la mémoire sur puce ; réduire la fréquence d'interruption d'horloge ; augmenter la taille du tampon d'entrée et de sortie du flux.

4 résumé

En tant qu'ensemble d'outils fournis par CCS, DSP/BIOS lui-même n'occupe que très peu de ressources CPU, mais il offre des performances assez élevées et accélère la progression du développement. En utilisant DSP/BIOS comme système d'exploitation en temps réel du terminal de surveillance de la qualité de l'alimentation, il est facile de contrôler les ressources matérielles lors de l'écriture de programmes DSP et de coordonner divers modules logiciels de manière flexible, ce qui accélère considérablement la progression du développement et du débogage des logiciels. L'expérience finale a prouvé que l'ensemble du système a de bonnes performances en temps réel et un fonctionnement stable et fiable.