Genereer PWM-golf met PIC-microcontroller - Ajarnpa
Genereer PWM-golf met PIC-microcontroller - Ajarnpa
Anonim
Genereer PWM-golf met PIC-microcontroller
Genereer PWM-golf met PIC-microcontroller
Genereer PWM-golf met PIC-microcontroller
Genereer PWM-golf met PIC-microcontroller
Genereer PWM-golf met PIC-microcontroller
Genereer PWM-golf met PIC-microcontroller

WAT IS PWM?

PWM STAAT VOOR PULSE WIDTH MODULATION is een techniek waarbij de breedte van de puls wordt gevarieerd.

Om dit concept duidelijk te begrijpen, moet u een klokpuls of een blokgolfsignaal duidelijk overwegen, het heeft een werkcyclus van 50%, wat betekent dat de Ton- en Toff-periode hetzelfde is. De totale duur waarvoor het signaal hoog was en de duur waarvoor het signaal laag was, wordt totaal genoemd tijdsperiode.

Voor de afbeelding hierboven heeft deze golf een duty cycle van 50%

Inschakelduur = (AAN-tijd / totale tijd) * 100

AAN-tijd - tijd waarvoor het signaal hoog was

UIT-tijd - tijd vijand welk signaal laag was Totale tijd - Totale tijdsperiode van de puls (zowel AAN- als UIT-tijd)

Stap 1: Microcontroller selecteren

Microcontroller selecteren
Microcontroller selecteren

Het selecteren van de juiste microcontroller voor het project, dit is het essentiële onderdeel van het project. PWM-signalen kunnen worden gegenereerd in microcontrollers met PWM-kanalen (CCP-registers). Voor dit project ben ik van plan om bij pic16f877 te blijven. u kunt de datasheet-link hieronder downloaden:

PIC16F877a gegevensblad klik hier:

CCP-module is verantwoordelijk voor het produceren van het PWM-signaal. CCP1 en CCP2 zijn gemultiplext met PORTC. PORTC is een 8-bit brede bidirectionele poort. Het bijbehorende gegevensrichtingsregister is TRISC. Als u TRISC-bit (=1) instelt, wordt de corresponderende PORTC-pin als invoer genomen. Als u een TRISC-bit(=0) wist, wordt de bijbehorende PORTC-pin een uitvoer.

TRISC = 0; // Als u dit bit wist, wordt PORTC als uitvoer gemaakt

Stap 2: CONFIGUREER CCP-MODULE

CONFIGUREER CCP-MODULE
CONFIGUREER CCP-MODULE
CONFIGUREER CCP-MODULE
CONFIGUREER CCP-MODULE

CCP - CAPTURE/VERGELIJK/PWM-MODULES

Elke Capture/Compare/PWM (CCP) module bevat een 16-bits register dat kan werken als een:

• 16-bits opnameregister

• 16-bits vergelijkingsregister

• PWM Master/Slave Duty Cycle-register

Configureer het CCP1CON-register in de PWM-modus

Registreren Beschrijving

CCPxCON Dit register wordt gebruikt om de CCP-module te configureren voor Capture/Compare/PWM-bediening.

CCPRxL Dit register bevat de 8-Msb-bits van PWM, lagere 2-bits zullen deel uitmaken van het CCPxCON-register.

TMR2 Vrijlopende teller die wordt vergeleken met CCPR1L en PR2 voor het genereren van de PWM-uitgang.

Nu zal ik binair gebruiken om de bits weer te geven om het CCP1CON-register te configureren.

zie de afbeelding hierboven.

CCP1CON = 0b00001111;

Je kunt ook je hex-formaat gebruiken

CCP1CON = 0x0F; // CCP1CON-register configureren voor PWM-modus

Stap 3: Timer2-module configureren (TMR2-register)

Timer2-module configureren (TMR2-register)
Timer2-module configureren (TMR2-register)

Timer2 is een 8-bits timer met een prescaler en een postscaler. Het kan worden gebruikt als de PWM-tijdbasis voor de PWM-modus van de CCP-module(s). Het TMR2-register is leesbaar en beschrijfbaar en wordt gewist op elk apparaat Reset.

T2CON-register wordt weergegeven

De prescale en postscale passen de uitgangsfrequentie van de gegenereerde PWM-golf aan.

Frequentie = klokfrequentie/(4*prescaler*(PR2-TMR2)*Postscaler*count)

Waar Tout = 1/frequentie

T2CON = 0b00000100;

Dit genereert 2,5 KHz @ 1 Mhz of 100 KHz @ 4 MHz kristal (praktisch is er een beperking voor deze PWM-frequentie, raadpleeg de specifieke datasheet voor meer details)

hex representatie

T2CON = 0x04; // schakel T2CON in zonder configuratie voor prescaler en postscale

Stap 4: PR2 configureren (Timer2-perioderegister)

De Timer2-module heeft een 8-bits perioderegister, PR2. Timer2 neemt toe vanaf 00h totdat deze overeenkomt met PR2 en wordt dan teruggezet naar 00h bij de volgende incrementcyclus. PR2 is een leesbaar en beschrijfbaar register. Het PR2-register wordt bij Reset geïnitialiseerd op FFh.

Door een geschikt bereik voor PR2 in te stellen, kan de werkcyclus van de gegenereerde PWM-golf worden gewijzigd

PR2 = 100; // Stel de Cyclustijd in op 100 voor het variëren van de werkcyclus van 0-100

Voor de eenvoud gebruik ik PR2=100 door CCPR1L = 80 te maken; 80% inschakelduur kan worden bereikt.

Stap 5: CCPR1l-module configureren

Aangezien PR2 = 100 CCPR1l overal tussen 0-100 kan worden geconfigureerd om de gewenste inschakelduur te krijgen.

Stap 6: Schrijf de schets op je MPLAB X IDE de code wordt hieronder gegeven

Schrijf de schets op je MPLAB X IDE de code wordt hieronder gegeven
Schrijf de schets op je MPLAB X IDE de code wordt hieronder gegeven

#erbij betrekken

void delay (int a) // functie om vertraging te genereren{

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

{

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

}

}

ongeldig hoofd()

{TRISC = 0; // Als u dit bit wist, wordt PORTC als uitvoer gemaakt.

CCP1CON = 0x0F; // CCP1CON-register configureren voor PWM-modus

T2CON = 0x04; // schakel T2CON in zonder configuratie voor prescaler en postscale.

PR2 = 100; // Stel de Cyclustijd in op 100 voor het variëren van de werkcyclus van 0-100

terwijl(1){

CCPR1L = 75; //gegenereerde 75% inschakelduurvertraging(1);

}

}

Ik heb ook een kleine wijziging in de code aangebracht, zodat de frequentie van de gegenereerde PWM-golf

Dit is code die wordt gesimuleerd in proteus en de output PWM-golf wordt hieronder weergegeven. Om dit op uw pic-ontwikkelingsborden te uploaden, gebruikt u #include met geschikte configuratiebits.

Bedankt