Générer une onde PWM avec le microcontrôleur PIC : 6 étapes
Générer une onde PWM avec le microcontrôleur PIC : 6 étapes
Anonim
Générer une onde PWM avec le microcontrôleur PIC
Générer une onde PWM avec le microcontrôleur PIC
Générer une onde PWM avec le microcontrôleur PIC
Générer une onde PWM avec le microcontrôleur PIC
Générer une onde PWM avec le microcontrôleur PIC
Générer une onde PWM avec le microcontrôleur PIC

QU'EST-CE QUE PWM?

PWM SIGNIFIE LA MODULATION DE LARGEUR D'IMPULSION est une technique par laquelle la largeur de l'impulsion est modifiée.

Pour comprendre ce concept, considérez clairement une impulsion d'horloge ou tout signal d'onde carrée, il a un cycle d'utilisation de 50%, ce qui signifie que les périodes Ton et Toff sont identiques. La durée totale pendant laquelle le signal était élevé et la durée pendant laquelle le signal était faible est appelée totale. période de temps.

Pour l'image ci-dessus, cette onde a un rapport cyclique de 50 %

Cycle de service = (temps ON / temps total) * 100

Temps ON - temps pendant lequel le signal était haut

Temps OFF - temps pour lequel le signal était faible Temps total -Période totale de l'impulsion (temps ON et OFF)

Étape 1: Sélection du microcontrôleur

Sélection du microcontrôleur
Sélection du microcontrôleur

Sélection du microcontrôleur approprié pour le projet, c'est la partie essentielle du projet. Les signaux PWM peuvent être générés dans des microcontrôleurs avec des canaux PWM (registres CCP). Pour ce projet, je prévois de m'en tenir à pic16f877. vous pouvez télécharger le lien de la fiche technique est donné ci-dessous

Fiche technique PIC16F877a cliquez ici

Le module CCP est responsable de la production du signal PWM. CCP1 et CCP2 sont multiplexés avec PORTC. PORTC est un port bidirectionnel large de 8 bits. Le registre de direction de données correspondant est TRISC. Le réglage du bit TRISC (=1) fera prendre la broche PORTC correspondante comme entrée. Effacer un bit TRISC (=0) fera de la broche PORTC correspondante une sortie.

TRISC = 0; // Effacer ce bit fera PORTC en sortie

Étape 2: CONFIGURER LE MODULE CCP

CONFIGURER LE MODULE CCP
CONFIGURER LE MODULE CCP
CONFIGURER LE MODULE CCP
CONFIGURER LE MODULE CCP

CCP - CAPTURE/COMPARAISON/MODULE PWM

Chaque module Capture/Compare/PWM (CCP) contient un registre 16 bits qui peut fonctionner comme:

• Registre de capture 16 bits

• Registre de comparaison 16 bits

• Registre de cycle de service maître/esclave PWM

Configurez le registre CCP1CON en mode PWM

Inscription Description

CCPxCON Ce registre est utilisé pour configurer le module CCP pour le fonctionnement Capture/Compare/PWM.

CCPRxL Ce registre contient les bits de 8 Msb de PWM, les 2 bits inférieurs feront partie du registre CCPxCON.

TMR2 Compteur de marche libre qui sera comparé à CCPR1L et PR2 pour générer la sortie PWM.

Maintenant, je vais utiliser le binaire pour représenter les bits pour configurer le registre CCP1CON.

référez-vous à l'image ci-dessus.

CCP1CON = 0b00001111;

Vous pouvez également vous formater hexadécimal

CCP1CON = 0x0F; //configuration du registre CCP1CON pour le mode PWM

Étape 3: Configuration du module Timer2 (registre TMR2)

Configuration du module Timer2 (registre TMR2)
Configuration du module Timer2 (registre TMR2)

Timer2 est un timer 8 bits avec un préscaler et un postscaler. Il peut être utilisé comme base de temps PWM pour le mode PWM du ou des modules CCP. Le registre TMR2 est lisible et inscriptible et est effacé sur n'importe quel appareil Reset.

Le registre T2CON est affiché

La pré-échelle et la post-échelle ajusteront la fréquence de sortie de l'onde PWM générée.

Fréquence = fréquence d'horloge/(4*prescaler*(PR2-TMR2)*Postscaler*count)

Où Tout = 1/fréquence

T2CON = 0b00000100;

Cela générera un cristal de 2,5 KHz @ 1Mhz ou 100KHz @ 4MHz (pratiquement, il y a une limitation pour cette fréquence PWM, reportez-vous à la fiche technique particulière pour plus de détails)

représentation hexadécimale

T2CON = 0x04; // activer T2CON sans configuration Prescaler et postscale

Étape 4: Configuration du PR2 (Registre de période Timer2)

Le module Timer2 possède un registre de période de 8 bits, PR2. Timer2 s'incrémente de 00h jusqu'à ce qu'il corresponde à PR2, puis se réinitialise à 00h au cycle d'incrémentation suivant. PR2 est un registre lisible et inscriptible. Le registre PR2 est initialisé à FFh lors de la réinitialisation.

La définition d'une plage appropriée pour PR2 permettra à l'utilisation de modifier le rapport cyclique de l'onde PWM générée

PR2 = 100; // Réglez le temps de cycle sur 100 pour faire varier le cycle de service de 0 à 100

Pour simplifier, j'utilise PR2=100 en faisant CCPR1L = 80; 80% du cycle de service peut être atteint.

Étape 5: Configurer le module CCPR1l

Étant donné que PR2 = 100, CCPR1l peut être configuré entre 0 et 100 pour obtenir le cycle de service souhaité.

Étape 6: écrivez le croquis sur vous MPLAB X IDE le code est donné ci-dessous

Écrivez le croquis sur vous MPLAB X IDE le code est donné ci-dessous
Écrivez le croquis sur vous MPLAB X IDE le code est donné ci-dessous

#comprendre

void delay(int a) //fonction pour générer un délai{

for(int i=0; i<a;i++)

{

for(int j=0;j<144;j++);

}

}

vide principal()

{ TRISC = 0; // Effacer ce bit fera PORTC en sortie.

CCP1CON = 0x0F; //configuration du registre CCP1CON pour le mode PWM

T2CON = 0x04; // activer T2CON sans configuration Prescaler et postscale.

PR2 = 100; // Réglez le temps de cycle sur 100 pour faire varier le cycle de service de 0 à 100

tandis que(1){

CCPR1L = 75; //génération d'un retard de cycle de service de 75 % (1);

}

}

J'ai également apporté une petite modification au code pour que la fréquence de l'onde PWM générée

Ce code est simulé dans proteus et l'onde PWM de sortie est indiquée ci-dessous. Pour télécharger cela sur vos cartes de développement pic, utilisez #include avec les bits de configuration appropriés.

Merci