Question:
PIC mesurant la longueur d'impulsion PWM
Chris
2012-07-08 14:13:15 UTC
view on stackexchange narkive permalink

Je ne fais que commencer avec les processeurs PIC, principalement en raison d'une pénurie de PICAXE plus simple chez mon détaillant local. Ma question est, comment puis-je lire la longueur d'une impulsion PWM sur une certaine broche d'entrée (analogue à la commande PULSIN sur les PICAXE). J'utilise l'IDE MPLab, et le PIC spécifique en question est le 12F683.Deuxièmement, (désolé de combiner deux questions en une), existe-t-il des bibliothèques qui contiennent des fonctions `` communes '' (sortie PWM, prise en charge d'i2c, etc. )? Google tourne à sec, mais il me semble que de telles bibliothèques doivent être là-bas, quelque part ... Merci pour toute aide!

EDIT: le langage est C, et le signal PWM est la sortie d'un récepteur RC destiné à un servo, donc, c'est une impulsion haute de 1-2 ms toutes les 20 ms (si je comprends bien)

Vous avez oublié de mentionner la langue que vous utilisez. Assembleur, C, Jal, peut-être Pascal?
ou COBOL peut-être? :-)
Aussi la fréquence du PWM
Apparemment, la puce 12F683 a un module "capture / comparaison / PWM" qui vous permet de chronométrer la durée d'un événement sur une broche donnée. Maintenant, l'astuce est de trouver le code qui exécute ceci, M'chip a un exemple de code, mais seulement pour le PIC18Fxx, je vais essayer quand j'aurai les puces ...
Voir la partie options dans ma [question] (http://electronics.stackexchange.com/q/35050/5035) pour avoir une idée de la façon dont les choses fonctionnent.
C'est un lien seulement (je n'ai pas le temps maintenant de le résumer, donc je ne le poste pas comme une réponse), mais cela peut vous aider: http://www.bobblick.com/techref/projects/sv2hb/sv2hb2 /sv2hb2.html
Trois réponses:
Olin Lathrop
2012-07-17 16:47:29 UTC
view on stackexchange narkive permalink

Il existe différentes manières de mesurer la largeur des impulsions entrantes. Ce qui est le plus approprié dépend de la largeur des impulsions, de la précision dont vous avez besoin et des périphériques dont dispose votre PIC. Certaines possibilités sont:

  1. Utilisez deux modules CCP en mode capture. Ce n'est pas possible pour votre PIC particulier puisqu'il n'a qu'un seul module CCP, je le mentionnerai quand même pour les autres ou au cas où vous changeriez le PIC. Un module CCP en mode capture saisit un instantané de la minuterie 16 bits libre 1 sur le bord d'une broche d'E / S. Avec deux de ces captures, une pour chaque front, vous les soustrayez pour obtenir la durée de l'impulsion.

    Cette méthode permet les impulsions de durée la plus courte et a la plus grande précision, mais prend deux modules CCP.

  2. Utilisez un seul module CCP et retournez le bord sur lequel il capture dans une interruption déclenchée par la première capture. Cela a la même précision et résolution que le n ° 1 et n'utilise qu'un seul module CCP, mais nécessite que l'impulsion ait une largeur minimale afin que le programme d'interruption ait le temps de saisir la valeur capturée et de changer la polarité du bord de capture.

  3. Capturez le minuteur de fonctionnement libre 1 dans le firmware à chaque bord, puis faites la soustraction comme dans # 1 et # 2. Cela ne nécessite aucun module CCP, mais il doit y avoir un temps minimum entre les fronts pour que la routine d'interruption fasse son travail. Il a également un peu plus d'erreur en raison d'une certaine incertitude dans la réponse d'interruption, et éventuellement d'un nombre variable d'instructions de la routine d'interruption s'il n'est pas codé soigneusement.

  4. Minuterie de porte 1 de l'impulsion. Faire en sorte que le front arrière provoque une interruption, qui lit ensuite la valeur du temporisateur 1 et la réinitialise éventuellement pour l'impulsion suivante. Cela a une bonne précision et résolution, mais nécessite un minimum de temps entre les impulsions pour que l'interruption saisisse la valeur du minuteur 1 et se prépare pour l'impulsion suivante.

Il existe également d'autres méthodes, mais sans en savoir plus sur les caractéristiques de vos légumineuses, cela ne vaut pas la peine d'y consacrer du temps. Étant donné que votre PIC a un seul module CCP et une minuterie 1 avec option de déclenchement, les méthodes 2 et 4 méritent d'être considérées. Encore une fois, il serait utile d'en savoir plus sur les caractéristiques des impulsions.

Une chose que je n'ai pas connue est la gestion du débordement pour les impulsions longues, mais si vos impulsions sont connues pour être suffisamment courtes, ce n'est pas un problème.

Méthode n ° 4.Je sais que l'on peut obtenir "automatiquement" la largeur d'impulsion comptée (par incréments de minuterie) en mode de porte à impulsion unique.Vous pouvez également avoir une période complète en mode simple + bascule.Quelle est la bonne façon de calculer le pouls en% si vous ne pouvez aller que pour le pouls ou pour la période (un à la fois)? Merci beaucoup!
hli
2012-07-17 16:10:28 UTC
view on stackexchange narkive permalink

Microchip fournit une collection de trucs et astuces, contenant de nombreuses (petites) solutions utiles à de nombreux problèmes. La partie 3.4 fournit une solution pour mesurer une largeur d'impulsion (avec la fonctionnalité de capture / comparaison, comme @Chris l'a mentionné correctement). Il explique ce que vous faites, mais ne fournit aucun code source (mais avec la fiche technique 12F683, il devrait être assez facile de coder ceci en C).

À votre deuxième question: Microchip fournit de telles bibliothèques uniquement pour leur série PIC18 et plus, vous n'avez donc pas de chance avec le PIC12. Mais il existe quelques autres dépôts de exemples de code, que vous pouvez utiliser comme base pour votre travail.

Zviadi Varshanidze
2013-08-17 16:41:33 UTC
view on stackexchange narkive permalink

En ce qui concerne les bibliothèques, vous pouvez utiliser le compilateur mikroC C pour PIC de MikroElektronika. La version gratuite qu'ils fournissent limite la taille binaire de sortie à 2 Ko (ce n'est pas un problème avec PIC12F683 car sa mémoire programme est également de 2 Ko). Le compilateur est livré avec de nombreuses bibliothèques utiles comme Pwm, Eeprom, Uart, Manchester, etc. J'utilise cet IDE pour jouer avec PIC12F683 depuis un moment, c'est assez facile de s'y habituer.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...