Sommaire

 

Réalisation de la partie générant le signal PWM :

 

    Génération du signal PWM se fait selon l’organigramme suivant :

 

 

     Ce petit bout de programme se trouvera dans une interruption qui s’execute réguliairement. Cette interruption est executée par le compteur OC2 à chaque fois qu’il atteind la valeur déterminée par la variable time.

    Dans notre cas, time = 650 , étant donné que le µC 68hc11 execute une incrémentation du compteur toutes les  0.5 µs, alors t = 0.5 µ x 650 = 325 µs.

    La variable de subdivision de t determine la période du signal PWM, tel que

si subdiv = 15, alors tpwm = 15 x t = 4.875 ms.

 

     La variable de rapport cyclique quand à elle determine pendant combien de cycles sur les 15 (fixés par subdiv) le signal PWM sera à un. C’est à dire que si rpcycl = 4, alors le rapport cyclique du PWM sera égal à (4 x 100) / 15 = 26.6 %. Pour avoir 100% de rapport cyclique, il faudrait que rpcycl = subdiv = 15.

    Le fonctionnement peut donc être illustré par le schéma suivant :

 

 

interruption

1

 

2

 

3

 

4

 

5

 

6

 

7

 

8

 

9

 

10

 

11

 

12

 

13

 

14

 

15

 

16

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PWM

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(rpcycl = 5)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

temps

<time>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<----------- rpcycl ----------------------->

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<-------------------------------------------------- subdiv ---------------------------------------------------------------------------->

 

 

 

 

   On peut alors changer la plage de vitesse de fonctionnement du moteur en modifiant la valeur de subdiv, ainsi si on veut que les vitesses aillent de 0% à 100%, il suffit de mettre subdiv = 5. Alors on aura v1 = 20 % , v2 = 40 %, v3 = 60 %, v4 = 80 % et v5 = 100 %.

 

Le code source en assembleur est alors le suivant :

 (pour les initialisations des variables, voir annexe 3)

 

 

;debut du pwm ****************************

 

int_b5:

 

     ldd toc2             ;*

     addd time            ;* ajoute OC2 = OC2 + time

     std toc2             ;* enregistre la nouvelle valeur de OC2

 

     ldaa rpcycl          ;* test 

     cmpa #$00            ;* si rpcycl = 0

     beq retour           ;* branche en retour

     dec subdiv           ;* decremente subdiv

     beq haut             ;* branche en haut si subdiv = 0

 

     dec rpcycl           ;* decremente rpcycl

     beq bas              ;* branche en bas si rpcycl = 0

 

retour:

 

     ldaa portc           ;* verifie temperature flag

     anda #$01            ;*

     cmpa #$00            ;*

     beq int_b6           ;* branche en in_b6 si flag actif

     ldaa svtptemp        ;* reinit tptemp = svtptemp

     staa tptemp          ;*

     bra finrti           ;* retour au program

 

 

haut:

 

     ldaa #$40            ;* init pwm = 1

     staa porta           ;*     

     ldaa svsubdiv        ;* reinit subdiv = svsubdiv

     staa subdiv          ;*

     ldaa svrpcycl        ;* reinit rpcycl = svrpcycl

     staa rpcycl          ;*

     bra retour           ;* branche en retour

 

bas:

 

     ldaa #$00            ;* init pwm = 0

     staa porta           ;*

     ldaa svrpcycl        ;* reinit rpcycl = svrpcycl

     staa rpcycl          ;*

     bra retour           ;* branche en retour

 

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

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

 

Sommaire