Bonjour à tous
Pourquoi il est impossible de fournir une fréquence de 50 Hz à l'aide d'un pic et oscillateur de 4 MHz??
merci d'avance
-----
Bonjour à tous
Pourquoi il est impossible de fournir une fréquence de 50 Hz à l'aide d'un pic et oscillateur de 4 MHz??
merci d'avance
Salut,
Ta demande est un peu floue. Tu dis vouloir fournir Hz, mais quel type de signal (carré, sinus, triangle...)?
Ensuite comment t'y prends-tu actuellement pour tenter d'y parvenir?
Merci de votre réponse
et désolé pour la "non précision"
Pour générer un signal PWM , en utilisant le compilateur mikroc, il faut tout d'abord l'initialiser à l'aide de la fonction suivante:
PWM1_Init(const long freq);
j'ai essayé par plusieurs fréquence inférieure à 250 Hz , le compilateur affiche une message d'erreur (la valeur que j'aie introduit comme argument est fausse !), mais pour des fréquence supérieure à 250 Hz ça marche très bien.
Ma question est pourquoi ??est ce que l'oscillateur qui est le responsable ?? ou autres choses??
merci encore une fois
D'après le datasheet, tu as PWM period = [(PR2) + 1] • 4 • TOSC • (TMR2 prescale value)
Le prescaler du timer 2 est au maximum de 16 et PR2 255.
La période maximale est donc 0.004096 s soit une fréquence minimale de 244 Hz environs. C'est donc une limite technique.
Note qu'en te mettant à 244Hz, cela n'a que peu d'intérêt car tu ne peux pas changer le rapport cyclique de ton PWM.
Donc pour générer telle fréquence il faut augmenter c'est à dire diminuer la fréquence de l'oscillateur à 204800 Hz!!
Merci beaucoup inoxxam
Ou encore faire un 50Hz en soft...
Salut,
quel PIC utilises-tu ?
Il est possible de générer des fréquences très faibles en utilisant 2 timers en cascade mais cela dépend de la référence du PIC que tu utilises...
a+
Il y avait deja eu un sujet simillaire... En effet, a 4MHZ, il est impossible de generer une PWM de frequence 50Hz. d'ailleurs, on peut generer du 50Hz sinusoidal avec la MLI et un filtre passe bas simplement en appliquant les directives suivantes (exemple fonctionnel)
- nombre d'echantillons par periode: 200
- frequence MLI 15 a 20KHz
On chargera selon une cartographie etablie la valeur de la MLI toutes les 100µS (par interruption), au bout de 20ms, on aura ainsi reconstitué la valeur de la periode en MLI grace aux 200 echantillons correspondant a la forme du signal, le filtre passe bas donnant un sinus de bonne qualité en sortie qui aura en effet une frequence de 50HZ...
Ne pas confondre valeur de frequence de MLI avec frequence obtenue si la forme doit etre sinus ou triangle...
Re.
Merci à tous de vos réponses
j'ai deux versions: 16F628A et 16F877A.
Merci encore une fois Franck, c'est très intéressantIl y avait deja eu un sujet simillaire... En effet, a 4MHZ, il est impossible de generer une PWM de frequence 50Hz. d'ailleurs, on peut generer du 50Hz sinusoidal avec la MLI et un filtre passe bas simplement en appliquant les directives suivantes (exemple fonctionnel)
- nombre d'echantillons par periode: 200
- frequence MLI 15 a 20KHz
On chargera selon une cartographie etablie la valeur de la MLI toutes les 100µS (par interruption), au bout de 20ms, on aura ainsi reconstitué la valeur de la periode en MLI grace aux 200 echantillons correspondant a la forme du signal, le filtre passe bas donnant un sinus de bonne qualité en sortie qui aura en effet une frequence de 50HZ...
Ne pas confondre valeur de frequence de MLI avec frequence obtenue si la forme doit etre sinus ou triangle...
Pourriez vous me donner un exemple ? car la notion des interruptions est encore flou pour moi!
A+
Je suppose que c'est pour piloter tes servomoteurs. Si tu utilises un PWM à 50Hz, tu vas perdre 90% de la précision de celui-ci dans le temps-mort entre 2 impulsions et tu ne pourras piloter ton servo que par pas angulaires conséquents.
Pour une première approche, il vaut mieux faire ça avec deux timers. Un premier cadencé à 20ms ou un peu moins met la sortie à 1 en déclenche un second qui va remettre la sortie à 0 quand il va déborder. Ainsi tu as toutes la précision du second timer pour ton réglage d'angle de servo.
Il y a d'autres méthodes, avec un seul timer, avec des PWM, avec des composants externes, mais celle au-dessus doit être de loin la plus simple à coder.
Merci de votre réponse
D'où vient ce résultat (90%)??
Avec un PWM à 250 Hz , j'entend un bruit comme une vibration au niveau du servo! Est ce le même problème?
bonjour,
pour ftorama ne peux on pas realiser une boucle du type
debut
mise à 1 de la sortie (commande pwm)
attendre 1ms (par xemple)
mise à 0 de la sortie
attendre 19ms
retour debut
cordialement
alain
Euh, on utilise jamais le PWM pour piloter un servo type RC... on utilise toujours comme dit Fto une interruption qui synchronise le start d'une impulsion calibree en largeur ayant pour caracteristique comprise entre 1 et 2ms pour avoir le debattement maxi dans les deux sens, et un point milieu a 1.5ms...
A chaque debordement du timer calibré sur 20ms, on recupere l'info pour lancer une impulsion et comme cela, on peut avec un simple petit µC PIC piloter jusqu'a 10 servo sur 8 sorties independantes, on incremente un compteur entre 0 et 9 a chaque debordement timer, et tout le traitement se fait quand la tempo entre 1 et 2ms est finie (on a quand meme 18 a 19ms pour faire toutes les autres taches a temps perdu)...
Si tu utilises 2ms sur les 20 de ta période de rafraîchissement, tu n'utilises que 10% du temps et donc 90% est perdu. Sur un PWM 8 bits, ça reviendrait à n'utiliser en gros que les valeurs de 6 à 32.
@Franck-026 On peut aussi, à chaque fin de pulsation, recharger le timer avec la consigne du servo suivant et "simplement" shifter" un port. Avec des impulsions de 2 ms max, on pilote 10 servos max ou 8 avec des impulsions à 2,5.
Bon, les servos ayant toujours une commande mini de 0,5 ou 1 ms, il y a encore moyen d'optimiser ça mais ça ce complique évidemment et ça devient hors de propos ici.
Tout dépend de l'implémentation du delay(). Si il est à base de scrutation d'un timer pas de soucis normalement. Si il est comme souvent à base d'une boucle calibrée, le délai va s'allonger dès qu'une interruption va arriver par exemple pour la réception de la consigne de position du servo et celui-ci va être pris de tremblements.....si il accepte de bouger.