Objectifs du projet
- Savoir les caractéristiques du PIC16F877A
- Savoir utiliser les fonctions de la gestion de générateur PWM
- Savoir ajuster le rapport cyclique d’un signal PWM et la fréquence
- etc.
Domaines d’applications
- Variateurs de vitesse d’un moteur à CC
- Controle de puissance d’une charge
- Alimentations de puissance ajustables (DC/DC converter)
- Régulateurs
- etc.
Caractéristiques du PIC16F877A
- Fréquence : DC-20 MHz
- Resets: POR, BOR, PWRT, OST
- Mémoire flash programme: 8k
- Mémoire de données: 368
- EEPROM: 256
- Interruptions: 15
- Ports E/S: A, B, C, D et E
- Timers: 3
- Capture/Comparateur/PWM: 2
- Communication série: MSSP (SPI, i²C), USART
- Communication //: PSP
- Convertisseur A/N: 8 canneaux 10 bits
- Comparateurs analogiques: 2
- Instructions: 35
- Datasheet PIC16F877A
Fonctions PWM
PWMx_Init()
La fonction PWMx_Init(long freq) permet de configurer le contrôleur PWM numéro x (x=1, 2, …) du microcontrôleur avec la fréquence égale à « freq » en Hz. Exemple : Initialiser le PWM 1 à 1KHz PWM1_Init(1000). Par défaut la PWM est connecté avec le pin RC2 et PWM2 avec le pin RC2. Il faut bien s’assurer que le microcontrôleur contient des interfaces PWM, dans le cas du PIC16F877A on dispose de deux sorties PWM (voir les caractéristiques ci-dessus). Réfère au datasheet pour le choix de la fréquence. Lorsque la valeur choisie ne respecte pas celle du microcontrôleur, la fonction retourne une erreur. La fonction retourne aussi une erreur lorsque le µC ne dispose pas du contrôleur PWM.
PWMx_Set_Duty()
Syntaxe : void PWMx_Set_Duty(unsigned short duty_ratio);
Elle permet de definer le rapport cyclique du signal PWM. La valeur « duty_ratio” peut varriée entre 0(0%) et 255 (100%). Lorsque on fait appel à la fonction d’initialisation PWMx_Init(long freq), le rapport cyclique par défaut est de 0%. Donc, il faut obligatoirement suivre la fonction PWMx_Set_Duty(unsigned short duty_ratio). Exemple :
// Initialisation du PWM à 1KHz
PWM1_Init(1000);
// Mise à jour du rapport cyclique à 50%
PWM1_Set_Duty(127);
PWMx_Start()
Syntaxe : void PWMx_Start(void);
Après l’étape d’initialisation du contrôleur, il suit l’étape de mise en route! C’est grâce à la fonction PWMx_Start(void). Il suffit de préciser le numéro du PWM et la fonction s’occupe du reste. D’une autre facon la sortie RC1 ou RC2 reste à 0 (absence du signal PWM) tant que la fonction de mise en route n’est pas activée. Ci-dessous la fonction d’arrêt du contrôleur.
PWMx_Stop()
Syntaxe : void PWMx_Stop(void);
Désactiver la sortie PWM (mise à zéro du pin RCx)
Analyse de Fonctionnement
On considère le schéma ci-dessous du contrôleur PWM commandé par une tension. Le fonctionnement consiste varier le rapport cyclique du signal PWM1 en utilisant une source de tension anagogique. On utilise un potentiomètre montée en pont diviseur afin d’ajuster la tension à la borne du pin PA2 entre 0V (0%) et 5V (100%). Le potentiomètre est branché avec l’entrée analogique AN2 ou RA2.
Note : La valeur 100% peut être inférieure à 5V si l’alimentation est inférieure à 5V (Exemple 2V ou 3.3V). De préférence il faut alimenter le potentiomètre RV1 avec la tension de l’alimentation du µC.
Dans notre exemple on utilise deux sorties PWM (PWM1 liée avec RC1 et PWM2 liée avec RC2) de mêmes fréquences et rapports cycliques. La sortie PWM1 est ensuite sert à contrôler un moteur à courant continu via un transistor bipolaire 2N222. La sortie PWM2 est branchée avec une LED à travers une résistance de 150 ohms pour rôle la limitation du courant à la borne de la LED. Nous avons utilisé une LED afin de visualiser par l’œil l’influence de la variation du potentiomètre RV1 (ou du rapport cyclique) d’une part sur la luminosité de la LED, d’autre part sur la vitesse de rotation du moteur DC.
Régimes de fonctionnement
- PWM1=0V => V1=0, le courant de base est nul IB=0 => IC=0 => Le courant à la borne du moteur DC est nul => Moteur en état d’arrêt
- PWM1=VCC => V1=VCC=5V => courant IB non nul, ci-dessous la formule du courant IC en fonction de V1, P1 et R1:
Exemple de calcul
A.N: Lorsque P1=100, V1=5V, Vbe=0.7V, R1=150, beta=300 => IC=(5-0.7)/(100+0.5)=4.3/100.5=42.7mA
La tension Vbe est de l’ordre de 0.6-0.7V, elle est faible par rapport à V1. De plus, le rapport R1/beta est faible (beta de l’ordre de 100-300), alors:
A.N: Lorsque P1=100, V1=5V => IC=5/100=50mA.
Note: La formule montre que le rôle de la résistance de la base R1 est négligeable et n’a pas d’effet sur le courant IC. Ainsi qu’on peut contrôler le courant à la borne de la charge (IC) avec le potentiomètre P1. D’où l’utilisation d’un potentiomètre à la place d’une résistance fixe !
Résultat de simulation
Afin de simuler le courant IC, on branche une source de tension DC de 5V à la base, on alimente le transistor avec une tension VCC égale à 12V. On branche deux sondes de courants: Une pour le courant IB l’autre pour le courant IC. Les résultats sont les suivants:
- IB=0.26 µA
- IC=41.8 mA
En résumé, le résultat théorique 42.7 mA est plus proche de simulation 41.8 mA. On en déduit que notre calcul est bon ainsi que le modèle de simulation utilisé par le logiciel ISIS.
Note: Le µC n’a pas d’importance car la sortie PWM 1 est débranchée.
PWM 25%
PWM 50%
PWM 75%
Programme MikroC
Retour à l’accueil MikroC