Sub Ampli DSP

Discutions générales sur le DSPiy et tout ce qui s'y rattache
Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3523
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Sub Ampli DSP

Messagepar thierryvalk » mer. 28 oct. 2015 20:51

Après de longues heures à tenter de configurer l’ADC synchronisé sur la PWM, j’ai +- tout recommencé. :)

Le but du jeu est donc de configurer des registres pour faire fonctionner comme on le désire les périphériques de ce µC.
Pour beaucoup de ces registres, c’est du binaire.
Par exemple mettre un timer en route, on va dans la doc du µC et l’on y trouve le registre SCT control et le bit 2 qui à 1 stoppe le timer.
Capturelpc15.PNG

Il suffit de le mettre à zéro.

Mais le langage C a un très gros manque pour nos µC, il ne traite pas directement le binaire.
Il faut donc lire le registre, faire un AND sur tous les bits sauf le bit 2.
On peut prendre sa calculette de conversion ou écrire : LPC_SCT0->CTRL_U &= ~(1 << 2);
LPC_SCT0->CTRL_U indique le registre, le & avant = simplifie juste l’écriture qui correspond à LPC_SCT0->CTRL_U = LPC_SCT0->CTRL_U & ~(1 << 2);
Le ~ signal inverse et le (1<<2) signale la valeur 1 décalée à gauche de 2.
Peut paraitre compliqué, mais 1 est la valeur et 2 la position du bit, ce qui correspond à 100 en binaire soit 4 en décimal.

Évidemment c’est peu digeste lorsque l’on n’a pas l’habitude d’où l’idée de NXP de créer des lib bien plus causantes avec OpenLPC.
Voici la même chose avec OpenLPC : Chip_SCTPWM_Start(SCT_PWM);
Une simple fonction qui au final fait le même code par petits jeux de passe-passe avec le compilateur.
C’est donc tentant, mais pas pratique du tout car l’on s’éloigne complètement de la doc et l’on est très vite perdu et sans aucune maitrise de ce que l’on faire.

Bref ça fonctionne. :ghee:

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3523
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Sub Ampli DSP

Messagepar thierryvalk » mer. 28 oct. 2015 21:02

Voici la mesure du courant par l’ADC.
_MG_9983.JPG

En bas sortie du capteur, c’est bien bruité avec plein de résidus du 100KHz de la PWM.
En haut le signal lu par l’ADC de manière synchrone à 100KHz, moyennée pour ressortir sur le DAC à 10KHz de fréquence de sampling.
C’est toujours bien bruité, mais je pense que cela vient en très grande partie que tout est bruité vu que j’ai des fils dans tous les sens.

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2908
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: Sub Ampli DSP

Messagepar alka » mer. 28 oct. 2015 21:33

bah du bruit au dessus de 10kHz pour un sub, tu même le laisser. le HP filtrera ;)
acheter un DSPiy ? c'est ici

louisr
Messages : 457
Enregistré le : mar. 14 juil. 2015 15:52
Localisation : Bordeaux/Poitiers

Re: Sub Ampli DSP

Messagepar louisr » jeu. 29 oct. 2015 12:29

Super :super:
La suite c'est quoi ? :mrgreen:

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3523
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Sub Ampli DSP

Messagepar thierryvalk » jeu. 29 oct. 2015 12:45

Bonne question :-/

Un peu voir ce qu'il est possible de faire au niveau CR et disposer de quelques routines pouvant faire un peu de tout.
Faudra par exemple aussi lire l'I2S.

Après il faudrait bien faire un proto pour avoir moins de problèmes de bruits en tous sens.

louisr
Messages : 457
Enregistré le : mar. 14 juil. 2015 15:52
Localisation : Bordeaux/Poitiers

Re: Sub Ampli DSP

Messagepar louisr » jeu. 29 oct. 2015 13:06

D'ailleurs je ne me rappelle plus ce qui a été choisi pour la conversion I2S --> PWM ?

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3523
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Sub Ampli DSP

