Triac et µC

Triac et µC - C - Programmation

Marsh Posté le 10-04-2012 à 11:10:33    

Bonjour,
je veux réaliser un projet (PFA) qui consiste à varier la vitesse d'un ventilateur(220V) en fonction de la tempéature par l'utilisation d'un capteur (sonde NTC) et un microcontoleur Atmega16,je vais  commander le triac  par un MOC3021 ,  
pour la synchronisation avec le secteur c'est à partir du secondaire du transformateur d'alimentation
pour ça j'utilise une commande par variation de phase, càd je dois introduire un retard et faire varier ce retard (entre 0 et 9,99999ms) entre le passage par zéro de la sinusoïde et le pulse d'allumage reçu par le MOC,
ce que je cherche que la tension au borne de la charge (Ventilo) varier avec la temperature par exp:
si la Tp 27C°=>220v, si Tep 25=>180C°....
 
j'ai développé un petit programme de test , mais j'ai pas trouvé les choses que je cherche, voilà le programme en C:

Code :
  1. void main() {
  2. DDRA=0xFE; //PORTA en entrée
  3. PORTA=0;
  4. DDRB=0x00; //PORTB en sortie
  5. PORTB=0x00;
  6. //PINb.B6 c'est l'entrée du signal de secteur (50HZ)
  7. while(1){
  8. if(PINA.B0==1){
  9. PORTA.B6=PINB.B6;// démarrage à 100% de puissance sans retard Tr=0s
  10. } else {
  11. Delay_ms(5); // retard de Tr=T/4=5ms pour une puissance de 50%  
  12. PORTA.B6=PINB.B6;}
  13. }
  14. }


le probleme c'est que la carte parfois délivre une puissance 100% et parfois change cette valeur malgré que je ne change pas la condition de PINA.B0==1
et la mm chose si PINA.B0==0 je crois que le problème c'est au niveau de la largeur de l'impulsion je sais pas comment je peux faire pour fixé cette valeur
donc comment je peux trouvé ces valeurs d'une façon très clairs comment je dois réglé l'impulsion (fréquence) pour assurer ces valeurs??
merci d'avance

Reply

Marsh Posté le 10-04-2012 à 11:10:33   

Reply

Marsh Posté le 11-04-2012 à 19:51:14    

Je comprends pas ton truc, tes DDRA etc, ça devrait être des pointeurs non vu que ça doit être des registres projetés en mémoire ?
 
Ou alors c'est des macros ?
 
Après si les tests choucroutent, il faut peut-être des "volatile" pour que le compilo sache que les valeurs sont modifiés de manière externe.
 
Après je comprends pas ta boucle de régulation, à mon avis ça doit être plus compliqué que ça.
 
Comment tu rends le triac bloqué et comment est-ce que tu le rends passant ?
 
Normalement sa commande reste dans le dernier état connu, donc si Delay_ms() attends le temps donné par rapport au début de l'alternance, si le triac a été rendu passant avec PORTA.B6=PINB.B6 à l'itération du while d'avant, il l'est toujours et tu attends dans le vent.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed