Software PWM génération?

E

emax0198

Guest
Comment un logiciel de génération PWM 8 sorties peuvent être mises en œuvre?

En fait, je tiens à mettre en œuvre 8 sorties PWM 8 servos de conduire comme un générateur PWM hardware.Il suffit de mettre les valeurs de 8 16-bit des registres et mise à jour de la largeur d'impulsion de sortie PWM respectifs.Y at-il une technique standard pour ce faire?

 
Salut emax0198,
PWM peut être fait en utilisant le logiciel de programmation (s).Mais dans votre demande, il existe de nombreux canaux PWM doivent être créés.C'est presque impossible à cause d'usage général MCU ont habituellement plusieurs fois.Je pense que vous avez eu un meilleur choix
des fins MCU qui offre de nombreux canaux PWM sur une puce.Ils sont souvent axés sur le contrôle moteur MCU.
Observe.

 
Pouvez-vous les noms de tous les microcontrôleurs qui peuvent avoir cette fonctionnalité!

 
QUELQUES 51 APC ont un module pour faire ce genre de chose dans la particuliar SILAB proches.
Aussi je l'ai vu sur le bras Philips LPC2xx
Mais cela peut aussi se faire en douce ..Il vous suffit de créer un tableau avec des valeurs de programmer la minuterie et de l'utilisation d'interruption.
A chaque interruption de la sortie du timer niveau nécessaires sur le PWM lignes et reprogrammer le TIMER de la nouvelle valeur sur la table ..À la fin de la table de recommencer!

 
Salut

Vous mai également envisager PIC18F série, certains ont 8 canaux PWM.

Observe

 
eltonjohn

Je l'ai déjà fait avec des interruptions, mais le problème est que, pour mettre le calendrier à partir de laquelle ces valeurs PWM 8 sorties doivent être produites, des interruptions doivent être utilisées et que beaucoup d'interruptions, il est faible gigue dans chaque servo ...je chose ce
n'est pas la solution!

métal

PIC18F ne compte que 4 resgisters complétées avec 8 sorties, donc il ne peut que conduire 4 servos dans ce cas.

 
Êtes-vous d'utiliser un autre «période» pour chacun des huit sorties PWM?

 
emax0198 a écrit:

Pouvez-vous les noms de tous les microcontrôleurs qui peuvent avoir cette fonctionnalité!
 
salut
je suis jabarok

si vous vous CPLD
il est très facile à faire
i servir à CPLD fait pwm contrôle 32 canaux

 
J'ai l'idée de génération pwm comparer avec 6 unités chacune drviving deux broches de sortie pwm pas avec un micro, mais un dsp de ti moteur spécialement conçu pour applications.the contrôleur processeur TMS320F28xx.my interrompre le programme d'application est fondée.
cette dsp a tous La resorces faire thate.g.timers
etcvous pouvez décider de la fréquence (PLL prévues pour cela), le cycle que vous voulez peut être directement chargé de comparer les registres.visitez www.ti.com
pour plus de détails, des fiches de données.Ajouté après 2 minutes:Je
n'ai pas travaillé avec des microcontrôleurs, mais intels i960, un processeur embarqué a été utilisé par mes collègues pour servocontroller applications.

 
L'article «Balancing D / A conversion sur un Pin", Circuit Cellar # 140, vous apprendre à générer huit-8-bit de résolution sorties PWM (ou delta-sigma 8 sorties) avec un micro,
à l'aide d'un timer interrupt.