Messagepar thierryvalk » jeu. 29 oct. 2015 16:33

C'est aussi le rôle du µC.
Je pense partir sur l'interface SPI + une GPIO pour le LRCLK.
En fait je devrais voir comment adapter le SPI à l'I2S et au besoin je peux modifier l'I2S coté DSPiy.

louisr
Messages : 457
Enregistré le : mar. 14 juil. 2015 15:52
Localisation : Bordeaux/Poitiers

Re: Sub Ampli DSP

Messagepar louisr » jeu. 29 oct. 2015 16:41

Ok !
Tu as beaucoup de liberté sur le I2S côté dspiy, à part Left-Justified ou Right-Justified ?

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3523
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Sub Ampli DSP

Messagepar thierryvalk » jeu. 29 oct. 2015 17:02

Oui, la polarité des horloges, définir LRCLK comme en I2S à 1 pour un canal et à 0 pour l'autre ou par pulse et aussi la longueur des datas 16,24 ou 32 bits.

louisr
Messages : 457
Enregistré le : mar. 14 juil. 2015 15:52
Localisation : Bordeaux/Poitiers

Re: Sub Ampli DSP

Messagepar louisr » jeu. 29 oct. 2015 17:12

Par rapport au LRCLK, comment ça se passe en I2S pour du mono canal ? Car ça sera le cas pour un caisson, non ? Le LRCLK reste le même et un coup on envoie des datas, et quand LRCLK change on envoie rien ?

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3523
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Sub Ampli DSP

Messagepar thierryvalk » jeu. 29 oct. 2015 17:26

Je pense, oui.
L'I2S n'est pas prévu pour du mono donc pas trop de choix.

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3523
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Sub Ampli DSP

Messagepar thierryvalk » jeu. 29 oct. 2015 18:46

Maintenant que j'ai un retour du signal de sortie, faut en faire quelque chose.

voici le code, rien de bien compliqué :

Code : Tout sélectionner

ns=nsample; //sauve nsample
            nsample=0;

            Generate_Sine (&Tone);
            signal=tval>>16;

            if(signal==0)Chip_GPIO_SetPinToggle(LPC_GPIO, 1, 9);//trigger

            v=0;
            for(n=1;n<ns-1;n++) v=v+ADC_DR_RESULT(rawSample[n]);//add samples de 2 à n-1

            v=v/(ns-2);//moyenne

            imesure=2048-v;//enlève offset adc

            val=signal*5-imesure;
            signal=signal+val/6;

            signal=signal+360;//rajoute offset

               //  dutycycle
            LPC_SCT0->MATCHREL[1].U  =signal;
            LPC_SCT0->MATCHREL[2].U  =signal;

            Chip_DAC_UpdateValue(LPC_DAC, val*6+2048);


Ce qui donne :
avec cr.JPG


contre ceci sans correction :
sans cr.JPG


Il y a une différence, c'est déjà un début.
En Violet la sortie sonde de courant, en jaune le signal nommé "val" et en rouge une FFT.
Le signal de base est du 100Hz, on voit bien le 300Hz qui a diminué, par contre du 200Hz à augmenté.

Des suggestions de tests avec du calcul un peu plus intelligent ?

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3523
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Sub Ampli DSP

Messagepar thierryvalk » ven. 30 oct. 2015 18:17

Merci pour les suggestions ... :happy1:

Je suis passé à plus sérieux, la PID.
Non plus une correction à la fréquence de sampling mais à la fréquence de PWM.

Voici le code de l'interrupt de l'ADC qui est synchro avec la PWM:

Code : Tout sélectionner

