Sommaire

 

5-3) Réalisation du programme de contrôle du moteur :

 

   Comme je l’ai expliqué précédemment, pour la réalisation du programme de contrôle du moteur, j’utilise une carte d’émulation avec son compilateur correspondant.

Les commandes et la adresses ne seront donc vrais que pour ce compilateur.

 

    Avant toute chose, il faut un programme principal, affichant un menu et renvoyant alors aux sous-programmes correspondants  à notre choix.

 Il faut ensuite générer un signal a rapport cyclique variable (PWM), afin des commander la vitesse du moteur. Il faut également générer les signaux afin de choisir le sens de rotation du moteur et ainsi que pour l’arrêter. Il faudra avoir la possibilité de choisir une position (un angle) à atteindre et détecter lorsque la position est atteinte, via le capteur de position et le capteur de début de course.

 

 

 

Réalisation du programme principal :

 

  Le programme principal doit veiller à suivre les caractéristiques de l’organigramme suivant :


 

 

    Le code source en assembleur est alors le suivant :

 (pour les initialisations des variables, voir annexe 3)

 

;*********************************

;*******  programme principal  *******

;*********************************

 

org $c150

 

cli                  ;* autorise les interruptions

 

 

ldaa #$FC            ;* init du portc

staa iniportc        ;* avec b0-b1 in, le reste out

 

ldaa #$00            ;* init portb

staa portb           ;* a 00

 

ldaa #$30            ;* init BAUD

staa baud            ;* a 9600

 

ldaa #$00            ;* init SCCR1

staa sccr1           ;* pour 8bits de data

 

ldaa #$0c            ;* init SCCR2 pour

staa sccr2           ;* transmit & receive enables

 

ldaa #$80            ;* init OPTION pour

staa option          ;* conv A/D on et clock interne

 

ldaa #$01            ;* init ADCTL pour conv unique,

staa adctl           ;* single channel et utilisation de PE1

 

ldaa #$00            ;* init TMSK2 pour interrupt disable

staa tmsk2           ;* (interrupt qd un front montant sur pulse accu)

 

ldaa #$00            ;* init a 00 le contenu du registre

staa pacnt           ;* du pulse accu PACNT

 

ldaa #$40            ;* init interrupt

staa oc2i            ;* pour OC2I actif

 

ldaa #$00            ;* init non changement

staa tctl1           ;* etat de OC2

 

ldaa subdiv          ;* sav de subdiv

staa svsubdiv        ;* ds svsubdiv

ldaa rpcycl          ;* sav de rpcycl

staa svrpcycl        ;* ds svrpcycl

 

 

 

 

;************************

;******** menu **********

;************************

 

menu:

     ;ldx #text           ;* envoye le message  ***** 

     ;jsr transmit       ;* d'invite                    *****

 

     jsr receive          ;attend entre d'une commande

 

     ldab comm            ;test

 

     cmpb #'m'            ;si comm = 'm'

     beq marche           ;branche en 'marche'

 

     cmpb #'a'            ;si comm ='a'

     beq arret            ;branche en 'arret'

 

     cmpb #'s'            ;si comm = 's'

     beq sens             ;branche en 'sens'

 

     cmpb #'v'            ;si comm = 'v'

     beq vitesse          ;branche en 'vitesse'

 

     cmpb #'p'            ;si comm = 'p'

     beq position         ;branche en 'position'

 

     cmpb #'i'            ;si comm = 'i'

     beq initial          ;branche en 'initial'

 

     ldx #text3           ;envoye le message

     jsr transmit         ;d'erreur (e4)

 

      bra menu

 

initial: jmp initia           ;rajoute ici parce qu'il n'existe pas

position: jmp positio     ;de commande de branchement longs (>256)

 

**********************************************************************

**********************************************************************

 

J’ai dû mettre une résistance de pull down sur la broche du PWM, pour éviter que le moteur parte en vitesse maximum en cas de déconnection du fil.

      Pour tous renseignements  sur les fonctions des commandes (bra, jsr, beq, staa, ldaa…),

se réferer à la documentation du 68HC11.

     Pour toutes les abréviations (init, ds, sav…) se réferer à l’index.

 

  Sommaire