Converstion simultané 2 voies DSPic et problemes de lecture

  • Auteur de la discussion marvinc
  • Date de début
M
marvinc
Nouveau
30 Oct 2009
15
Montbrison (42)
  • Auteur de la discussion
  • #1
bonjour,
Je voudrais savoir si l'ADC de mon dspic30f4012 est bien paramétré pour un échantillonnage simultané :
et deuxiemement je n'arrive pas a copié le résultat fractional dans une variable fractional

quelqu'un peut m'aider ?
 
M
MaX-MoD
Compagnon
17 Avr 2007
2 306
Annecy (74)
salut,


je n'ai jamais fait d'échantillonnage simultané sur 30F4012, (juste sur 33F, et encore juste pour tester) mais je pense qu'il te manque (au moins) le bit ALTS (ADCON2) à 1

17.8.2.1 Specifying Alternating Channel 0 Input Selections
The ALTS bit (ADCON2<0>) causes the module to alternate between two sets of inputs that are
selected during successive samples.
The inputs specified by CH0SA<3:0>, CH0NA, CHXSA and CHXNA<1:0> are collectively called
the MUX A inputs. The inputs specified by CH0SB<3:0>, CH0NB, CHXSB and CHXNB<1:0> are
collectively called the MUX B inputs. When the ALTS bit is ‘1’, the module will alternate between
the MUX A inputs on one sample and the MUX B inputs on the subsequent sample.
For channel 0, if the ALTS bit is ‘0’, only the inputs specified by CH0SA<3:0> and CH0NA are
selected for sampling.
If the ALTS bit is ‘1’, on the first sample/convert sequence for channel 0, the inputs specified by
CH0SA<3:0> and CH0NA are selected for sampling. On the next sample convert sequence for
channel 0, the inputs specified by CH0SB<3:0> and CH0NB are selected for sampling. This
pattern will repeat for subsequent sample conversion sequences.
Note that if multiple channels (CHPS = 01 or 1x) and simultaneous sampling (SIMSAM = 1) are
specified, alternating inputs will change every sample because all channels are sampled on
every sample time. If multiple channels (CHPS = 01 or 1x) and sequential sampling
(SIMSAM = 0) are specified, alternating inputs will change only on each sample of a particular
channel.
sinon tu as regardé le reference Manual de l'ADC? Et les codes examples de microchip?

dernier point pour débugger, commence par un exemple simple qui a été testé et fonctionne (code example) et modifies le peu à peu. Tu verras l'influence de chaque paramètre et tu sauras aussi exactement où se situe le problème.


Bonne soirée
Max


PS:si tu n'arrives pas à copier le résultat, c'est probablement que l'ADC n'a pas réussi de conversion.
fractional est un typedef, en fait c'est une variable 16bits entière. (valeur fractionnaire = valeur int / 32768 ou 65536 si en non signé)
Pour des valeurs entre 0-1 si je ne m'abuse il faut mettre unsigned fractional
ça doit se trouver dans la doc compilateur ça.
 
M
marvinc
Nouveau
30 Oct 2009
15
Montbrison (42)
  • Auteur de la discussion
  • #3
salut Max,

Meric pour les infos, apparement, mon pb d'échantillonnage vient de _ASAM = 1; car si je le met a 0
(il faut que je le set a chaque fin d'interrupt ADC pour relancé le sample), les valeurs de buffers et de recopie sont identiques.
Mais je vais creuser, sinon je comptais utilisé un FAN7384, entrée protection incorporé (un AOP en moins).

Pour la lecture en fractional, je tenterais de forcer le format
PID_SIN.mesuredOutput = (fractional)(ADCBUF0);

Je regarde ça demain, je ferais des copies d'oscillo pour faire voir le projet.

Thx
 
M
marvinc
Nouveau
30 Oct 2009
15
Montbrison (42)
  • Auteur de la discussion
  • #4
j'ai trouver en fait faut juste faire un décalage a droite ADCBUF0 >> 1
 
M
MaX-MoD
Compagnon
17 Avr 2007
2 306
Annecy (74)
content d'avoir pu t'aider :wink:

donc tout fonctionne bien maintenant?

si tu peux poster ton source, ça pourrait m'être utile prochainement :wink:


A+
Max
 
M
marvinc
Nouveau
30 Oct 2009
15
Montbrison (42)
  • Auteur de la discussion
  • #6
pas de pb, me reste un probleme de temps de calcul ;

uint_result = Fract2Float(fractional_Value) * uint_value; 11.7µs !! arg

et je te poserais le projet. je risques d'avoir besoin d'aide pour l'interface UART et la sauveguarde en EEPROM.
 
M
marvinc
Nouveau
30 Oct 2009
15
Montbrison (42)
  • Auteur de la discussion
  • #7
salut, bon après quelques déboire de calcul,
le pic monte a fstep =22kHz, mais quid de l'asservissement.

voila une courbe en 1/256 ème de pas à fstep = 200Hz,
Le PID est réglé a l'arrache, le pas a pas est un 9A, là je lui en autorise que 2.2A et l'alim est en 12V.

je test quoi :)

1.gif
 
Haut