v=Chip_ADC_GetDataReg(LPC_ADC1, 1);
   v=2048-ADC_DR_RESULT(v);
   verreur=signal-v;

   //integrale
   if(!sature)
   {
      inte=inte+verreur;
      if(inte>intemax)inte=intemax;
      if(inte<-intemax)inte=-intemax;
   }
   //deriv
   deriv=verreur-pverreur;
   pverreur=verreur;

   //PID
   outp=(kp*verreur)/100+(ki*inte)/100+(kd*deriv)/100;

   //limiteur
   if(outp>outpmax){outp=outpmax;sature=1;}
   else if(outp<-outpmax){outp=-outpmax;sature=1;}
   else sature=0;

   //mise à +- 360
   outp=outp>>2;
   outp=outp+360;

   //pwm
   LPC_SCT0->MATCHREL[1].U  =outp;
   LPC_SCT0->MATCHREL[2].U  =outp;

   Chip_DAC_UpdateValue(LPC_DAC, verreur+2048);//pour oscillo

Il prend 2,2µS sur le 10 de disponibles.

Et un premier résultat pas si mal pour un début, le tout étant de trouver les bons coefficients de la PID.
crpid.JPG

Par contre c'est bruité, c'est une belle pointe vers 4.3kHz

Sans rapport direct, vais un peu voir au niveau des biquads ce que l'on peut faire, NXP a créer une lib pour.

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2908
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: Sub Ampli DSP

Messagepar alka » ven. 30 oct. 2015 18:46

qu'est ce que tu veux qu'on te suggère pour l'instant ? t'es toujours sur charge résistive donc pas grand chose a corriger :)

tu mesures bien le courant sur une résistance de pied ?
si oui, tu pourrais t'amuser a faire un ampli en courant.

perso, je comprend toujours pas grand chose a ton implémentation et encore moins au code. Ca manque d'un dessin pédagogique pour les noobs ;-)
acheter un DSPiy ? c'est ici

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3523
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Sub Ampli DSP

Messagepar thierryvalk » ven. 30 oct. 2015 18:55

Il y a pas mal à corriger, les imperfections de l’étage de puissance, mais aussi le fait que la PWM à une résolution de 720 points.

Pas une résistance de pied, j’avais d’ailleurs fait un dessin pédagogique, mais un capteur de courant à effet Hall. :langue2:

Sinon pas grand-chose à dessiner sur le fonctionnement, car avec un µC on fait ce que l’on veut dans les limites des mesures et des ressources.
Par exemple la PID, en analogique c’est 3 ou 4 AOP, ici les quelques lignes de code ci-dessus.

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2908
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: Sub Ampli DSP

Messagepar alka » ven. 30 oct. 2015 19:28

ah oui, le capteur effet hall j'avais oublié mais ca change rien.

j'essaie de comprendre : corrige moi si je me trompe. je fais le dessin textuel

résumé des épisodes précédents :
tu as un µC connecté a des transistors de puissance, alimentés par une alim costaud et branchés sur une résistance de puissance qui fait office de charge.
Je suppose qu'il y aun filtre analogique pour filtrer la pwm. il est commet ce filtre ?
T'as un capteur en courant (hall) qui mesure le courant qui passe dans la charge.
le µC reçoit en entrée l'info de ce capteur hall.
Il y a aussi un dac quelquepart dont je suis pas sur du role. Seulement pour les tests ?

tests :
Tes tests pour l'instant consistent a générer un sinus dans le µC, a en faire une PWM qui sort sur les transistors.
Je devine que l'oscillo montre la sinusoide générée par le µC (sort sur un dac ?) et de l'autre ce qui est présent sur la charge.
Ton code exploite le retour du capteur hall et tu fais des triturages, comme par exemple un pid.

Et tu cherches quels autres triturages tu pourrais faire.

Le pid a lui seul est un vaste domaine. Je devine que dérivée et intégration que tu utilise sont des approximations linéaires (1er degré). C'est le plus simple et ca peut suffir. Choisir les coeffs en revanche c'est tout un chapitre pour aboutir a une correction utile selon le profil des erreurs.

Pour les suggestions :
pour un sub, on a besoin
- ampli puissant, fiable et qui distord pas trop
- filtre infra
- corrections de pièce
- limiteur pour protéger le HP
- protection continu du HP
- interface utilisateur

si on veut asservir
- gérer le retour du (ou des) capteur(s) et traiter l'erreur

