Calcul du passage du 0V de la sinusoïde (PIC 12F675)

Dernière mise à jour le 24/05/2015

--------------------------------------------------------------------------------------------------------------------------------------------------------------- 

Présentation

Dans cet article nous allons étudier un montage électronique pour détecter le passage du 0V de la sinusoïde. Un montage ou nous allons se tirer par les cheveux.. Ouf !! Bien sûr que non puisque nous allons dans un premier temps faire un petit traitement de signal en utilisant que des composants courant (transistors, résistances, diodes transformateur, et pour finir la cerise sur le gâteau d’utiliser un PIC de la famille 12F675.

Schéma

Demo 001

Fonctionnement

Commençons d’abord, à analyser du transformateur en passant par les diodes et de prendre le temps pour comprendre. Le transformateur monophasé relié au secteur fourni une tension parfaitement sinusoïdal à son secondaire de 12V de valeur efficace. Intéressons-nous maintenant au pont de diodes qui est composé de D1 à D4 et qui d’ailleurs permet de redresser les alternances négatives pour avoir en sortie une tension redressé non filtré (creux de tension). En sortie du pont de diode nous allons nous retrouver avec deux alternance sur une période de 20ms d’où la fameuse formule Umoy = (2*Umax*1,414) / 3,14, avec Umoy qui représente  la valeur moyenne pour des tensions continues, tiens !! C’est d’ailleurs intéressant surtout en électronique.

Régulation à 5V

Analysons maintenant l’ensemble R1/R2 et Q1, pour comprendre l’intérêt de ce montage. Mettre un transistor directement en sortie du transformateur ne vous fait pas peur ? C’est risqué quand même !! Mais bon !!! Commençons plutôt du côté du 5V on reviendra plus tard pour la résistance R1.

Le courant circulant du +5V à la masse en passant par l’émetteur et le collecteur de notre transistor Q1, n’a pas besoin d’être grand, et pourquoi pas prendre une valeur arbitraire de 1mA. En admettant qu’il y’a suffisamment de courant dans sa base pour que le transistor sature, et, qu’il soit 100% passant on n’obtiendrait de façon théorique une chute de tension entre Vce (tension entre l’émetteur et le collecteur) de 0V. Il en résulte que tous le courant passe dans la résistance R2, et nous avons une résistance qui serait égale à R2=U/I=5/0,001=5k Ohms (4k7 fera bien l’affaire).

Courant de base Ib

Nous avons ici un montage type suiveur de tension, puisque la tension est directement appliqué sur la résistance R1, mais il faut trouver un moyen d’abaisser son amplitude pour arriver à une tension Vbe comprise à 0,6V (envion). Je verrais mal la survie de notre transistor si nous appliquons directement la tension en sortie du secondaire du transformateur sur notre petit 2N2222.

Mais revenons à nos mouton, la tension en sortie de notre montage à pont de diode, est comme nous l’avons dis de valeur moyenne égale à

Umoy = (2*Umax*1,414) / 3,14  = (2*12*1,414)/3,14 = 10,8V. Ce qui nous intéresse est la valeur moyenne puisque nous travaillons sur des signaux continus, et la valeur efficace ne nous intéresse pas. On devrais donc trouver une résistance du genre R1=(U-Vbe)/Ib avec U la tension en sortie du secondaire du transformateur, mais en ce qui concerne le courant il est de combien ?

Si la tension en sortie du pont de diode est de Umoy=11V (par arrondis),  et que pour un courant Ic=1mA lorsque le transistor est saturé le gain donné par le constructeur pour une saturation est de 10 soit Ib=Ic/10=0,1mA la résistance R1=(11-0,6)/0,0001=104k. Or !! vous allez me dire que le transistor sera toujours saturé pour une tension de 11V ? et bien non, puisque la valeur de la tension va évoluer de 0V à 12*1,414 sur une fréquence de 100Hz. Et la j’aimerais qu’on rentre un peu plus dans le détail car nous pouvons changer la valeur de la résistance et faire une moyenne au niveau du courant, je m’explique :

Lorsque la tension est à son maximum soit 12*1,414 =17V Ic = 1mA choix arbitraire (transistor saturé), la tension va diminuer et le courant Ib aussi, puis arrivé à une valeur de 0,6V nous somme à la limite du blocage du transistor,  ainsi il ne va plus être passant et dans ce cas se bloquer. Nous suivons la tension grâce au courant circulant dans la base du transistor.

PIC12F675

Non ! Ne prenez pas peur, ce n’est pas le but, après tous il faut bien que notre montage fonctionne !! Commençons d’abord à savoir ce que nous allons faire avec le PIC 12F675. Dans un 1er temps, il faut récupérer le signal sur la patte collecteur du transistor qui est à une fréquence de 100Hz, et de l’envoyer sur une des broches du PIC, d’ailleurs j’ai décidé de choisir la broche AN0, comme entrée Analogie/Numérique du bit 0. Vous l’avez surement compris, le PIC doit traduire une tension analogique en une tension numérique exploitable par programmation qui est en langage MikroPascal.

Analogique en numérique (A/D Analogue/Digital en Anglais)

En se référant au datasheet du constructeur qui fait 118 pages, il faut trouver un moyen de convertir de l’analogique en numérique, et c’est ce que donne le chapitre « Analog-to-Digital Converter (A/D) » (conversion A/N). Comme vous pouvez le constatez il n’y a pas de quartz, j’utilise le quartz interne au PIC12F675 qui lorsque nous calibrons celui-ci nous obtenons une fréquence de 4Mhz, alors, pourquoi pas l’utiliser après tous.

Bon maintenant que nous avons configuré la fréquence qui va cadencer notre PIC, il faut revenir sur la broche AN0, il y’a deux registre ADCON0 et ANSEL.

Allons déjà voir le registre ADCON0 et mettons le bit ADON à 1, car il permet d’activer le module de conversion Analogique/Numérique, puis le bit ADFM qui permet de justifier le LSB au bit 0 en partant de la droite. Maintenant regardons le registre ANSEL et mettons le bit ANS0 à l’état 1 afin d’assigner la broche AN0 comme une entrée Analogique.

Oscillateur de 4Mhz ou 1Mhz ?

Nous avons vue précédemment que le PIC 12F675 a un oscillateur interne de 4Mhz. Très intéressant vous ne trouvez pas ? Oui ! Mais attention à ce que nous préconise le datasheet concernant cet oscillateur, il faut tourner les bonnes pages et sachant que nous parlons d’oscillateur il faut aller faire un tour du côté des timers, et oui !! Qui dis timers dit temps et  fréquence (f=1/T). Cela tombe bien si on utilise le timer 0, l’ horloge interne ou externe (via un quartz) nous obtenons une fréquence divisé par 4 (Fosc/4), et bien puisque nous utilisons l’oscillateur du PIC de 4Mhz, celui-ci va osciller à Fosc/4 soit 1Mhz.

En ce qui concerne le timers 1, le bit TMR1CS, lorsqu’il est à 0 nous retrouvons aussi (Fosc/4). Et bien vous avez compris dans tous les cas le quartz interne au PIC12F675 enverra des signaux cadencé à 1Mhz, (à savoir que L’oscillateur interne est sur une fréquence moyenne proche de 4 MHz mais pas calibrée exactement).

Réglage de l’oscillateur interne

Comme nous venons de le voir, la précision de l’oscillateur interne est de (+/-1% datasheet), vous vous rendez bien compte que ce n’est pas la peine de compter sur quelque chose de pas précis surtout en électronique !!! Heureusement pour remédier à ça, il existe des timers, et nous en avons parlez précédemment, justement c’était fait exprès ;-).

