Sommario:

Generare un'onda PWM con il microcontrollore PIC: 6 passaggi
Generare un'onda PWM con il microcontrollore PIC: 6 passaggi

Video: Generare un'onda PWM con il microcontrollore PIC: 6 passaggi

Video: Generare un'onda PWM con il microcontrollore PIC: 6 passaggi
Video: PierAisa #574: Come generare una sinusoide con PIC16F84A in C - Tutorial 2024, Novembre
Anonim
Genera onde PWM con microcontrollore PIC
Genera onde PWM con microcontrollore PIC
Genera onde PWM con microcontrollore PIC
Genera onde PWM con microcontrollore PIC
Genera onde PWM con microcontrollore PIC
Genera onde PWM con microcontrollore PIC
Genera onde PWM con microcontrollore PIC
Genera onde PWM con microcontrollore PIC

CHE COS'È IL PWM?

PWM STAND FOR PULSE WIDTH MODULATION è una tecnica mediante la quale la larghezza dell'impulso viene variata.

Per comprendere questo concetto, considera chiaramente un impulso di clock o qualsiasi segnale ad onda quadra che ha un ciclo di lavoro del 50% che significa che il periodo Ton e Toff è lo stesso, La durata totale per cui il segnale era alto e la durata per cui il segnale era basso è chiamata totale periodo di tempo.

Per l'immagine mostrata sopra questa onda ha un duty cycle del 50%

Ciclo di lavoro = (tempo ON / Tempo totale)*100

Tempo ON - tempo per il quale il segnale era alto

Tempo OFF - tempo per cui il segnale era basso Tempo totale - Periodo di tempo totale dell'impulso (sia tempo ON che tempo OFF)

Passaggio 1: selezione del microcontrollore

Selezione del microcontrollore
Selezione del microcontrollore

Selezionando il microcontrollore appropriato per il progetto questa è la parte essenziale del progetto I segnali PWM possono essere generati in microcontrollori con canali PWM (registri CCP). Per questo progetto ho intenzione di restare con pic16f877. è possibile scaricare il collegamento alla scheda tecnica è riportato di seguito

Scheda tecnica PIC16F877a clicca qui

Il modulo CCP è responsabile della produzione del segnale PWM. CCP1 e CCP2 sono multiplexati con PORTC. PORTC è una porta bidirezionale a 8 bit. Il registro di direzione dei dati corrispondente è TRISC. L'impostazione del bit TRISC (=1) farà prendere il corrispondente pin PORTC come input. La cancellazione di un bit TRISC (=0) renderà il corrispondente pin PORTC un'uscita.

TRISC = 0; //La cancellazione di questo bit renderà PORTC come output

Passaggio 2: CONFIGURAZIONE DEL MODULO CCP

CONFIGURA MODULO CCP
CONFIGURA MODULO CCP
CONFIGURA MODULO CCP
CONFIGURA MODULO CCP

CCP - CATTURA/CONFRONTA/MODULI PWM

Ciascun modulo Capture/Compare/PWM (CCP) contiene un registro a 16 bit che può funzionare come:

• Registro di cattura a 16 bit

• Registro di confronto a 16 bit

• Registro PWM Master/Slave Duty Cycle

Configurare il registro CCP1CON in modalità PWM

Registrati Descrizione

CCPxCON Questo registro viene utilizzato per configurare il modulo CCP per l'operazione Capture/Compare/PWM.

CCPRxL Questo registro contiene i bit da 8 Msb di PWM, i 2 bit inferiori faranno parte del registro CCPxCON.

TMR2 Contatore di corsa libera che verrà confrontato con CCPR1L e PR2 per la generazione dell'uscita PWM.

Ora userò il binario per rappresentare i bit per configurare il registro CCP1CON.

fare riferimento all'immagine sopra.

CCP1CON = 0b00001111;

Puoi anche formattare esadecimale

CCP1CON = 0x0F; //configurazione del registro CCP1CON per la modalità PWM

Passaggio 3: configurazione del modulo Timer2 (registro TMR2)

Configurazione del modulo Timer2 (registro TMR2)
Configurazione del modulo Timer2 (registro TMR2)

Timer2 è un timer a 8 bit con un prescaler e un postscaler. Può essere utilizzato come base dei tempi PWM per la modalità PWM dei moduli CCP. Il registro TMR2 è leggibile e scrivibile e viene azzerato su qualsiasi dispositivo Reset.

Viene visualizzato il registro T2CON

La prescala e la postscala regoleranno la frequenza di uscita dell'onda PWM generata.

Frequenza = frequenza di clock/(4*prescaler*(PR2-TMR2)*Postscaler*count)

Dove Tout = 1/frequenza

T2CON = 0b00000100;

Questo genererà 2,5 KHz @ 1 Mhz o 100 KHz @ 4 MHz cristallo (praticamente c'è una limitazione per questa frequenza PWM, fare riferimento alla scheda tecnica specifica per maggiori dettagli)

rappresentazione esadecimale

T2CON = 0x04; // abilita T2CON senza configurazione di prescaler e postscale

Fase 4: Configurazione di PR2 (Registro Periodo Timer2)

Il modulo Timer2 ha un registro di periodo a 8 bit, PR2. Il timer2 aumenta da 00h fino a quando non corrisponde a PR2 e quindi si ripristina a 00h al ciclo di incremento successivo. PR2 è un registro leggibile e scrivibile. Il registro PR2 viene inizializzato a FFh al Reset.

L'impostazione di un intervallo appropriato per PR2 consentirà di modificare il ciclo di lavoro dell'onda PWM generata

PR2 = 100; // Imposta il tempo di ciclo su 100 per variare il ciclo di lavoro da 0-100

Per semplicità utilizzo PR2=100 facendo CCPR1L = 80; È possibile ottenere un ciclo di lavoro dell'80%.

Passaggio 5: configurare il modulo CCPR1l

Poiché PR2 = 100 CCPR1l può essere configurato ovunque tra 0-100 per ottenere il ciclo di lavoro desiderato.

Passaggio 6: scrivi lo schizzo su di te MPLAB X IDE il codice viene fornito qui sotto

Scrivi lo schizzo su di te MPLAB X IDE il codice viene fornito qui sotto
Scrivi lo schizzo su di te MPLAB X IDE il codice viene fornito qui sotto

#includere

void delay(int a) //funzione per generare ritardo{

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

{

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

}

}

vuoto principale()

{ TRISC = 0; //La cancellazione di questo bit renderà PORTC come output.

CCP1CON = 0x0F; //configurazione del registro CCP1CON per la modalità PWM

T2CON = 0x04; // abilita T2CON senza configurazione di prescaler e postscale.

PR2 = 100; // Imposta il tempo di ciclo su 100 per variare il ciclo di lavoro da 0-100

mentre(1){

CCPR1L = 75; //ha generato un ritardo del ciclo di lavoro del 75%(1);

}

}

Ho anche apportato una piccola modifica al codice in modo che la frequenza dell'onda PWM generata

Questo è il codice simulato in proteus e l'onda PWM in uscita è mostrata di seguito Per caricarlo sulle schede di sviluppo delle immagini utilizzare #include con i bit di configurazione adeguati.

Grazie

Consigliato: