Algorithme de la fonction PWM

Patrice Jean-Paul

Active member
Bonjour Messieurs,

Je cherche à implémenter l'algorithme de la fonction PWM dans un programme.
On possède un Wizard qui donne les paramètres <-> fréquence voulue mais on a pas l'algorithme.

Est-ce que c'est une fonction:
Cas 1 : P0=N1 , R0=N2 , ensuite on fait une boucle B1
Boucle B1: tant que P > 255 or R>1023 faire { P=P/4 ; R = R/4 ; DivX=DivX+1 }

Cas 2: P0=N1, R0=N2 , ensuite on fait une boucle B2 , ensuite on fait P=P-1 et R=R-1
Boucle B2: tant que P > 256 or R>1024 faire { P=P/4 ; R = R/4 ; DivX=DivX+1 }

Dans mon cas:
N1=40000; N1=N1/Vitesse; N1=N1*25;
N2=N1*2

Je pense que c'est plutôt le cas 2 qui est le plus logique.

Ce que je suppose:
La durée "On" du pulse va du compteur P = 0 à 255
La durée "Off" du pulse va du compteur R = 0 à 1023 (ou la durée "On"+"Off" ) ?

Quoi que je fasse je n'arrive pas à retrouver exactement les paramètres du Wizard

Quelqu'un sait il exactement ?

Rq: Je pense que l'algo devrait être donné dans les spécifs.

Nb: je peux donner les sources si besoin.

Bien cordialement,
Patrice
 

PieM

Senior Member
Bonjour,
Je ne comprends pas trop le sens de la demande.
Si on veut connaître les paramètres à partir de la fréquence, le calcul de la période est immédiat, bien que difficile sur Picaxe.
Ensuite les paramètres PWM se calculent aisément.


25934

"La durée "On" du pulse va du compteur P = 0 à 255 "
C'est la période (1/F) qui est définie par 0 - 255
Le OFF est = Période * (100 - duty cycle)

Est-ce que c'est une fonction:
Cas 1 : P0=N1 , R0=N2 , ensuite on fait une boucle B1
Boucle B1: tant que P > 255 or R>1023 faire { P=P/4 ; R = R/4 ; DivX=DivX+1 }

Cas 2: P0=N1, R0=N2 , ensuite on fait une boucle B2 , ensuite on fait P=P-1 et R=R-1
Boucle B2: tant que P > 256 or R>1024 faire { P=P/4 ; R = R/4 ; DivX=DivX+1 }
Pourriez vous etre un peu plus explicite avec vos P, R B N .... Ma boule de cristal est en réparation.
 
Last edited:

Patrice Jean-Paul

Active member
Voici la procédure PWM
On a comme entrée la fréquence: W_Frequence ( de 100Hz à 10kHz )
Le rapport cyclique est toujours 50%

Je suis arrivé à cette procédure par tâtonnements , en utilisant le Wizard.

P0, N0 : valeurs initiales de P et R pour la boucle

DivX : 0=Div1, 1:Div4, 2:Div16 , 3:Div64

Patrice
 

Attachments

Patrice Jean-Paul

Active member
Je ne comprends pas votre fichier excel.
Il y a le switch DivX qui intervient dans le calcul.
Il y a aussi les problèmes de saturation/troncature qui font que la formule est plus compliquée

Patrice
 

MGU

Senior Member
Bonjour,
Le but est de faire un variateur de fréquence de 100Hz à 10kHz, RC 50%.
Je ne suis pas certain qu'un µC soit le plus pratique.
Si l'entrée est déjà une fréquence, quelle est l'origine? Pourquoi un µC ? Je dois rater quelque chose...
Quel type de moteur?
MM
 

Patrice Jean-Paul

Active member
Je rajoute un moteur sur la commande "Z" d'une fraiseuse.
Le moteur pas-à-pas utilisé est un moteur de ~500W avec 80 pas par tour qui est monté sur l'axe de commande avec une division mécanique.
J'utilise une commande électronique de moteur du type DM860

Je rajoute:
1) 3 poussoirs Up / Stop / Down à côté du levier de commande mécanique.
2) 1 Potentiomètre qui permet de régler la vitesse de la tête: de 0.1mm/s à 10mm/s , ce qui donne une fréquence de 100Hz à 10kHz
==> La procédure permet de générer la commande PWM qui est fonction de la fréquence

Le moteur avec la démultiplication fait déplacer le tête de la fraiseuse de 1mm / Tour moteur. Et le DM860 fait 1000 Impulsions/tour.
La tête pèse plusieurs centaines de kg.

J'ai fait une petite carte avec un Picaxe 14M2 pour piloter le moteur.
Le Picaxe est le circuit idéal pour faire ça.

De plus il faut gérer le jeu mécanique et c'est le Picaxe qui le fait.


Rq: Il ne faut pas générer des impulsions erronées car dans ce cas on a "des pastilles en carbure qui volent dans la pièce". Ce n'est pas un montage pour rigoler !!!

Cordialement,
Patrice
 
Last edited:

MGU

Senior Member
Bonjour,
Désolé, je ne connais rien à la commande "Z" d'une fraiseuse...
Le problème est-il de générer un signal carré de 100Hz à 10kHz avec un potar?
Si oui, un XR2206 (par ex.) génère une fréquence F=1/RC : soit C=200nF et R de 470 à 47K (en gros) qui résoudrait le problème. Ce n'est pas linéaire, voir avec un potar log, peut être.
Faire une variation continue avec le PWM d'un picaxe me parait difficile avec le raccordement des diviseurs.
MM
 