Regards, svicent

 
Si votre fréquence PWM est faible, vous pouvez le faire avec les interruptions.(Par exemple, si vous vouliez une PWM de la résolution 8 étapes avec un PIC fonctionnement de 20 MHz PWM la plus rapide, vous pouvez faire est de 2,441 kHz).Huit
n'est pas beaucoup plus difficile
qu'à un seul.Utilisez un compteur pour chaque entrée et ont une routine d'interruption qui exécute à chaque fois que la minuterie déborde.Réglez chaque sortie en conséquence (attention sur votre calendrier et vous devez interrompre l'exécution, avant la fin de votre prochaine interruption).

Si votre fréquence PWM est plus élevé, vous pouvez utiliser un calendrier dédié boucle (et votre microcontrôleur sera bon pour très peu d'autres choses).Si vous utilisez un calendrier dédié boucle, mais en tant que partie de la boucle que vous souhaitez faire un peu d'autres choses, vous devez être prudent sur le calendrier si vous ne voulez pas de gigue.

Je pense que Circuit Cellar vous dira la même chose que svicent dit.Ils expliquent probablement plus elloquently ainsi.

 
emax0198 a écrit:

eltonjohnJe l'ai déjà fait avec des interruptions, mais le problème est que, pour mettre le calendrier à partir de laquelle ces valeurs PWM 8 sorties doivent être produites, des interruptions doivent être utilisées et que beaucoup d'interruptions, il est faible gigue dans chaque servo ...
je chose ce n'est pas la solution
 
Merci les gars, tout ce que vous avez dit est correct.

Mais mon exigence est que le PWM soit 10 bit.Et effectivement, il ya deux choses d'un contrôleur a à faire, aller chercher de la Première tiiming PPM pour chaque canal, puis générer le 10 bit PWM.

Je sais que ce
n'est pas possible sans interruptions.Une interruption est nécessaire pour saisir le moment entre les impulsions pour les PPM et la deuxième interruption est nécessaire pour générer la sortie PWM (timer overflow interruption).Dans cette situation, il est difficile de synchroniser les interruptions si elles sont libres et le fonctionnement du processeur est de faire double emploi.

 
Une solution possible est l'utilisation d'un circuit intégré qui réalise seul cette fonction et que vous ne pouvez contrôler avec le microcontrôleur.

Un exemple en est le dispositif DS1050.Comme il est contrôlé avec le bus I2C vous pouvez prendre
jusqu'à 8 dans votre application.Il existe de nombreux dispositifs de ce genre qui sûrement mieux
s'adapter à vos besoins.<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" />
 
J'ai fait une 8-bit 8-chanel servo contrôleur sur le fonctionnement 89C2051 uC @ 24MHz.
Je l'utilise dans mes bras robot.J'ai découvert que 8-bit PWM résolution est même trop bonne pour la norme R / C hobby servos.Ce que je me promène servos demande 10 bits de résolution.
Avec 256 mesures PWM pour un coup presque tous les servos nécessitent au moins deux sens pour tout changement à tous.
Mon servo contrôleur fait beaucoup d'autres choses comme la série de commandement et de communication de données avec le Ring de tampon de manutention et de Xon / Xoff protocole interne de traitement des données, et ainsi de suite.Chacun de ces huit canaux servo peut être un droit ou une inversion de l'esclave d'un autre canal, peut être un maître canal, peuvent être définies comme constante'1 'ou'0', et a la balistique de contrôle indépendant.Donc, il ya beaucoup de travail à faire, outre le contrôle de ces huit servos.
Plus de trois ans d'utilisation de cet appareil, je
n'ai pas remarqué les problèmes de performance.
J'ai été trop paresseux pour écrire le logiciel de montage,
j'ai donc utilisé pour tous les C servo contrôleur de codage.Si
j'avais utilisé la langue au lieu de réunion, le uC qui sont morts avec l'ennui.
Donc, ne me dites pas que ce petit uC
n'est pas capable de gérer la tâche.
J'ai vendu plusieurs contrôleurs de ce circuit et entendu aucune plainte au sujet de la performance ou de sortie de bruit ou de l'instabilité.
IMHO Ce que vous pouvez obtenir de votre appareil dépend de votre style de programmation et de compétences bien sûr.

Regard, yego

 
J'ai l'uC ADuC 842 et
j'ai besoin d'un exemple de code pour générer les pwm.Je tiens également à générer un signal pwm de deux ondes sinusoïdales amplitude modulation.

 
Hey, long time no post pour moi ...

S'il vous plaît voir mon fil sur plusieurs génération PWM pour un PIC ...

http://www.edaboard.com/viewtopic.php?t=133711

C'est un petit algorithme de génération PWM interupts utilisant et en utilisant peu de ressources.Mais, tout dépend de votre application, PWM période, max / min mark / space ratio,
la résolution etc.Ma conception est seulement de 3 PWM
de fonctionnement
jusqu'à 2kHz, en 8-bits de résolution, et utilise uniquement un timer (et environ 5% du temps CPU par seconde).

Microchip ont une fiche technique pour le logiciel PWM, plusieurs algorithmes sont présentés, en fonction des besoins (peroid, mark / space, yada yada yoda).
http://microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en011070micropuces forum ...
http://forum.microchip.com/tm.asp?m=124387

Donc, mon conseil (sans doute ne vaut rien, mais sa ne fait pas de mal).
Pour autant que je sache, vous avez besoin de 8 PWM, chacune étant bits 10 res.

1.Maintenant, il existe des circuits intégrés qui peuvent le faire, spécifiques à cette fin.Ils mai seulement être conçu de manière à conduire à LED's, mais tout ce qui signifie que vous avez besoin de pilotes MOSFET pour chaque servo, no biggie.

2.Je suis
pratiquement sûr
qu'il existe effectivement certains microcontrôleurs qui ont 8 PWM
du matériel, de 10 bit res.Malheureusement, ils ont tendance à être à la «limite supérieure», 16-bit dispositifs, assez cher (sauf peut-être l'philips, dsPIC et copeaux).En règle générale, que l'on
s'élève dans la gamme de périphériques, ils commencent à ajouter de plus en plus de choses (comme le PWM, plus
de UART, I2C, etc.) Et le prix monte.Dépend de votre «restrictions».Pouvez-vous écrire des programmes pour tout microcontrôleur?ou êtes-vous «fidèles» à une famille en particulier?Qu'est-ce que
le micro est disponible pour vous?La programmation, tous les prix doivent être pris en compte.

3.L'option délicate.Ecrivez votre propre code pour une habile bon marché, facile à obtenir micro.
Maintenant, en ce que je peux voir, vous
n'avez pas mentionné ce que ce micro sera fait,
en dehors de la génération
du PWM.Alors, pourquoi ne pas dédier un micro bon marché à cette fin?Il peut être interfacé avec SPI/I2C, ou même une interface parallèle qui ne va pas empêcher votre PWM trop.Ainsi, si vous avez un PIC16F628A, à pleine peau, il tourne à 20MHz (28Mhz avec quelques problèmes).Maintenant, la seule chose
qu'il ne fait que générer PWMs, avec cette vitesse, je crois que vous pourriez le faire que dans des bêches, avec chambre à revendre.Unfortuneately, vous voulez> 10 bits - délicate.(vous pouvez toujours obtenir un dsPIC, qui sont 16-bit dispositifs,
de sorte que chaque registre est de 16 bits, de sens, un registre pour chaque PWM, rend la vie beaucoup plus facile).Theres un algorithme utilisant un registre pour chaque PWM, et un 'contre' inscrire.Tous ne vous est, à une interruption, décrémenter chacun de ces registres, où un registre atteint 0, vous désactivez la broche qui lui est attribuée.Lorsque le compteur (détermine votre période PWM) atteint zéro, vous réinitialiser tous les pins, et le recharger dans les valeurs PWM.Je
l'ai fait, avec et sans une interruption, la meilleure chose à ce sujet,
en ajoutant plus de canaux PWM
n'est pas vraiment faire une différence dans la taille du code, vous êtes simplement limité par la disposition que vous avez pins.8 ne devrait pas être un problème.

Toutefois, la résolution sera.pour un 8-bit micro, vous
aurez besoin de deux registres pour les 10 peu res.Et decrementing devient un peu plus difficile (décrémenter un registre,
jusqu'à ce
qu'il atteigne 0, puis commencer decrementing la LSbyte
jusqu'à ce
qu'elle atteigne zéro.
Parce que vous le faire (2 ^ résolution), par période, chaque fois que vous "ajouter", une ligne de code à elle, vous êtes effectivement en ajoutant (2 ^ résolution 1024 pour 10 bits)) d'instructions par période.Maintenant, si votre PWM est 2kHz, thats 2000 * 1024 = 2048000 extra instructions exécutées par seconde.

ok, je
suis bien déclamatoire, son tihng difficile à faire, et vous
serez probablement mieux simplement dépenser plus d'argent sur une puce qui fait tout pour vous.Mais je
suis convaincu
qu'il existe des moyens faciles et efficaces de faire les choses.

Bonne chance,

BuriedCode.

 
Merci mon cher, mais je demande ADuC842 une base 8051
à base de PIC pas

 

Welcome to EDABoard.com

Sponsor

Back
Top