Auteur | Message |
ahmed
Modérateur
Messages : 123 Inscrit(e) le: 17/11/2007
|
Posté le 01/07/2009 08:18 | | commande pwm en mikropascal |
salem je veux savoir quel est le principe de la commande pwm et est ce que vous pouvez me donner quelques exemples merci
|
Edité par Administrateur le 01/07/2009 13:02 |
L'homme connaît le monde non point par ce qu'il y dérobe mais par ce qu'il y ajoute. Claudel (Paul) |
|
|
Revenir en haut | Permalien | |
|
ahmed
Modérateur
Messages : 123 Inscrit(e) le: 17/11/2007
|
Posté le 01/07/2009 08:22 | | RE : pwm |
salem je veux savoir qu'elle est le principe de la fonction pwm dans un pic, je sais que que avec cette fonction on peut commander un servo moteur ,et est ce que avec cette fonction on peut réaliser un fonctionnement d'un hacheur
|
L'homme connaît le monde non point par ce qu'il y dérobe mais par ce qu'il y ajoute. Claudel (Paul) |
|
|
Revenir en haut | Permalien | |
Technologuepro
Administrator
Messages : 447 Inscrit(e) le: 15/11/2007
|
Posté le 01/07/2009 11:09 | | RE : commande pwm en mikropascal |
un signal PWM (pulse width modulation) est un signal modulé en largeur d'impulsion MLI c'est à dire tout simplement un signal carré avec un rapport cyclique variable. prenons l'exemple d'un signal carré normal que tu connais ce signal à un rapport cyclique = 0.5 (demi période état haut et demi période état bas) si l'état haut correspond à 5v, la valeur de la tension moyenne du signal est le rapport cyclique multiplié par 5v donc c'est 2.5v. en conclusion ce signal est équivalent à un signal continue de valeur 2.5v pour un moteur. maintenant pour varier la valeur moyenne de la tension qui attaque le moteur on varie le rapport cyclique entre 0 et 1 et on obtient une tension variable de 0 à la tension maximale. pour un moteur 24V on fait varier le rapport entre 0 et 1 donc la tension entre 0 et 24 donc la vitesse entre V nominale à 24V et 0. Pour la programmation l'MLI est préprogrammé il suffit tout simplement de l'appeler (pwm_init et pwm_start) je donnerai prochainement un exemple en mikropascal dans la page téléchargement.
Cordialement
|
Le savoir est une chose qu'on peut pas cacher, la connaissance existe pour être transmise aux autres... |
|
|
Revenir en haut | Permalien | |
ahmed
Modérateur
Messages : 123 Inscrit(e) le: 17/11/2007
|
Posté le 01/07/2009 12:23 | | RE : commande pwm en mikropascal |
merci bien si hatem
|
L'homme connaît le monde non point par ce qu'il y dérobe mais par ce qu'il y ajoute. Claudel (Paul) |
|
|
Revenir en haut | Permalien | |
ahmed
Modérateur
Messages : 123 Inscrit(e) le: 17/11/2007
|
Posté le 01/09/2009 11:00 1251802849.ppas (1 Ko) | | RE : commande pwm en mikropascal |
salem bellahi Mr hatem exolique moi ce programme en faisant les commentaires devant les instructions et merci
|
L'homme connaît le monde non point par ce qu'il y dérobe mais par ce qu'il y ajoute. Claudel (Paul) |
|
|
Revenir en haut | Permalien | |
Technologuepro
Administrator
Messages : 447 Inscrit(e) le: 15/11/2007
|
Posté le 01/09/2009 21:29 | | RE : commande pwm en mikropascal |
Bonjour, Ce programme permet de générer un signal PWM commander par un potentiomètre sur l'entrée analogique AN0 . En effet voici les données du problème : La bibliothèque PWM en mikropascal possède 3 procédures qui sont
- Pwm_Init( fréquence ) c'est la fréquence du signal PWM et qui doit être comprise dans la bande passante du moteur à commander. si cette fréquence est faible ( 1 Hz par exemple) la rotation du moteur va être discontinue rotation pendant les 1 et arrêt pendant les 0 comme moteur pas à pas si cette fréquence est très élevée par exemple 1MHz le moteur ne bougera pas ou peut être il sera grillé
- Pwm_Start; démarrage du signal
- Pwm_Change_Duty(rapport cyclique); le rapport cyclique ici doit être un octet c'est à dire de 0 à 255 donc 0 correspond à un rapport cyclique de 0 et 255 correspond à un rapport cyclique 1 ou 100% exemple je veux un rapport de 0.5 ou 50% j'applique la règle de 3 et je fait Pwm_Change_Duty(128); qui est (255 * 0.5)/1 avec arrondissement
- Pwm_Stop; ordre d'arrêt du signal
Maintenant je veux que le rapport cyclique vient du convertisseur sachant que le convertisseur donne une valeur comprise entre 0 et 1023 sur 10 bits et en plus je veux afficher le rapport cyclique sur un LCD alors quoi faire ?
Voila je dois faire des transformations à la valeur lue par le convertisseur afin de l'exploiter :
t := ADC_read(0); // lecture du convertisseur tlong := t*1000; // multiplier la valeur lue par 1000 pour ne pas perdre cette valeur après la virgule lorsqu'on divise par 1024 t := longint(tlong shr 10) // division entière par 1024 qui est 2 exp 10 ça revient à décaler les bits de 10 positions à droite exemple si je veux diviser un nombre par 2 exp 5 je décale tout simplement ses bit à droite de 5 position c'est plus rapide ! on obtient t variant de 0 à 999 car le max c'est la division entière de 1023/1024000 le rapport cyclique à afficher est de la forme (ch0).(ch1)(ch2) exemple 0.34 ch0 := t div 1000; // diviser t par 1000 ici ch0 est toujours égale à 0 car t ne dépasse pas 999 lcd_chr(2,1,48+ch0); // on affiche (ch0) lcd_chr(2,2,'.'); // on affiche (.) juste après (ch0) ch1 := integer(t div 100)mod 10; // ch1 est le reste de la division par 10 de t divisé par 100 exemple on suppose que t = 645 donc ici ch1 = 6 lcd_chr(2,3,48+ch1); // affichage de ch1 juste après le (.) on obtient (ch0).(ch1) ch2 := integer(t div 10)mod 10; //ch2 est le reste de la division par 10 de t divisé par 10 exemple on suppose que t = 645 donc ici ch2 = 4 lcd_chr(2,4,48+ch2);// affichage de ch2 juste après le (ch1) on obtient (ch0).(ch1)(ch2) j:=2*(ch2+13*ch1); // on recalcule le rapport cyclique ici je ne suis pas d'accord avec ce calcul car il y a beaucoup d'erreurs en effet le rapport cyclique de Pwm_Change_Duty doit être compris entre 0 et 255 moi je fait tout simplement t divisé par 4 -->j:= (t shr 2); c'est plus précis Pwm_Change_Duty(j); // changement du rapport cyclique
voila j'espère que j'étais clair
|
Le savoir est une chose qu'on peut pas cacher, la connaissance existe pour être transmise aux autres... |
|
|
Revenir en haut | Permalien | |
|