PieM

Senior Member
Il s'agit d'une CNC donc. Dans ce cas, d'une fraiseuse, le Z correspond à la profondeur de passe, qui n'est pas en variation continue.
Abstraction faite de cela, le pilote DM860 demande une impulsion mini de 2.5 µs. Il n'y a aucune obligation d'un rapport cyclique quelconque.
Donc un simple picaxe 08M2 est capable piloter ça avec des instructions du type pulsout qui peuvent générer même à 4 MHz de 200 kHz à 0 Hz.
Comme Michel, je ne comprends toujours pas sous quelle forme est l'entrée.

Dans votre programme est écrit : W_Pwm_P = W_Pwm_P / W_Vitesse
or W_Pwm_P est selon votre définition la période du PWM. Et si W_Vitesse est une vitesse le résultat est 1/ vitesse²
 
Last edited:

Technoman

Senior Member
... pas générer des impulsions erronées ...
Vu l'enjeu et l'environnement de travail (industriel), votre carte est-elle résistante aux perturbations (CEM, alimentation)?
Je ne veux pas vous inquiéter, mais que se passerait-il lors d'un reset intempestif ou d'un plantage de votre microcontrôleur pendant un usinage?
 

PieM

Senior Member
Bonne remarque de Technoman! car si le DM860 est conforme pour des applis industrielles, le Picaxe, lui ne l'est absolument pas.
 

Patrice Jean-Paul

Active member
Réponse à Technoman: Oui c'est pourquoi je sécurise le programme au maximum ( plein de tests supplémentaires). S'il y a une coupure réseau, tout s'arrête , les moteurs , sauf la visu numérique qui est sauvegardée.
J'ai mis le Picaxe dans une boite presque hermétique pour éviter les parasites. Dés qu'il y a un manque d'alim le Picaxe arrête et quand le courant revient ça ne repart pas tout seul.
 

PieM

Senior Member
La conformité machine ne se réduit pas à mettre dans une boite presque hermétique pour éviter les parasites !!. Il y a des normes et l'utilisation d'un picaxe dans ces conditions n'est pas recevable. Je suis désolé. Donc si c'est pour une utilisation personnelle libre à vous. Mais en aucun cas vous ne pouvez faire conduire une machine ainsi modifiée par une personne extérieure.
Concernant ce que j'ai écrit, il s'agit de ce qui est dans votre programme !
Et pour finir on peut très bien couvrir cette plage de fréquence avec un pwm, sans avoir recours au diviseur, en ne faisant varier que la variable période. 123 Hz -> 10417 Hz
 

Technoman

Senior Member
Traduit de la page web de Microchip, le fabricant du microcontrôleur :
https://www.microchip.com/en-us/about/legal-information/general-product-legal-information
"L'utilisation des appareils Microchip dans des applications de survie et/ou de sécurité est entièrement sous la responsabilité de l'acheteur ..."

Revolution Education, en tant que concepteur de l'interpréteur et des outils de programmation, applique sans doute le même principe.

Pour les systèmes fiabilisés, je connais trois principes avec, dans tous les cas, des précautions de protection vis à vis des perturbations :
  • circuit unique mais ultra-fiabilisé (prix des composants multiplié par 10 voire plus)

  • système à circuits redondants composé de deux chaînes de traitement de l'information identiques ou encore mieux, conçu avec des composants différents (processeurs), par des équipes différentes, devant délivrer une information identique pour commander des actionneurs, sinon blocage

  • toujours des circuits redondants mais composé de trois chaînes, puis vote 2 sur 3, là où il n'est pas admis d'aboutir à un blocage
Il y a eu nombre d'incidents et d'accidents d'où la mise en place de normes CEM, prises en compte dès la conception. Avant, chaque entreprise définissait et menait ses propres tests avec des outils "maison", parfois rudimentaires.
 

PieM

Senior Member
"Le moteur pas-à-pas utilisé est un moteur de ~500W avec 80 pas par tour "
Un moteur pas a pas ne se définit pas en puissance, laquelle ne veut absolument rien dire.
Par contre la notion de couple nécessaire pour faire bouger "La tête (qui) pèse plusieurs centaines de kg." (??) est primordiale car viennent en jeu la notion d'inertie et d'accélération liée au mouvement, ainsi que les rendements mécaniques.
Votre contrôleur ne peut gérer que 6A sur les bobinages qui font 1 ohms maxi sur des NEMA34. Donc un couple relativement faible.
Un moteur pas à pas est destiné non à une commande en vitesse mais en déplacement. Pour une commande de profondeur de passe d'outil, ça pourrait se comprendre, mais pas pour ce que vous voulez faire qui est plutôt le domaine du moteur brushless.
"Le Picaxe est le circuit idéal pour faire ça."; là non plus, c'est l'inverse puisque le picaxe contrairement à d'autres µcontrôleur n'est pas adapté pour gérer des fréquences, mais leur inverse.
En résumé, beaucoup d'incohérences dans vos messages, vos programmes, et votre "Ce n'est pas un montage pour rigoler !!!" me fait douter du sérieux de votre projet.
 
Top