dsPIC 30F3010 : programs and projects
dspic 30F3010 : programmes et projets


This page presents some projects I made that include electronics and C programs on Microchip dspic 30F3010.
Executable and sources are provided.

Version Fr à traduire.

Les projets présentés :

Nous présentons 2 projets d'initiation (TP0 et TP1) puis 2 applications de commande de moteur linaire (MRV et MS).
Promenez votre souris au dessus des photos pour lire les commentaires, cliquez dessus pour un zoom.
Rappel : Introduction au dsPIC 30F3010.
Egalement la page de support de cours enseigné à l'UABT (Université de Tlemcen) : Architecture de commande de machines.
Carte de commande : Carte pédagogique permettant de mettre en oeuvre la programmation du dspic (timer, interruption), les entrées sorties logiques (I/O port), la conversion analogique numérique (ADC), la communication série (UART / RS232) et le pilotage de moteur triphasé (PWM)..
Propellor Clock : Projet de Master1 (non fini), il s'agit d'avoir une horloge tournante à persistance rétienenne..
dspic_prclocks
Levitation magnétique : version permettant le pilotage du dispositif à distance par liaison Bluetooth.
Acceleromètre 2-axes : Projet d'acquisition des accélérations à l'aide du composant ADIS16006.
LCD 3310 : Projet d'affichage sur un LCD série SPI bon marché (LCD du Nokia 3310).
LCD 3310
Thermocouple : Projet d'acquisition de mesures de température sur un système tournant.
Thermocouple TX
X10 RF : Projet de génération de signaux RF X10 pour allumer ou éteindre des dispositifs X10 (domotique par courant porteur).
X10 rf
Terminal VGA : Projet d'un terminal VGA pour afficher les données (ASCII) envoyées sur une UART.
MRVlin : Commande d'une machine à réluctance variable linéaire.
Vidéos (.avi)
MRVlin version capteur infrarouge
MSlin : Commande d'une machine synchrone linéaire.
Vidéos (.avi)
MSlin V2 avec carte de commande et de puissance ainsi que l'écran LCD et le pendule inverse


Pourquoi le dspic 30F3010 :

L'intéret de ce dsPIC 30F3010 est que c'est un microcontrôleur 16 bits de chez Microchip. Il est facilement flashable (programmable). Il comporte des interfaces de communication Série mais aussi des sorties PWM, des entrées ADC (10 bits), des E/S logiques. Il a un petit noyeau DSP (multiplication) d'où le nom dsPIC par rapport aux PIC bien connus.

Pour une introduction à l'utilisation de ce microcontrôleur, veuillez vous reportez à cette page.

Caractéristiques du dsPIC 30F3010
Comme il a 28 pattes (pins) et qu'il existe en boitier DIP, il peut être facilement utilisé pour des petits projets d'électroniciens amateurs.
On le programme en assembleur ou en C. Nous avons choisi le language C à cause de son universalité et la facilité d'adaptation des algorithmes que nous avons déjà développé (pilotage de LCD, commande V/f) pour le DSP TMS 320F240.

La datasheet 70141c du dsPIC 30F3010 renseigne sur la connectique et les registres que l'on utilise pour le programmer.
Il vaut mieux regarder la documentation plus complète de toute la famille dsPIC (70046E).

Connexions du dsPIC 30F3010




MRVlin :

Commande d'une machine à réluctance variable linéaire.

MRVlin version batterie MRVlin version capteur infrarouge Rayon du capteur infrarouge : trace bleue mise en évidence par le CCD d'un APN

Télécharger les vidéos (haute résolution .avi) :
Vidéo : Commande en boucle ouverte (48 MO)
Vidéo : Autopilotage (84 MO)




Vidéo : Commande en boucle ouverte




Vidéo : Autopilotage



MRVlin : Version de Simulation.
MRVlin


Il faut comprendre d'abord la structure du programme :
C'est une amélioration du TP1, on y rajoute une Examinons les lignes de code suivantes (voir commentaires en dessous):

   
  if (Flags.MAS)
    {
    k_V_f=ADCBUF0<<2;   // 4.12 pu 4096=1.0=6V
    fs=ADCBUF1<<2;        // 4.12 pu 4096=1.0=20 Hz
    thetasinc=__builtin_mulss(Ktheta,fs)>>12;
    if (Flags.FrontRev) thetas+=thetasinc;
        else            thetas-=thetasinc;
    sinthetas=SinusTable[thetas>>8];
    costhetas=SinusTable[((thetas>>8)+64) & 255];
    Vds=k_V_f;
    Valphas=__builtin_mulss(Vds,costhetas)>>12;
    Vbetas =__builtin_mulss(Vds,sinthetas)>>12;
    Vas=Valphas;
    tmp1=-(Valphas/2);
    tmp2=(__builtin_mulss(SQRT3_2,Vbetas))>>12;
    Vbs=tmp1+tmp2;
    Vcs=tmp1-tmp2;
    tmp1=(__builtin_mulss(ByEs2,Vas))>>12;
    PDC1=800+tmp1;
    tmp1=+(__builtin_mulss(ByEs2,Vbs))>>12;
    PDC2=800+tmp1;
    tmp1=(__builtin_mulss(ByEs2,Vcs))>>12;
    PDC3=800+tmp1;
    }



   
  else
    {
    // actionneur à plot (MRV linéaire 6/4)
    k_V_f =ADCBUF0<<1;
    fs    =ADCBUF1;
    fs=fs*(fs>>4);
    CaptIR    =ADCBUF3; // capteur pour l'autopilotage : > 3V trait noir donc commutation
    if (CaptIR>512)  Flags.CaptIRState=1;
              else    Flags.CaptIRState=0;
    PDC1=k_V_f; // meme tension pour les 3 phases, mais chacun son tour
    PDC2=k_V_f;
    PDC3=k_V_f;
    if (Flags.MRV_autopilotage)
            {
            if (Flags.CaptIRState!=Flags.OldCaptIRState && Flags.CaptIRState) // change d'etat
                                                  {
                                                  if (++Sequence>=3)  Sequence=0;
                                                  if (Sequence==0)  OVDCON=0x0300;  // phase A active only
                                                  if (Sequence==1)  OVDCON=0x0C00;  // phase B active only
                                                  if (Sequence==2)  OVDCON=0x3000;  // phase C active only
                                                  }
            Flags.OldCaptIRState=Flags.CaptIRState;
            }
      else  {
            SeqMaxDelay=fs+1;  // la vitesse de deroulement des sequences, plus fs est grande plus c'est lent !
            // ds le mode MRV, si on appuie sur (TogglesAlim ie PB3)
            // alors on toggles du mode demo (inversion au bout de 20 pas), vers le mode normal (vitesse unidirectionnelle)
            if (TogglesAlim!=Flags.OldTogglesAlimState && TogglesAlim)  // change d'etat vers  appuyé
                                                  {
                                                  if (Flags.ModeFrontRev)  {Flags.ModeFrontRev=0; BugLED=0;}    // allume la LED
                                                                else        {
                                                                            Flags.ModeFrontRev=1; BugLED=1;
                                                                            FrontRearCounter=FrontRearCounterMax;
                                                                            }
                                                  }
            Flags.OldTogglesAlimState=TogglesAlim;
            if (!--SeqDelayCounter)
              {
              SeqDelayCounter=SeqMaxDelay;
              if (Flags.FrontRev) {if (++Sequence>=3)  Sequence=0;
                                  }
                        else      {if (--Sequence<0)  Sequence=2;
                                  }
              if  (Flags.ModeFrontRev)  if (!--FrontRearCounter)  {
                                                            FrontRearCounter=FrontRearCounterMax;
                                                            if (Flags.FrontRev) Flags.FrontRev=0;      // change de direction : recule
                                                                  else          Flags.FrontRev=1;   // change de direction : avance
                                                            }
              if (Sequence==0)  OVDCON=0x0300;  // phase A active only
              if (Sequence==1)  OVDCON=0x0C00;  // phase B active only
              if (Sequence==2)  OVDCON=0x3000;  // phase C active only
              } 
            }
  }


Wait for comments

   
 



Download executable and sources.

MSlin :

Commande d'une machine synchrone linéaire.

MSlin V0 proto MSlin V2 enroulements et sonde Hall MSlin V2 détail des roulements, des encoches, de l'isolant et du bobinage MSlin V2  dessus du mobile MSlin V2 démontage de la version V1 MSlin V2 circuit électronique MSlin comparaison V2 et V1 MSlin V2 avec carte de commande et de puissance ainsi que l'écran LCD et le pendule inverse MSlin état des sondes Hall

Télécharger les vidéos (haute résolution .avi) :
Vidéo explicative (108 MO)
Vidéo d'animation (28 MO)




Vidéo explicative




Vidéo d'animation

MSlin : Version de Simulation.
MSlin




Cette manip a fait l'objet d'un article publié au CETSIS 2007 qui explique le dimensionnement des moteurs linéaires MRVlin et MSlin.
Il a reçu le prix de l'innovation en Electrotechnique et été sélectionné pour être publié dans une issue spéciale CETSIS 2007 dans la revue J3eA.




Download executable and sources.

Download :
tp0.zip   Sources C de l'exemple TP0.
tp1.zip   Sources C de l'exemple TP1.
mrvlin.zip   Sources C de MRVlin.
mslin_lcd_dspic.zip   Sources C de MSlin.
L6234.pdf   Datasheet de l'onduleur triphasé L6234.
mrvlin_sch.pdf   Schéma du circuit électronique MRVlin.


Back to homepage

Last update : 26/12/2007