Implémenter des biquads est une bonne idée car utile pour plein de choses.
Calculer la valeur RMS du signal serait sans doute utile aussi.
Savoir segmenter des bandes de fréquence pour appliquer des traitements ciblés.
acheter un DSPiy ? c'est ici

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3523
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Sub Ampli DSP

Messagepar thierryvalk » ven. 30 oct. 2015 20:32

Ah mais oui mais non, je demande des solutions et voilà que tu me colle 3 mois de travail. :snif:

Le capteur effet hall n’est pas comme une résistance de pied. On est sur un pont complet et dans ce cas une résistance de pied ne mesure pas tout.

Ok avec ton résumé, oui, le DAC sert aux tests uniquement, on y met ce que l’on veut et permet de voir ce qui se passe en dynamiques sur l'oscillo.

Je suppose qu'il y aun filtre analogique pour filtrer la pwm. il est commet ce filtre ?

Le filtre en sortie du pont est une vraie misère, une self torique que j'avais et rien d'autre.
Faudrait calculer ce qu'il faut comme self et RC.

Tests : le signal sur l’oscillo est la mesure en courant (violet) et le DAC (jaune).
Pour la tension je dois prendre un autre oscillo avec entrées isolées vu que l’on est en config bridgée.
Je devine que dérivée et intégration que tu utilise sont des approximations linéaires (1er degré).

Ca veut dire quoi premier degré ?
C’est de la simple PID, calculs en nombres réels, mais je vais tester en float.
Pour le coefs, oui c’est au pif, une méthodoligie serait mieux même si pour le moment ce n’est que tester ce qui est faisable.
En math je suis + que limité, c'est là que l'appelle à l'équipe peut faire avancer vers le trésor. ;-)

Pour tes suggestions :
Un ampli puissant : en classe D, suffit de mettre des transistors quif quif coteaux.
Fiable : on en reparlera.
Qui distor pas trop : c’est bien aussi le rôle du µC et du feedback de résoudre ce problème.

Pour le reste, me semble simple et si nécessaire, comme pour la correction de la pièce, on fait appel au DSPiy.
Interface utilisateur : je sais que je peux compter sur toi.

Asservir : ce n’est qu’un feedback pris à un autre endroit en adaptant les paramètres et coefs.

Pour les biquads, oui mais pas trop, on est en cortex-M3 qui n’a pas d’instructions dédiées DSP.
Calculer le RMS me parait simple.

Segmenter des bandes de fréquences c’est de la FFT, possible, mais pas certain d’être en temps réel.

Je découvre aussi et pas trop d’idée des performances réelle ce genre de µC dans ce type d’application, c’est tout l’intérêt et le chalenge de ce projet.
Faire un max avec le moins, certainement possible si fait intelligemment.

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2908
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: Sub Ampli DSP

Messagepar alka » ven. 30 oct. 2015 21:36

j'ai a peu près compris donc et j'ai aussi compris que t'as un mois de décembre a occuper :mrgreen:

faut améliorer le filtre de sortie de l'ampli parce que ça fausse peut etre le feedback. Elle pas grande la freq pwm, faut un bon filtre et surement aussi un zobel (ce que tu appelles le RC peut etre)
TI explique tout et donne les formules de calcul : www.ti.com/lit/an/sloa119b/sloa119b.pdf


la sonde effet hall est précise ? je connais pas du tout.

l'intégration et dérivation linéaire je parle pas de la précision de calcul mais de l'approximation a une opération simple : intégration = addition et dérivée = soustraire la valeur précédente de la valeur courante. Ca revient a considérer que le bout de courbe entre les deux points est une droite. C'est acceptable vu le contexte.


Pourquoi ne pas tenter une contre réaction simple :
IN = signal entrée
RETOUR= retour de la sonde (ca marche car t'es sur une charge résistive et donc courant / tension = constante)
et tu amplifies [IN - k*RETOUR] avec k a définir.
acheter un DSPiy ? c'est ici


Retourner vers « DSPiy général »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 8 invités