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

ARDUINO - Generateur de pulse

  1. #1
    ga3ttan

    ARDUINO - Generateur de pulse

    Bonjour à tous,

    Je souhaite réaliser, à l'aide d'un module ARDUINO, un générateur de pulse au profil prédéfini.

    Je m'explique : j'ai une vingtaine de profil bien défini (du style 20 volts pendant un temps t1, ensuite - 5 volts pendants un certain temps t2 etc...) que je voudrai "charger" dans l'arduino en fonction de mon utilisation.
    Je pensais donc utiliser un arduino suivi d'un ampli pour obtenir les niveaux de tension nécessaire.

    Le problème c'est que je n'ai jamais utilisé d'arduino et je ne sais absolument pas si ce que je souhaite faire est réalisable ...

    Si quelqu'un peux m'éclairer sur le sujet ce serait sympas!

    Merci d'avance!

    -----


  2. Publicité
  3. #2
    penthode

    Re : ARDUINO - Generateur de pulse

    ça peut s'envisager...

    toutefois , outre l'arduino , il faudra un traitement analogique sérieux pour gérer les tensions positives ET négatives.
    et chacun est rentré chez son automobile .

  4. #3
    PA5CAL

    Re : ARDUINO - Generateur de pulse

    Bonsoir

    Arduino est le nom d'un projet. Il existe plusieurs types de cartes Arduino, animées par des micro-contrôleurs différents.

    Un micro-contrôleur est avant tout conçu pour délivrer des signaux logiques (deux niveaux de tension possibles). Certains modèles sont capables de délivrer des signaux analogiques (de plusieurs plusieurs à quelques milliers de niveaux de tension distincts), dans certaines limites (par exemple de 0,05V à 3,25V par pas de 3,125 mV pour l'ATSAMD21 de l'Arduino M0/Pro), mais la plupart des "petits" Arduinos (Uno, Nano, ...) ne peuvent produire au mieux que des signaux modulés en largeur d'impulsion (PWM). Les premiers génèrent directement et instantanément le niveau de tension requis, alors que les impulsions produites par les seconds doivent être transformées en tension à l'aide d'un filtre qui introduit un retard et laisse une ondulation résiduelle.

    Si le nombre de seuils de tension à produire est fixé et assez réduit, alors on peut se contenter de commander des sources de tension pré-réglées à l'aide de signaux logiques issus du micro-contrôleur.

    Les détails de réalisation, en particulier de la partie analogique rajoutée à la carte Arduino, dépendent des performances attendues, en termes de puissance délivrée, de vitesse de réaction et de précision.

  5. #4
    naru2to

    Re : ARDUINO - Generateur de pulse

    Bonjour,

    Il serait intéressant de donner plus d'informations sur les contraintes de temps, des impulsions de 1ms n'auront pas les mêmes contraintes techniques que des impulsions de 1µs. Suivant le besoin, un petit microcontrôleur et un convertisseur numérique-analogique (CAN ou DAC en anglais) suivi d'un étage de conditionnement du signal pour permettre d'aller de +20V à -20V (amplificateurs opérationnels, buffer, à déterminer en fonction des besoins en tension et en fréquence)

  6. #5
    Jack

    Re : ARDUINO - Generateur de pulse

    Citation Envoyé par naru2to Voir le message
    CAN ou DAC en anglais
    ADC, pas DAC

  7. #6
    naru2to

    Re : ARDUINO - Generateur de pulse

    Oups... La fonction recherchée est bien une conversion numérique vers analogique, donc DAC (Digital-to-Analog Converter), je me suis juste trompé sur le terme français, je voulais dire CNA et non CAN

  8. #7
    ga3ttan

    Re : ARDUINO - Generateur de pulse

    Merci pour vos réponses!

    Alors concernant les profils à générer voila deux exemple en pièce jointe.

    J'ai tout un montage amplificateur en aval (avec un gain de 10), alimenté en (+20V jusqu'à +60V). Le but étant de pouvoir générer des tensions min/max de +50/-50V

    Au final j'ai seulement besoin de sortir des tension allant de -5V (négatif c'est possible ??) jusqu’à + 5V mais ayant des profils assez particulier (Cf pièces jointes).

    Voila, merci d'avance pour votre aide !
    Images attachées Images attachées

  9. #8
    ga3ttan

    Re : ARDUINO - Generateur de pulse

    Personne n'a d'idée ?

  10. #9
    Jack

    Re : ARDUINO - Generateur de pulse

    Ça manque encore d'informations. Il faudrait que tu répondes à PA5CAL notamment dans son message #3

    Sortir 10 mA, 1 A ou 100 A ne nécessiteront pas du tout la même structure d'ampli en sortie du générateur.

    Dans tous les cas, il y aura une solution. As-tu commencé à chercher quel DAC tu vas utiliser et comment le piloter?

  11. #10
    naru2to

    Re : ARDUINO - Generateur de pulse

    Concernant le choix du DAC, il suffit de déterminer le nombre maximum d'échantillons/seconde nécessaires et la résolution voulue. A mon avis, mais à vérifier selon l'application, une génération de 1k à 10k points/secondes et une résolution de 16 bit devraient convenir. On trouve facilement des DAC 16 bits qui sont plutôt rapides et faciles à interfacer en SPI, comme par exemple le DAC8563, avec un schéma pour convertir la sortie en bipolaire (jusqu'à +/-15V) à la page 44.

    Pour les profils, il suffit de stocker un tableau de valeurs dans une EEPROM et de les envoyer sur le DAC à intervalle régulier (fréquence d'échantillonnage) sur interruption d'un timer pour être précis.
    Dernière modification par naru2to ; 20/02/2018 à 20h45.

  12. #11
    ga3ttan

    Re : ARDUINO - Generateur de pulse

    Je ne dépasserai pas le 3 A en courant de sortie. Sinon je suis surtout spécialisé dans l'analogique et donc tout ce qui DAC, résolution etc j'avoue ne pas maîtriser les bases.

    Naru2to, un microcontrôleur avec DAC intégré pourrait faire l'affaire non ? Le schéma pour convertir la sortie en bipolaire est tres intéressant au passage.

  13. #12
    naru2to

    Re : ARDUINO - Generateur de pulse

    tout ce qui DAC, résolution etc j'avoue ne pas maîtriser les bases.
    - Résolution : donnée en nombre de bits, elle correspond au nombre de "pas" possibles. Donc pour un DAC N bits le nombre de pas est 2^N (par exemple 65536 pour un DAC 16 bits).
    - Référence : tension générée en interne ou par un composant externe (type et valeur spécifiés dans la datasheet du DAC).
    - Valeur pleine échelle : amplitude maximale de sortie du DAC. Elle est proportionnelle à la tension de référence (soit égale, soit multipliée par un gain donné).
    - Quantum : C'est la taille du pas (variation de 1 bit). Calculé avec [tension pleine échelle/nombre de pas].

    En admettant que le système soit parfait (donc en ignorant les différents offsets), pour une sortie de 100V avec un DAC 16-bit, la plus petite variation possible serait 100V/65536 soit environ 1,52mV. Si c'est trop précis on peut prendre un DAC avec une résolution plus basse (14-bit, 12-bit, 10-bit), ou au contraire on peut choisir un DAC avec une résolution plus élevée (18-bit, 20-bit, 24-bit).

    - La fréquence d'échantillonnage c'est le nombre de variations possibles sur une plage d'une seconde. On peut aller jusqu'à quelques milliers d'échantillons/seconde en choisissant le bon microcontrôleur et le bon DAC.

    un microcontrôleur avec DAC intégré pourrait faire l'affaire non ?
    La fréquence d'échantillonnage est en général raisonnable, mais la résolution est limitée (10 à 12 bit pour les meilleurs), ce qui impliquera plus de restrictions en terme de choix que d'avoir le µC et le DAC séparés.

  14. #13
    ga3ttan

    Re : ARDUINO - Generateur de pulse

    Merci pour ces rappels

    Mon cas le plus critique est le suivant : 50V en 1µS ce qui reviendrait à une variation de 760 µV (je n'ai pas forcémment besoin d'autant de précision mais pourquoi pas...)

    Ainsi le schéma de principe pourrait-etre le suivant :

    µC --> DAC --> montage pour sotie bipolaire --> ampli ?

    La deuxième étape pour moi seras d'apprendre à "coder" ses pulses dans le µC. Quand au choix de ce dernier un PIC16F pourrait faire l'affaire ?

    Merci d'avance

  15. #14
    ga3ttan

    Re : ARDUINO - Generateur de pulse

    Je reviens vers vous du coup pour la partie prog. J'ai donc un pic24F qui pilote le DAC .

    N'ayant que tres peu d'expérience en programmation PIC j'aurais besoin de quelques conseils pour me permttre de programmer ces pulse.

    Merci d'avance

  16. #15
    penthode

    Re : ARDUINO - Generateur de pulse

    tous les conseils sur les PICs :

    https://www.abcelectronique.com/bigonoff/
    et chacun est rentré chez son automobile .

  17. #16
    naru2to

    Re : ARDUINO - Generateur de pulse

    Bonjour,
    Quel DAC et quel protocole de communication? Quel PIC24F?
    Je suppose qu'il va être programmé en utilisant MPLAB X et le compilateur XC16?

    Il faudrait commencer par créer un projet "standalone" ou partir d'un projet existant relativement simple (genre "blink LED" ou "hello world") qui permettrait de vérifier que la configuration est bonne (oscillateur, watchdog, etc) et donc que le processeur est en vie et qu'il tourne à la bonne fréquence (ça peut éviter pas mal d'ennuis pour la suite!)

  18. #17
    antek

    Re : ARDUINO - Generateur de pulse

    Citation Envoyé par ga3ttan Voir le message
    J'ai donc un pic24F qui pilote le DAC .
    N'ayant que tres peu d'expérience en programmation PIC j'aurais besoin de quelques conseils pour me permttre de programmer ces pulse.
    Partir sur un 24F quand on ne connait pas les µC sera compliqué, un 16F est bien plus simple.

  19. #18
    naru2to

    Re : ARDUINO - Generateur de pulse

    Partir sur un 24F quand on ne connait pas les µC sera compliqué, un 16F est bien plus simple.
    Mis à part le fait que ce soit une architecture 16 bit, la seule difficulté que je vois en plus par rapport à un 16F ou 18F, c'est la partie verrouillage/déverrouillage du registre et l'attribution des broches aux différents périphériques. Pour le reste du projet qui mettrait en oeuvre un DAC (en SPI?), une mémoire (en SPI aussi), un UART? et un timer, la configuration des registres est assez simple et on trouve pas mal d'exemples

  20. #19
    antek

    Re : ARDUINO - Generateur de pulse

    Citation Envoyé par naru2to Voir le message
    Pour le reste du projet qui mettrait en oeuvre un DAC (en SPI?), une mémoire (en SPI aussi), un UART? et un timer, la configuration des registres est assez simple et on trouve pas mal d'exemples
    Donc choisir un 16 bit plutôt qu'un 8 bit, quand on est débutant, est une bonne idée . . .

  21. #20
    Yvan_Delaserge

    Re : ARDUINO - Generateur de pulse

    On trouve ici une description d'un générateur de fonctions arbitraire utilisant un Arduino Due.

    ARBITRAR.gif

    On programme la fonction arbitraire au moyen d'une GUI qui tourne sur le PC.
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  22. #21
    ga3ttan

    Re : ARDUINO - Generateur de pulse

    naru2to
    Re : ARDUINO - Generateur de pulse

    Bonjour,
    Quel DAC et quel protocole de communication? Quel PIC24F?
    Je suppose qu'il va être programmé en utilisant MPLAB X et le compilateur XC16?

    Il faudrait commencer par créer un projet "standalone" ou partir d'un projet existant relativement simple (genre "blink LED" ou "hello world") qui permettrait de vérifier que la configuration est bonne (oscillateur, watchdog, etc) et donc que le processeur est en vie et qu'il tourne à la bonne fréquence (ça peut éviter pas mal d'ennuis pour la suite!)
    Bonjour,

    Alors j'utilise le DAC 8562 de chez T.I en I2C avec le pic 24FJ64GB002. A noter que j'utilise la board de dev microstick 2

    Pour info:
    La pin SYNC(barre) du DAC est connecté à la pin 12 (timer1) du pic
    La pin SCLK du DAC est connecté à la pin 17 (SCL1) du pic
    La pin DIN du DAC est connecté à la pin 18 (SDA1) du pic
    La pin LDAC(barre) du DAC est mise à la masse

    Effectivement j'utilise MPLAB X avec le compilateur XC16. Configurer et initialiser les I/O, controler le DAC en I2C ne devrait pas me donner trop de fil à retordre. Mon seul problème est que je n'ai pas trop d'idée des fonctions/ code à générer pour justement générer des formes d'ondes arbitraire.

    Pour info, en sortie du DAC, j'ai utilisé le circuit que tu m'avais conseillé a base d'OPA140 pour générer des tensions bipolaires à +/- 15V :

    opa 140.png

  23. #22
    antek

    Re : ARDUINO - Generateur de pulse

    Citation Envoyé par ga3ttan Voir le message
    Mon seul problème est que je n'ai pas trop d'idée des fonctions/ code à générer pour justement générer des formes d'ondes arbitraire.
    Comme (presque) toujours il existe plusieurs méthode pour arriver au résultat.
    Par exemple, pour les créneaux mémoriser des valeurs de temps et de niveaux pour chaque cycle défini.
    Pour des courbes de variation, voir si on peut établir ou calculer leur fonction.

  24. #23
    naru2to

    Re : ARDUINO - Generateur de pulse

    Alors j'utilise le DAC 8562 de chez T.I en I2C avec le pic 24FJ64GB002.
    Attention le DAC8562 se pilote en SPI, la polarité des lignes Clock/Data n'est pas la même pour le SPI et l'I²C, et l'adressage se fait différemment (Chip Select pour le SPI contre octet d'adresse pour l'I²C).

    Le PIC24FJ64GB002 devrait être suffisant pour l'application, mais il faudra passer par une EEPROM externe pour stocker les profils, la taille est à déterminer en fonction du nombre de points à stocker, mais une petite EEPROM de quelques Kb genre 25LC160 devrait faire l'affaire (elles se trouve facilement en boitier DIP )

    Pour des courbes de variation, voir si on peut établir ou calculer leur fonction.
    Trop compliqué, faudrait connaître pour chaque courbe tous les paramètres, savoir le nombre de paramètres à utiliser en fonction de la courbe à générer et ce en temps réel, trop galère.
    Je pense qu'il vaut mieux faire un "lecteur" de courbe, peu importe le type carré ou patatoïdal :
    Tu sauvegardes ta courbe sous forme de tableau de N points. La lecture + envoi sur le DAC se font avec l'interruption d'un timer (période fixe ou réglable, ça va jouer directement sur la vitesse de lecture)

    Pour "importer" la courbe du PC vers la mémoire, il faudrait créer une fonction qui copie la valeur reçue sur l'UART via un terminal, dans la forme [Adresse,Valeur] (attention la mémoire n'accepte que des valeurs en octet, pour y enregistrer des valeurs sur 16 bits il faudra prévoir d'écrire sur 2 octets consécutifs et ne pas les écraser)

    Bon ça c'est dans les grandes lignes. Les premières étapes à mettre en œuvre sont les suivantes :
    - Envoi de données arbitraires sur le DAC pour voir si la sortie change bien dans la plage de valeur voulue (validation de la communication SPI avec le DAC)
    - Configurer un timer, avec par exemple une période d'interruption de 1ms et changer l'état d'une broche (Fréquence de ~500 Hz en sortie de cette broche du PIC)

    Une fois que ce sera fait, on pourra passer à l'UART et l'EEPROM

  25. #24
    antek

    Re : ARDUINO - Generateur de pulse

    Citation Envoyé par naru2to Voir le message
    Trop compliqué, faudrait connaître pour chaque courbe tous les paramètres, savoir le nombre de paramètres à utiliser en fonction de la courbe à générer et ce en temps réel, trop galère.
    Peut-être qu'on peut le dire après avoir vu . . .
    Et pas besoin de calculer pendant la génération de la courbe.
    calculer -> stocker les résultats -> générer la courbe
    Dernière modification par antek ; 03/04/2018 à 19h12.

  26. #25
    naru2to

    Re : ARDUINO - Generateur de pulse

    Peut-être qu'on peut le dire après avoir vu
    S'il s'agissait de générer que des trapèzes avec un nombre de segments définis ce serait simple, mais s'amuser à calculer en interne les points des équations de courbe par partie, avec de la trigonométrie, exponentielle ou autre opération sur des nombres flottants ça me paraît un peu surdimensionné pour l'application...
    calculer -> stocker les résultats -> générer la courbe
    C'est vrai qu'on n'est pas obligé de le faire en temps réel, mais ça reste quand même complexe sur un petit PIC24F. Si il y a la possibilité de faire le calcul des points et les arrondis en entier 16 bits et de les sauvegarder sous forme de tableau en amont sur un PC ce sera d'autant plus simple. En choisissant une mémoire avec une capacité adaptée on peut stocker un certains nombre de courbes (la plus élevée dans la famille des 25LCxx c'est la 25LC1024 avec 1Mb de stockage...).

Discussions similaires

  1. [Programmation] [Arduino] générateur d'impulsions
    Par besher dans le forum Électronique
    Réponses: 6
    Dernier message: 30/03/2016, 01h11
  2. Communication arduino-arduino avec module Xbee
    Par TPESI22012 dans le forum Électronique
    Réponses: 2
    Dernier message: 23/12/2013, 17h24
  3. Réponses: 35
    Dernier message: 10/12/2010, 11h31
  4. dualité:générateur du courant-générateur de tension
    Par harry-potter dans le forum Physique
    Réponses: 4
    Dernier message: 30/11/2008, 21h05