tensions variables et PWM

Jacques ROBERT

Senior Member
Est-il possible d'entrer une tension variable pour sortir en PWM dont le rapport cyclique soit proportionnel à la tension et si oui ,en utilisant quelles commandes en BASIC? je n'ai pas suffisamment de connaissances en anglais pour traduire les Cdes du Manuel2.Merci d'avance.
 

PieM

Senior Member
Bonjour,

Est-il possible d'entrer une tension variable pour sortir en PWM dont le rapport cyclique soit proportionnel à la tension et si oui ,en utilisant quelles commandes en BASIC? je n'ai pas suffisamment de connaissances en anglais pour traduire les Cdes du Manuel2.Merci d'avance.
Oui, bien sûr; les commandes PWMOUT et PWMDUTY sont à utiliser dans ce cas.

Pour PWMOUT, il est caractérisé par PWMOUT pin, period, duty cycles
Pin étant la broche de sortie, period est la période d'un cycle, et duty cycles est le rapport cyclique.
Toutefois, le rapport cyclique n'est pas une valeur entre 0 et 100, mais dépend de la fréquence (la période) choisie initialement.

Il est possible de faire le calcul, mais le mieux est d'utiliser Programming Editor:

Après avoir défini le type de picaxe dans Menu Affichage /options;
Menu PICAXE
> Wizards > pwmout...
définir la fréquence du pwm en Hz (qui devrait être fixe dans votre cas)
puis Duty cycle : mettre 100 puis appuyer sur calculate.

Par exemple pour un 20M2, 5000 Hz de fréquence, va donner pour un rapport cyclique de 100% pwmout B.1, 199, 800

à partir de ça, le rapport cylique variera entre 0 et 100% pour une valeur duty cycles variant entre 0 et 800.

PWMDUTY permet de changer uniquement ce rapport, à condition d'avoir initialisé la commande avec un PWMOUT.
Dans l'exemple, PWMDUTY pin,400 donnera donc un rapport cyclique de 50%

Selon la fréquence choisie, la commande issue du calcul peut préciser qu'il faut utiliser un diviseur pwmdiv16 par exemple.
Dans tous les cas, suivre le résultat du calcul pour 100%.

La tension variable lue par un READADC, par exemple, donnera une valeur comprise entre 0 et 255 qu'il suffira de mettre à l'echelle en fonction du PWM souhaité.

Attention donc à ce qu'une modification de la période (donc la fréquence) changerait le rapport cyclique !
 

fuse

Senior Member
Bonjour PieM,

Par exemple pour un 20M2, 5000 Hz de fréquence, va donner pour un rapport cyclique de 100% pwmout B.1, 199, 800
Tout à fait d'accord mais attention, j'ai eu le problème suivant avec un 20X2 et Logicator : le calcul est valable pour une fréquence de Picaxe de 4MHz, or la série X2 (et M2) fonctionnant à 8 MHz, il est indispensable de positionner setfreq m4 avant la commande pwmout sinon la fréquence obtenue sera double (10Khz...):)

Cordialement
 

PieM

Senior Member
Bonjour Fuse,

J'avoue mon ignorance de ce qui touche à Logicator !
Par contre, dans P.E., la fenêtre de calcul du pwm, demande de préciser la fréquence d'horloge du Picaxe. Et je n'en ai pas parlé en plus !
Il est vrai que souvent on oublie qu'elle est la fréquence de base du Picaxe utilisé ... moi le premier dans l'exemple cité !! :eek:


Merci pour ta remarque très judicieuse ! :)
 

Jacques ROBERT

Senior Member
J'ai bien suivi vos conseils et réalisé ce qui suit:init:- pwmout B.4,249,1000-main:-readadc C.4,b1-pwmdutyB.4,b1-goto main- Résultats:fréq:4kh,OK,mais variation du rapport cyclique sur 1/3 de la période seulement.Potentio de 47kohms entre le 0v et +4,5v sur C.4.Que faire pour que le rapport cyclique balaye la totalité de la période?j'ai essayé de modifier 1000 mais ça ne change rien. C.4 varie bien entre 0 et 4,5 ,il doit se passer quelque chose au niveau de b1,mais quoi?Si vous avez une idée ,merci d'avance.A+.
 

PieM

Senior Member
J'ai bien suivi vos conseils et réalisé ce qui suit:
Code:
init:
 pwmout B.4,249,1000
main:
readadc C.4,b1
pwmdutyB.4,b1
goto main
Résultats:fréq:4kh,OK,mais variation du rapport cyclique sur 1/3 de la période seulement.Potentio de 47kohms entre le 0v et +4,5v sur C.4.
Que faire pour que le rapport cyclique balaye la totalité de la période?j'ai essayé de modifier 1000 mais ça ne change rien.
C.4 varie bien entre 0 et 4,5 ,il doit se passer quelque chose au niveau de b1,mais quoi?Si vous avez une idée ,merci d'avance.A+.
Bonjour,
lisez les conseils en tête de forum pour la mise en forme de vos posts... ça aide à la lecture pour les autres. :)

b1 , résultat du readadc, varie de 0 à 255
duty cycle doit varier de 0 à 1000, donc ce ne peut être b1.

Il faut poser :
w1 = b1*4 MAX 1000 (limite la valeur maxi de w1 à 1000)
pwmduty B.4,w1
 

Jacques ROBERT

Senior Member
Mon cher PieM merci ça marche de 0à100% et maintenant je vais pouvoir m'amuser avec ma radiocommande.Excusez moi pour la mauvaise présentation de mon programme,je ne recommencerais pas.Cordialement.
 
Last edited:

Jacques ROBERT

Senior Member
Bonjour à la communauté,j'ai un nouveau petit problème:quand on écrit:
pulsin C.3,1,b1
on mesure la longueur du puls et le résultat est inscrit dans "b1",mais comment connaitre la valeur de "b1" pour l'utiliser dans des commandes comme:
pwmout C.2,xx,xx
pwmduty C.2,w1
w1 dépendant de b1.Pouvez vous m'éclairer,je travaille avec 08M2 ou 14M2 ;merci d'avance.
 

PieM

Senior Member
Bonjour à la communauté,j'ai un nouveau petit problème:quand on écrit:
pulsin C.3,1,b1
w1 dépendant de b1.Pouvez vous m'éclairer,je travaille avec 08M2 ou 14M2 ;merci d'avance.
Bonsoir,

l'argument de pulsin est une variable de type word. donc érire : pulsin C.3,1,w1.
 

Jacques ROBERT

Senior Member
Bon,je veux bien utiliser w1 au lieu de b1 ,mais je ne connaitrais toujours pas la valeur de w1 en micro ou millisecondes;ce qui me manque,c'est la possibilité de connaitre la durée de l'impulsion;y-a-il un moyen de l'afficher à l'écran?J'en ai besoin dans l'utilisation des Cdes :pwmout C.2,xx,xx suivie de :pwmduty C.2,w1.Tout ça pour résoudre un problème de radio-commande de modèle réduit bateau:créneau variant de 1à2ms avec une position de repos à 1,5ms.Le moteur tourne dans un sens de 1à1,5ms et inverse de1,5à2ms mais dans les deux cas la meme variation du PWM .Voilà...voilà.Bon il est 22h50 c'est l'heure du DODO bonne nuit et peut etre à demain!!Salutations Electroniques.
 

PieM

Senior Member
Bonjour,

je veux bien utiliser w1 au lieu de b1
Mais si vous ne voulez pas, c'est votre problème ! :rolleyes:

Visiblement, vous n'avez pas lu le manuel... ( le 2, page 160)

PULSIN pin, state, wordvariable
- Pin is a variable/constant which specifies the i/o pin to use.
- State is a variable/constant (0 or 1) which specifies which edge must occur
before beginning the measurement in 10us units (at 4MHz resonator).
- Wordvariable receives the result (1-65535). If timeout occurs (0.65536s) the
result will be 0.


Ce qui veut dire que w1 est un nombre de 10µs si le picaxe est à 4 MHz.

Si c'est pour commander un servo, utilisez l'instruction SERVO et SERVOPOS. c'est fait pour...
 

HOOKIE

Member
Bonjour,
Ma réponse est en fait un renseignement dans la mesure ou je suis novice avec Picaxe (depuis début mars) et votre réalisation m'intéresse car je voudrais générer une tension variable analogique comprise entre 0 V et 2 Volts
pendant une séquence de 1 voire 2 minutes et commander en mode PWM un mini moteur électrique d'un petit véhicule le faisant démarrer accélérer,ralentir ainsi de suite et l'arrêter au bout de 1 minute et le cycle repartirait de façon récurrente.
Tension max du moteur 2 V consommation max 10 à 15 ma
Votre aide me serait précieuse
Salutations
 

PieM

Senior Member
Bonjour,
Ma réponse est en fait un renseignement dans la mesure ou je suis novice avec Picaxe (depuis début mars) et votre réalisation m'intéresse car je voudrais générer une tension variable analogique comprise entre 0 V et 2 Volts
pendant une séquence de 1 voire 2 minutes et commander en mode PWM un mini moteur électrique d'un petit véhicule le faisant démarrer accélérer,ralentir ainsi de suite et l'arrêter au bout de 1 minute et le cycle repartirait de façon récurrente.
Tension max du moteur 2 V consommation max 10 à 15 ma
Votre aide me serait précieuse
Salutations
Bonjour,

Si vous utilisez un Picaxe série M2 a sa fréquence de base, donc 4 MHz, sous une tension de 5V (?), la commande pour avoir une tension moyenne d'environ 2.5 V (car je pense que vous allez mettre un transistor en interface), sera : pwmout pwmdiv16, B.1, 124, 250
Il suffit de faire varier la valeur 250 de 0 à 250 pour que la vitesse change.
Voir à ce sujet la commande pwmduty...
 
Last edited:
Top