16F877A - doute PWM période Comment puis-je obtenir le 20ms

G

Gomme

Guest
Bonjour.

Im faire un projet, avec pic 16F877A, j'ai besoin de la fonction PWM, mais, avec la formule datasheet la période PWM max de 4MHz CVMO.est de 4 ms, 20 ms et j'ai besoin, alors je ne sais pas comment puis-je obtenir le 20ms, comment peut-i pour les déplacés vers 20ms ?????

la formule est la suivante:
PWM période = [(PR2) 1] 4 TOSC (TMR2 valeur prescale)

 
Le PWM matériel est mal adapté pour exécuter un servomoteur.Faites-le dans le logiciel.

 
20mS ou 50Hz période PWM est très lent.Trop lent à utiliser un module PWM!
J'ai récemment eu un problème similaire et résolu en utilisant une minuterie 1mS interrompre.

Ont le devoir Gobal et variable période et un booléen en cours d'exécution du pavillon.

Vous pouvez l'utiliser comme ceci:Code:/*--- Variables globales ---*/Bool exécutant = True;

unsigned char devoir = 10;

unsigned char période = 20;/*--- 1mS ---*/ intrruptvoid rapport de recherche internationale d'interruption (void)

(

statique pwmclock unsigned char = 0;if (T0IF == 1)

(

if (course à pied)

(

if (service <pwmclock) (

PWM_OUT = 1;

)

else (

PWM_OUT = 0;

)if (période <pwmclock) (

pwmclock ;

)

else (

pwmclock = 0;

)

)

else (

PWM_OUT = 0;

)T0IF = 0;

)

)
 
Merci Ok pour stand.Je vais essayer dans le logiciel, et toute boubt je poste.

 
use the PWM module to generate a longer (lower frequency) period by breaking up the period into shorter PWM "frames" and using an interrupt driven software "helper" to load the correct duty cycle value for each upcoming "frame".

Vous pouvez
utiliser le module PWM pour générer plus un (basse fréquence) période en décomposant la période plus courte en PWM "frames" et en utilisant un moteur interruption logicielle "helper" pour charger le cycle valeur correcte pour chaque venir un "cadre".Cette méthode peut fournir beaucoup plus haute résolution que vous obtiendriez si vous étiez en mesure de configurer le module PWM pour une période de 20 ms.

Voici un exemple de rapport de recherche internationale "helper" code pour une ou 4 MHz d'horloge 16 (prédiviseur 16 ou 4, respectivement) qui fournit la résolution 1 impulsion largeur usec 0 à 20000 usecs);

Cordialement, Mike

Code:

;************************************************* *****************

;

/ / Le programme d'installation de 1000 usec période PWM avec PR2 et 249 = diviseur

/ / 16h01 (16 MHz d'horloge) pendant 20 PWM «cadres» pour 20 ms Servo

; / / La période et une résolution de 1 microseconde largeur d'impulsion

;

; Servo int = 1500; / / 0 .. 20000 en incréments de 1 microseconde

; Int largeur = 0; / / variable de travail rapport de recherche internationale

; Cadre int = 1; / numéro de châssis / 1 .. 20

;

; Rapport de recherche internationale void ()

; (PIR1bits.TMR2IF = 0; / / Indicateur clair Timer 2 interruption

; Châssis - / /

If (frame == 0) / / si la fin de la période de 20 ms

; (Frame = 20; / / réinitialisation pour nouvelle période de 20 ms

; Width = servo; largeur / / reset »de travail variables

;)

; If ((largeur> 1000) / / si> largeur 1000 usecs

; (CCPR1L 250 = / / faire une image de service à 100% du cycle

; CCP1CONbits.CCP1Y = 0; / /

; CCP1CONbits.CCP1X = 0; / /

; Largeur 1000 -=; / / soustraction 1000 usecs

;)

; D'autre

; (CCP1CONbits.CCP1Y = (largeur et 1);

; CCP1CONbits.CCP1X = (largeur et 2);

; CCPR1L = (largeur>> 2); / / 0 .. 249 (0 .. 999 usecs)

; Largeur = 0; / / force cadres restant à 0%

;)

;)

;

 

Welcome to EDABoard.com

Sponsor

Back
Top