Le rôle du timer est de cadencé le PIC correctement en comptant le nombre de bits, pour par la suite déclencher un débordement, c’est le rôle du bit INTCON.T0IF. Lorsque le timer aura atteint la valeur réglé via MikroPascal, ce bit T0IF passera à 1, et il faudra le repasser à zéro pour que nous recommencions le cycle. Le datasheet du PIC12F675 précise que le timer 0 est sur 8 bit soir 2^8=256 valeurs (si on compte le zéro cela donne 255). D’autre part, nous pouvons régler la vitesse de comptage en réglant les valeurs des bits dans le registre OPITON_REG qui sont les bits PS0/PS1/PS2. Essayons de comprendre leurs rôle avant de se lancer dans des calculs à ne plus en finir.

  • PS0/PS1/PS2 = 0 lorsque tous ces bits sont à zéro nous nous retrouvons avec un ratio de ½ ce qui veut dire F=1/T / Ration , soit F=(1/T) / (1/2) ce qui donne F=2/T

    T=2/F soit T=2/1000000=0,000002sec (0,000002*255(valeurs)=0,0005112sec.

     

  • PS0/PS1/PS2 =1 lorsque tous ces bits sont à 1 nous nous retrouvons avec un ratio de 1/256 ce qui veut dire F=1/T / Ration , soit F=(1/T) / (1/256) ce qui donne F=256/T

    T=256/F soit T=256/1000000=0,000256sec (0,000256*255(valeurs)=0,065128sec.

Récapitulons…

Bon ! Essayons maintenant de regrouper tous les éléments importants, nous avons parlé de l’horloge interne du PIC soit 4Mhz, mais que celle-ci passede 4Mhz à 1Mhz à cause du Fosc/4. Maintenant en utilisant le timer 0 qui compte sur 8bit nous arrivons à 255 valeur (en comptant le zéro). Lorsque nous activons le timer, le signal de l’horloge qui arrive est automatiquement divisé par le ration (ce qu’on appelle PRESCALER), ce ration dépend du timer utilisé.

Ce qu’il faut retenir, c’est que si on utilise un quartz ou horloge interne dans tous les cas la fréquence ser divisé par quatre, et pour affiné l’oscillation de l’horloge nous passons par une prescaler qui automatiquement divisé le signal par la valeur du ratio qui peut prendre des valeur de (1/2 ou ¼ ou 1/8 etc…)

Fréquence de 100Hz combien de bits ?

Enfin nous y voilà !! Le signal étant redressé nous obtenons une fréquence de 100Hz soit 10ms nous avons vu que lorsque les bits sont PS0/PS1/PS2 sont tous à l’état 0, nous obtenons une précision de 0,5ms, et lorsqu’ils sont PS0/PS1/PS2 tous à l’état 1 nous avons une précision de 65ms.

Prenons un ratio de 1/2, ce qui donne une précision de 0,5ms, ce qui serait astucieux c’est de savoir au bout de combien de fois le timer va arriver à 5ms soit 10 fois (0,5ms*10=5ms). Et bien incrémentons une valeur que je nommerais i avec la fonction Inc(i) de Mikropascal et lorsque cette valeur va arriver à 10 fois je vais demander àce que la sortie GPIO.1 soit à 1.

5ms

(clique pour agrandir)

Ah ! Déjà c’est un bon début, réfléchissons encore un peu pour que cela prenne un forme, nous avons vu la détection du passage à zéro de la sinusoïde, il faut maintenant que lorsque nous détectons le passage du 0V de la sinusoïde la sortie GPIO.1 repasse à l’état 0, c’est pour cela que je vais raccorder la sortie 100Hz sur la broche GPIO.2 de mon PIC12F675, puis lire la tension quand celle-ci sera supérieur ou proche de 5V dans ce cas la sortie GPIO.1 repassera à 0V.

Detection

On remarque bien à 5ms la sortie GPIO.1  est à l’état haut et arrivé à la détection du zéro la sortie  GPIO.1 retombe à 0V.

Impulsions

Faisons encore mieux,

Impulsions 3

c'est pas mal qu'est ce que vous en pensez?

Aperçu du fonctionnement par graphes

Après plusieurs lignes de code nous obtenons quelque chose qui ressemble à ça...

Ddd

 

 

 

 

(Clique pour agrandir)

---------------------------------------------------------------------------------------------------------------------------------------------------------------

Logiciel du PIC

Demo_001

Merci de rajouter à la suite du programme

begin

init;

While true do

begin

//

end;

end.

---------------------------------------------------------------------------------------------------------------------------------------------------------------

Circuit(s) imprimé(s) 

Aucun.

--------------------------------------------------------------------------------------------------------------------------------------------------------------- 

Historiques

- 24/05/15

Première mise à disposition.

Créer un site gratuit avec e-monsite - Signaler un contenu illicite sur ce site

×