Répondre à la discussion
Affichage des résultats 1 à 18 sur 18

Arduino - Fréquence PWM



  1. #1
    BenjaminQ

    Arduino - Fréquence PWM

    Bonjour,

    Je cherche à contrôler en fréquence un moteur à l'aide d'un kit ArduinoUno.
    Je souhaiterai pourvoir choisir la fréquence du signal l'alimentant, j'ai pour le moment 2 méthodes :

    -Une première méthode "un peu" barbare : un digital output que l'on définie HAUT pour le temps souhaité, en répétant l'opération de sorte à avoir la fréquence voulue.
    -Utiliser une sortie PWM, et toucher au registre TCCR0B pour diviser la fréquence des PWM (qui est de 62500Hz pour les pins 5 & 6 et 31250Hz pour les pins 9, 10 , 11 & 3) par 1/8/64/256/1024.
    Source : le post de macegr sur ce topic :
    http://forum.arduino.cc/index.php/topic,16612.0.html

    Cependant je voudrais savoir si il était possible de contrôler mon moteur sur une plage de fréquences, par exemple de 80Hz à 250Hz, sans me contenter des fréquences obtenues par les divisions vu au dessus.

    En vous remerciant,
    Benjamin

    -----


  2. Publicité
  3. #2
    BenjaminQ

    Re : Arduino - Fréquence PWM

    Hum, erreur de ma part : la fréquence des PWM est de 500Hz, ceux sont les horloges de l'Atmega qui sont à 62500Hz ou 31250Hz.
    Modifier les horloges modifiera la fréquence des PWM concernés (ils ne sont pas tous contrôlés par la même horloge).

    Voila, rectification faite, mais ma question reste inchangé.
    Merci
    Dernière modification par BenjaminQ ; 27/01/2015 à 10h42.

  4. #3
    Antoane

    Re : Arduino - Fréquence PWM

    Bonjour,

    De ce que je sais, la solution consiste à utiliser un timer et une interruption et à changer l'état d'une broche à intervalles réguliers. Ce n'est pas barbare.
    Tu définies un fréquence de débordement du timer égale à la résolution que tu souhaites avoir sur ton signal de sortie et tu implémentes un compteur et un comparateur dans la routine d'interruption.

    Je ne sais pas à quoi correspondent ces fréquences de ~62kHz et ~31kHz, mais ce ne sont pas les fréquences d'horloges de l'ATMEGA. Plus probablement les fréquences minimales disponibles en sortie du prescaler (prédiviseur) envoyé au timer (gérant le(s) PWM).

    Ce sujet serait davantage à sa place sur le forum électronique.
    Dernière modification par Antoane ; 28/01/2015 à 18h39.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  5. #4
    albanxiii

    Re : Arduino - Fréquence PWM

    Bonjour,

    Citation Envoyé par Antoane Voir le message
    Ce sujet serait davantage à sa place sur le forum électronique.

    En effet. Voilà.

    Pour la modération.
    Not only is it not right, it's not even wrong!

  6. #5
    jiherve

    Re : Arduino - Fréquence PWM

    Bonsoir,
    il suffit de télécharger la data sheet de l'ATMEGA qui va bien (souvent le 328P) de la lire et d’écrire les 10 lignes d'assembleur nécessaires.
    En effet il faut utiliser un timer.
    JR
    l'électronique c'est pas du vaudou!

  7. A voir en vidéo sur Futura
  8. #6
    Qristoff

    Re : Arduino - Fréquence PWM

    La fréquence PWM n'a strictement rien à voir avec la vitesse du moteur !
    On choisit une fréquence PWM selon des contraintes d'ondulations de courant sur un bus DC et pour des contraintes de pollutions CEM.
    La vitesse moteur, c'est la tension et donc le rapport cyclique, si tu as tout compris du PWM.
    Je cherche à contrôler en fréquence un moteur
    cela n'a pas vraiment de sens...
    Dernière modification par Qristoff ; 28/01/2015 à 19h44.
    Tout existe, il suffit de le trouver...!

  9. Publicité
  10. #7
    cubitus_54

    Re : Arduino - Fréquence PWM

    Bonsoir,

    Avec un prédiviseur à 1024 et le pwm à 255 tu peux avoir 30Hz

  11. #8
    Yvan_Delaserge

    Re : Arduino - Fréquence PWM

    Citation Envoyé par BenjaminQ Voir le message
    Bonjour,

    Je cherche à contrôler en fréquence un moteur à l'aide d'un kit ArduinoUno.
    Je souhaiterai pourvoir choisir la fréquence du signal l'alimentant, j'ai pour le moment 2 méthodes :

    -Une première méthode "un peu" barbare : un digital output que l'on définie HAUT pour le temps souhaité, en répétant l'opération de sorte à avoir la fréquence voulue.
    -Utiliser une sortie PWM, et toucher au registre TCCR0B pour diviser la fréquence des PWM (qui est de 62500Hz pour les pins 5 & 6 et 31250Hz pour les pins 9, 10 , 11 & 3) par 1/8/64/256/1024.
    Source : le post de macegr sur ce topic :
    http://forum.arduino.cc/index.php/topic,16612.0.html

    Cependant je voudrais savoir si il était possible de contrôler mon moteur sur une plage de fréquences, par exemple de 80Hz à 250Hz, sans me contenter des fréquences obtenues par les divisions vu au dessus.

    En vous remerciant,
    Benjamin
    On peut contrôler la vitesse d'un moteur avec de la PWM, c'est-à-ire en variant le rapport cyclique d'un créneau.
    Ou avec de la PFM, c'est à-dire en envoyant des créneaux de durée fixe, mais à fréquence variable.
    Pour des moteurs bon marché, dont les frottements mécaniques sont relativement importants, un problème peut se poser si on souhaite le contrôler en PWM à très faible vitesse. Dans ce cas, la durée des créneaux est très faible et les frottements empêchent que le moteur se mette à tourner. En augmentant la durée des créneaux, le moteur va démarrer brusquement, à une certaine vitesse, mais il ne sera pas possible de contrôler sa vitesse au-dessous de ce seuil avec de la PWM.
    En revanche, en utilisant de la PFM, on peut mesurer la durée minimale d'un créneau qui permet d'obtenir une rotation du moteur. En utilisant des créneaux de cette durée à fréquence variable, on arrive à obtenir des vitesses de rotation plus basses qu'avec de la PWM (mais manquant un peu de fluidité).

    Il faut donc choisir: PWM ou PFM.

    Il y amoyen d'obtenir de l'Arduino un signal PWM à des fréquences autres que 450 Hz, en intervenant sur certains registres, mais la fréquence ne pourra pas être variée en continu. On intervient sur des compteurs divisant la fréquence d'horloge.
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  12. #9
    BenjaminQ

    Re : Arduino - Fréquence PWM

    Me revoilà,
    Je tiens donc à vous remercier pour vos réponses, j'ai pu m'appuyer dessus pour m'éclaircir les idées sur le sujet.

    Antoane : Hum, je vais explorer cette piste alors !

    Jiherve : C'est la première chose que j'ai fais, mais je n'ai pas encore le niveau pour me débrouiller avec les seules infos de la datasheet ; c'est bien dommage :'(

    Qristoff : Effectivement ! Je me suis embrouillé et aurai du réfléchir un peu plus avant de poser une question sans être à jour sur ce point là.

    Yvan_Delaserge : C'est bien ce que je pensais après avoir parcouru pas mal de topic sur ce sujet, pas possible de varier la fréquence en continue. Mais au final, comme le disait Qristoff, c'est plus le rapport cyclique qui m'importe donc tant pis.
    Ensuite pour les problèmes physiques (frottements, démarrages brusques) je vais me concentrer là dessus dorénavant, enfin les moteurs que je suis amené à utiliser sont des ERM/LRA (moteurs à masse excentrique, pour produire des vibrations). Ainsi le temps de commande est très court.

    Je voulais justement me renseigner sur les phénomènes de l' "Overdrive" et de l' "Active brake" pour commander au mieux les moteurs (il existe des drivers qui permettent de le faire sans problème, mais j'aimerai comprendre le principe et réussir à le réaliser par mes propre moyen).
    Cela permettrait de contrôler les moteurs plus efficacement, cad temps de démarrage/freinage + court (dans le but de travailler au maximum avec les

    Ce qui suit n'est que supposition de ma part, j'essaye de réfléchir un peu par moi même :
    L'overdrive consisterai à alimenter le moteur au dessus de sa tension nominale pour que celui-ci atteigne plus vite sa vitesse de rotation nominale, puis de passer à la tension nominale.

    Et l'active brake...et bien...pas trop d'idée, mais je vais garder les seules que j'ai pour moi, j'ai peur de vous faire saigner les yeux


    Merci à vous.
    Cordialement,
    Benjamin

  13. #10
    Antoane

    Re : Arduino - Fréquence PWM

    Bonjour,

    Effectivement, s'il s'agit d'un moteur à courant continu, inutile de changer la fréquence de découpage, tu en choisis une qui convienne : suffisament grande pour que le moteur ne voit que la moyenne et de préférence hors de la bande audio (>20kHz).
    Et tu varies le rapport cyclique.

    aktiv-brake : alimentation du moteur en inverse pour accélérer l'arrêt. Entre une tension nulle (court-circuit) et la tension d'alim appliquée en inverse. Un second transistor suffit pour mettre le moteur en court-circuit alors qu'il faut un pont en H complet pour l'alimenter en inverse (+ une mesure de la vitesse du moteur* pour savoir quand il est à l'arrêt). Si tu pilotes déjà le moteur dans les deux sens de rotation, il n'y a bien sûr rien besoin d'ajouter.

    * ou une mesure du courant et un rien de programmation additionnelle.
    Dernière modification par Antoane ; 30/01/2015 à 10h28.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  14. #11
    BenjaminQ

    Re : Arduino - Fréquence PWM

    Citation Envoyé par Antoane Voir le message
    Entre une tension nulle (court-circuit) et la tension d'alim appliquée en inverse.
    Les 2 solutions permettent l'active brake ?
    Je prend note pour l'alimenter en inverse, je devrais m'en sortir.

  15. #12
    jiherve

    Re : Arduino - Fréquence PWM

    Bonjour,
    on peut faire varier la fréquence en quasi continu car au moins sur Atmel la fréquence est contrôlable par un registre en plus de celui du prédiviseur, again read data sheet modes 11 ou 15 du timer 1 de l'Atmega328P.

    JR
    l'électronique c'est pas du vaudou!

  16. Publicité
  17. #13
    Antoane

    Re : Arduino - Fréquence PWM

    Les 2 solutions permettent l'active brake ?
    Oui, mais il y en a un qui est plus actif que l'autre
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  18. #14
    zibuth27

    Re : Arduino - Fréquence PWM

    hello,

    @jiherve
    OK le mode 14 du timer1 (uniquement, mais c'est déjà pas mal) permet un PWM à fréquence incrémentable par pas fin et continue à autoriser le "waveform" avec un PWM où la sortie bascule lorsque le timer1 atteint la valeur OCR1A ou la valeur OCR1B. Il faut simplement ne pas oublier d'ajuster OCR1A pour un rapport cyclique constant quand on fait varier la fréquence

    NOK le mode 15 ou 11 ne le permettent pas: ils utilisent OCR1A come valeur max du timer, il n'y a donc pas de PWM possible

    @antoanne
    20kHz de PWM ne marche pas sur beaucoup de moteurs : le courant n'a pas le temps de monter et la puissance utile est faible. La fréquence du PWM doit être en rapport avec la constante de temps des bobinages du moteur (L/r)


    saluts

  19. #15
    jiherve

    Re : Arduino - Fréquence PWM

    Re
    @zibuth27
    The fast Pulse Width Modulation or fast PWM mode (WGM13:0 = 5, 6, 7, 14, or 15)!!!
    The phase correct Pulse Width Modulation or phase correct PWM mode (WGM13:0 = 1, 2, 3, 10, or 11)!!!!
    la sortie OCRIB serait elle là seulement pour faire joli?
    Je l'utilise pour piloter un servo.
    Donc se plonger dans la data sheet
    JR
    l'électronique c'est pas du vaudou!

  20. #16
    zibuth27

    Re : Arduino - Fréquence PWM

    hello,

    @jiherve
    OK, j'apologise et amende honorablement. Je tournerai dorénavant sept fois ma langue dans la bouche de la voisine avant d'intervenir !
    et j'ai du lire trop rapidement les 660 pages de la datasheet. Dont acte.

    On peut donc bien ajouter le fast PWM mode 15

    Cependant les modes 5,6et 7 ne répondent pas tout à fait à ton propre fil #12 ("on peut faire varier la fréquence en quasi continu") puisque leur compteur Top est fixe à 8,9 ou 10 bits (0xFF, 0x1FF ou 0x3FF)et leur Bottom toujours à 0.

    As-tu essayé le TP par ICR1 et les waveforms par OCR1A et OCRB à la fois ?



    saluts

  21. #17
    jiherve

    Re : Arduino - Fréquence PWM

    Re
    je n'ai pas écrit que les modes 5,6,7 le permettaient mais que certains mode (11,15) l'offraient.
    Oui il est sans doute possible d'utiliser ce mode là aussi mais je n'ai jamais essayé, ne connaissant pas la data sheet par coeur il faudra verifier si ce n'est pas expressement interdit alors cela doit etre disponible.Les Atmega sont de bonnes bêtes.
    JR
    l'électronique c'est pas du vaudou!

  22. #18
    Antoane

    Re : Arduino - Fréquence PWM

    Bonsoir,
    Citation Envoyé par zibuth27 Voir le message
    20kHz de PWM ne marche pas sur beaucoup de moteurs : le courant n'a pas le temps de monter et la puissance utile est faible. La fréquence du PWM doit être en rapport avec la constante de temps des bobinages du moteur (L/r)
    Sauf effets non-linéaires : non. Le rapport entre les constantes de temps L*fsw/r (fsw la fréquence de découpage) ne définit que l'ondulation du courant dans la charge. Lorsque le temps à l'état haut est faible, le courant n'a effectivement pas beaucoup le temps de monter ; mais le temps à l'état bas sera également plus faible et le courant n'aura pas beaucoup le temps de descendre.
    Dans tous les cas, le courant moyen (celui produisant le couple) sera le même, égal à (dc*Vcc-E)/r, avec dc le rapport cyclique, E la fcem du moteur (proportionelle à la vitesse) et Vcc la tension d'alim du demi-pont.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  23. Publicité

Sur le même thème :

Discussions similaires

  1. Arduino anti rebond avec arduino
    Par sari12 dans le forum Électronique
    Réponses: 13
    Dernier message: 23/10/2014, 17h04
  2. Fréquence de rotation avec ARDUINO
    Par mallodu55 dans le forum Électronique
    Réponses: 28
    Dernier message: 30/07/2014, 13h32
  3. Communication arduino-arduino avec module Xbee
    Par TPESI22012 dans le forum Électronique
    Réponses: 2
    Dernier message: 23/12/2013, 17h24
  4. Réponses: 6
    Dernier message: 05/06/2012, 18h29
  5. Frequence PWM L6203 Arduino UNO
    Par sani300 dans le forum Électronique
    Réponses: 3
    Dernier message: 26/08/2011, 10h59