Alimentation moteur Synchrone Vinyl - Page 4
Répondre à la discussion
Page 4 sur 4 PremièrePremière 4
Affichage des résultats 91 à 102 sur 102

Alimentation moteur Synchrone Vinyl



  1. #91
    Yvan_Delaserge

    Re : Alimentation moteur Synchrone Vinyl


    ------

    Voici une nouvelle version du programme qui n'utilise pas les routines PWM de l'Arduino.
    En contrôlant les timings, je me suis rendu compte qu'en utilisant delayMicroseconds avec une variable comme argument, le délai obtenu était faux (considérablement allongé). Pour contourner ce bug, j'utilise delayMicroseconds avec un argument constant de 1 microseconde, mais l'instruction est utilisée à l'intérieur d'une boucle qui se répète le nombre de fois nécessaire pour obtenir le délai désiré.

    Code:
    //période de la PWM en us
    int periode = 362; 
    //duty cycle en pourcent. 50%=sinusoïde au niveau 0 
    int duty[]={50,58,67,75,82,88,93,97,99,100,99,97,93,88,82,75,67,58,50,42,33,25,18,12,7,3,1,0,1,3,7,12,18,25,33,42};
    
    void setup()
    {
      pinMode(13, OUTPUT);
      }
    
    void loop()
    {
        for (int j=0; j<=35; j++){
        //on détermine le temps au niveau haut
        int temps_on  = periode * duty[j] / 100;
        int temps_off = periode - temps_on;
    
          digitalWrite(13, HIGH);
          for (int k=1; k<=temps_on; k++){
           delayMicroseconds(1); 
          }
    
          digitalWrite(13, LOW);
          for (int i=1; i<=temps_off; i++){
           delayMicroseconds(1); 
          }
       
      }
    delayMicroseconds(3);
      
      }
    Avec les valeurs présentées ci-dessus, on obtient une période du signal synthétisé de 20 millisecondes, donc une sinusoïde de fréquence 50 Hz.
    Pendant ces 20 millisecondes, le signal PWM présente 36 périodes, qui devraient donc être chacune de 555 microsecondes.
    La variable int periode du début du programme devrait donc avoir une valeur de 555.... Si toutes les instructions du programme s'effectuaient instantanément! Mais ce n'est pas le cas!
    Il faut donc empiriquement réduire la valeur de int periode pour arriver à une durée de la sinusoïde juste en-dessous de 20 000 microsecondes, puis ajouter les quelques microsecondes manquantes à la fin de la boucle loop.

    J'ai mesuré les timings en software, avec la fonction micros(). Reste maintenant à voir ce que ça donne à l'oscilloscope. On n'est peut-être pas au bout de nos peines!

    -----
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  2. #92
    oakado

    Re : Alimentation moteur Synchrone Vinyl

    Bonjour Yvan,

    whaaou ! ! top tout ces exemples (désolé WE avec des copains pas pu consulté le forum)
    je viens de faire la commande, j'ai pris une arduino uno officiel pour les tests et les deux que vous m'aviez proposé
    vivement la reception, je suis en train de lire le cours (super bien fait d'ailleurs, merci pour le lien) et c'est vrai que ca semble assez génial Arduino !

    Dès reception j'essai de tester tout ca en vrai, je vais aussi voir si je peux trouver un moteur qui ressembe à celui de la platine pour les tests.

    Pour répondre à t'as question un peu plus haut, pour la platine, avec le transfo de base, elle est censé tourner à 33.33tr/min, pour la faire tourner à 45tr/min c'est le même transfo mais il y a une poulie à changer, c'est au niveau du "pignon" du moteur qu'on fait le changement.

    J'imagine aussi qu'il faut d'abort réussir à faire le code pour du 33.33tr/min, mais ensuite il faudra qu'on puisse changer la fréquence pour avoir du 45tr/min
    C'est quand même pas simple simple, toute cette histoire, j'aurais pas pensé Mais c'est super interessant !!!

    a très vite
    Julien

  3. #93
    Yvan_Delaserge

    Re : Alimentation moteur Synchrone Vinyl

    L'avantage de l'Arduino, c'est qu'avec un module tout fait à quelques $ et quelques lignes de code, tu peux faire le même travail qu'avec pas mal d'électronique. Le prix à payer c'est qu'il faut apprendre à programmer, mais c'est intellectuellement très stimulant.

    Pour changer la fréquence générée par l'Arduino, il suffira de changer la valeur de la constante int periode et d'indiquer à l'Arduino quelle valeur il doit utiliser au moyen d'un interrupteur connecté à une des pattes d'entrée.
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  4. #94
    zibuth27

    Re : Alimentation moteur Synchrone Vinyl

    hello,

    j'ai trouvé un peu de temps pour écrire un bout de code : en c (presque universel) pour ne pas apprendre un autre langage spécifique

    pour un aspect pratique, j'ai utilisé 6 bits (disponibles en bits du même port), ce qui me semble largement suffisant pour un petit moteur synchrone

    le programme fait 4 lignes (+ 1 ligne de diagnostic)
    12 lignes de paramètres
    64 octets de table de sinus
    + commentaires

    fonctionnement:
    le timer1 (16b) divise la fréquence du quartz pour cycler à 3200Hz
    sa sortie est un bit hard (T0 = PD4) qui sert d'entrée soft au timer0, qui cycle en 64 coups (50 x 64 = 3200)
    quand il n'a rien d'autre à faire, le µC recopie la valeur courante du timer0 dans les 6 bits du port C où est branché le pont R/2R
    les interruptions sont déclenchées en fin de comptage de chaque timer (à 3200Hz et à 50Hz). Traitement très bref des interruptions, ne risquant aucun débordement

    adaptations possibles : ajustement fin de la vitesse par boutons ou potard modifiant ICR1

    Code:
    /* 50Hz sinus generator
     * at mega328p
     * arduino nano pro
     * 
     * DAC R2R
     * 
     * PB5 LED output	
     * PC0 DAC bit 0	
     * PC1 DAC bit 1
     * PC2 DAC bit 2
     * PC3 DAC bit 3
     * PC4 DAC bit 4
     * PC5 DAC bit 5
     * PD4 TO, input of timer0
     *
     * crystal 16MHz
     * 
     * status: OK
     * keywords: timer 1 variable frequency (ICR1), DAC R2R 6 bits
     * 
     * (CC) nc, sa, by, zibuth27 15/02/10, 
     */
     
    #include <avr/io.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>
    
    
    	// global varianbles
    volatile uint8_t outval;
    volatile uint8_t sinus64[] =
    	{
    		0x00, 0x00, 0x00, 0x01,
    		0x02, 0x04, 0x05, 0x07,
    		0x09, 0x0C, 0x0E, 0x11,
    		0x14, 0x17, 0x1A, 0x1D,
    		0x20, 0x23, 0x26, 0x29,
    		0x2C, 0x2F, 0x31, 0x34,
    		0x36, 0x38, 0x3A, 0x3C,
    		0x3D, 0x3E, 0x3F, 0x3F,
    		0x3F, 0x3F, 0x3F, 0x3E,
    		0x3D, 0x3C, 0x3A, 0x38,
    		0x36, 0x34, 0x31, 0x2E,
    		0x2B, 0x28, 0x25, 0x22,
    		0x1F, 0x1C, 0x19, 0x16,
    		0x13, 0x10, 0x0D, 0x0B,
    		0x09, 0x06, 0x05, 0x03, 
    		0x02, 0x01, 0x00, 0x00
    	};
    
    void main()        
    {
    	// local variables
    
    	// output pins 
    	DDRB |= (1<<PB5); 							// LED output enable
    	DDRC  = 0x3f;
    	DDRD |= (1<<PD4)|(1<<PD6);					// PD4 enable (T0=clock timer0)
    	
    	// set timer0
    	TCCR0A |= (1<<WGM01);						// CTC mode 2, recycle on OCR0A
    	TCCR0B |= (1<<CS02)|(1<<CS01)|(1<<CS00);	// clock source on T0 pin (PD4)
    	OCR0A   = 63;
    	TIMSK0 |= (1<<OCIE0A);						// ISR mask OVF0
    		
    	// set timer1
    	TCCR1A |=(1<<WGM11);						// CTC mode 14
    	TCCR1B |=(1<<WGM13)|(1<<WGM12)|(1<<CS10);	// CTC mode, prescaler
    	TIMSK1 |=(1<<TOIE1);						// ISR mask OVF1
    	ICR1    = 5000;								// frequency adjust
    
    	// set ADC
    	
    	// set USART
    
    	// interrupts enable
    	sei();	
     
      while (1)							// endless loop
      {
    		outval = sinus64[TCNT0];
    		PORTC = outval;
      }
    }  
    
    ISR(TIMER1_OVF_vect)				// 3200Hz
    {
    		PORTD ^= (1<<PD4);
    		PORTD ^= (1<<PD4);	
    		
    }
    
    ISR(TIMER0_COMPA_vect)				// 50Hz
    {
    		PORTB ^= (1<<PB5);			// LED flag
    		
    }
    voilà le résultat avec signal, photo du proto, schéma du pont R/2R ajouté à l'arduino



    saluts
    Images attachées Images attachées

  5. #95
    oakado

    Re : Alimentation moteur Synchrone Vinyl

    Hello,

    J'ai hâte de recevoir ma carte!!!! Ca m a l air super top tout ça!!!
    Merci beaucoup!!

    Vivement le test avec le reste du circuit

  6. #96
    oakado

    Re : Alimentation moteur Synchrone Vinyl

    Bonsoir messieurs,

    Petite question subsidiaire
    Pour ajouter la fréquence de 45 tt par min avec un interrupteur, que faudrait il faire?
    J imagine remettre en variable ce qui concerne la sinusoïdale, et l assigner à une autre variable?
    Comme je ne connais pas du tout le C jai un peu du mal a tout comprendre :/ et je ne sais pas si cela est possible mais serait il possible de traduire ce code en langage arduino?

    D'autre part, est il possible par principe d améliorer la résolution de la courbe (Ca ne semble effectivement pas nécessaire dans le cadre d un moteur synchrone mais c est piur essayer de comprendre un peu mieux...)

    Et je pensais également a une fonction de "contrôle" de la vitesse, comme Ca en fonction du poids du vinyl Ca pourrait adapter, et j'ai penser à ca:

    Coller 4 pastilles réfléctrices (un peu le style des pissotieres d autoroute mais en miniature) sur le plateau ( pas de modif du plateau mais juste un collage précis) qui renverrais de la lumière a une photodiode (je pensais peut être ajouter une del pas loin) et calculer la vitesse de rotation du plateau en fonction de Ca pour éventuellement pouvoir l adapter.
    Pensez vous que ce serait pertinent? Est ce possible avec arduino (a priori oui mais je ne vois pas bien comment implanter la "réaction" au test en langage arduino (je pense a une boucle while, mais du coup dès que la condition est atteinte on sort de la boucle.

    Merci encore
    Julien

    Ps: a priori il y en a encöre pour une grosse semaine avant que je reçoives mes cartes
    PS2: Zebuth tu utilise quoi comme câble pour relier ton pc au tx/rx de l arduino? Si je peux éviter d en essayer 15 Ca m arrange thanks

  7. #97
    zibuth27

    Re : Alimentation moteur Synchrone Vinyl

    hello,

    tu commences à en demander beaucoup!

    vitesse 33/45
    la vitesse est ici controlée par un simple registre processeur : ICR1, valeur de départ 5000
    Ta commande normale de changement de vitesse est mécanique, et je comprends bien que tu veuilles la ménager. Commme il s'agit d'une augmentation de la fréquence de 35%, c'est très facile pour l'arduino, et PEUT-ETRE admissible pour ton moteur, c'est à toi de voir s'il démarre bien, si le couple est correct, avec une marge suffisante, etc
    rajouter la commande par interrupteur est trivial (pour qui sait)
    de même un bouton peut être facilement rajouté pour modifier la vitesse via ICR1, un seul bouton est nécessaire, je ne m'attends pas à ce que le moteur accélère spontanément. Le nombre de pas que tu dois mettre pour ajuster te renseigne sur la fraîcheur de la courroie (une courroie neuve a une plus grande déformabilité longitudinale qu'une vieille sèche)

    langage arduino
    il est possible de traduire en "langage" arduino, mais qui est hors de mon champ de compétences actuel, j'ai préféré choisir le c utilisable par tous les µC et PC, mais ce n'est que mon choix.

    résolution
    mes choix architecturaux ont été pris en fonction de ce que jai compris de ta demande, maintenant si elle évolue ...
    Une résolution supérieure est possible, il faut conserver la cohérence des valeurs
    J'ai choisi ici d'utiliser un tableau balayé à vitesse angulaire constante
    une alternance du 50Hz est balayée en 64 pas (en 256 pas si tu es en 8 bits, en 1024 pas si tu es en 10 bits)
    l'horloge du DAC est donc à 3200Hz (6bits) ou 12800Hz (8 bits) ou 51200Hz pour 10 bits
    j'ai choisi de suréchantillonner le DAC par la boucle infinie du main() pour ne pas avoir à me soucier de synchroniser quoi que ce soit et conserver un ensemble simple et gérable. Cela permet aussi une affectation des ports chaotique si besoin ( six bits contigus du port C trois bits non contigus du port B et un bit du port D par exemple, mais je n'ai pas poussé cet exercice à son terme). Cet échantillonnage pourrait poser problème à haute fréquence

    boucle fermée
    le besoin ne semble pas justifier le collage de 4 cataphotes (tu rajoutes alors un problème de phase car tu vas avoir du mal à placer exactement tes cataphotes) un seul suffit, éventuellement avec un autre collé à l'envers, juste pour équilibrer
    je verrais plutot un autre arduino (vu les 2.5$ qu'il coute) relié par RS232 qui mesure la vitesse du plateau et qui envoie juste une nouvelle valeur de ICR1 régulièrement

    cabele de programmation
    j'utilise une carte USB-ICSP (type de bus de bus de programmation commun semble-t-il atmel-microchip) à 3$
    je t'envoie en MP une monographie sur mon expérience sur le sujet



    saluts

  8. #98
    oakado

    Re : Alimentation moteur Synchrone Vinyl

    Merci beaucoup zibuth
    Je sais que je vous embête un peu avec toutes mes questions mais c est super intéressant
    Le moteur support normalement l augmentation de fréquence car c'est exactement ce que le fabriquant propose avec une alim séparé, par contre sans contrôle de la vitesse du plateau

    Je vais commander le câble et un deuxieme Nano comme Ca tout fonctionnera
    Je vais aussi essayer de me renseigner sur le C pour mieux comprendre ! (Ca m en fait des choses à apprendre! Je vais arrêter de bosser je crois )

    J'ai hâte de pouvoir lire ton expérience ! J espere que j arriverais a comprendre.

    Merci merci merci!!

    Julien

  9. #99
    Yvan_Delaserge

    Re : Alimentation moteur Synchrone Vinyl

    Salut tout le monde,

    De mon côté, j'ai fini la mise au point de mon petit programme, que voici:
    Code:
    //période de la PWM en us
    
    int periode = 418; 
    //duty cycle en pourcent. 50%=sinusoïde au niveau 0 
    unsigned int duty[]={50,58,67,75,82,88,93,97,99,100,99,97,93,88,82,75,67,58,50,42,33,25,18,12,7,3,1,0,1,3,7,12,18,25,33,42};
    
    void setup()
    {
      //la patte 13 est la sortie signal
      pinMode(13, OUTPUT);
      //la patte 12 est la sortie synchro
      pinMode(12, OUTPUT);
      Serial.begin(9600);
    }
    
    void loop()
    {
    //on génère une impulsion de synchronisation sur la patte 12
    digitalWrite(12, HIGH);
    delayMicroseconds(3);
    digitalWrite(12, LOW);
    
    //on génère la sinusoïde à 36 points
      for (int j=0; j<=35; j++){
        //on détermine le temps au niveau haut
        //on utilise des unsigned int pour éviter un overflow lors du calcul
        unsigned int temps_on  = periode * duty[j] /100 ;
        unsigned int temps_off = periode - temps_on;
        
        digitalWrite(13, HIGH);
          for (int k=1; k<=temps_on; k++){
           delayMicroseconds(1); 
          }
    
          digitalWrite(13, LOW);
          for (int i=1; i<=temps_off; i++){
           delayMicroseconds(1); 
          }
         
      }
    
    }
    J'obtiens le résultat suivant:

    50HZ.jpg


    avec un filtre passe-bas que voici:
    FPB.jpg
    tout simple, les 2 condensateurs sont de 0,1 uF

    Gros plan sur la PWM
    PWM.jpg
    On peut très facilement générer une impulsion de synchronisation sur une patte de l'Arduino.
    C'est très utile pour observer en détail la largeur des impulsions générées tout au long du cycle d'une sinusoïde.

    Pour générer une sinusoïde à une autre fréquence que 50 Hz, il suffit de modifier la valeur de la variable periode en début de listing.
    Noter qu'elle est ici de 418 us, alors que la sinusoïde comporte 36 points. 20 millisecondes divisées par 36, ça fait 555 microsecondes!
    En fait, il faut ajuster la valeur de periode en observant le signal effectivement généré par le montage.

    Pour générer deux fréquences différentes, il faudrait utiliser une troisième patte de l'Arduino comme entrée pour un bouton de sélection entre 2 valeurs de periode.
    Dernière modification par Yvan_Delaserge ; 19/02/2015 à 20h16.
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  10. #100
    oakado

    Re : Alimentation moteur Synchrone Vinyl

    Bonjour messieurs,
    Désolé je suis sur les pistes et on capte très mal, je répondrais a tout Ca en rentrant


    Merci beaucouppppp!!!

    Julien

  11. #101
    oakado

    Re : Alimentation moteur Synchrone Vinyl

    Bonjour Messieurs,

    ca y est je suis de retour, par contre toujours pas reçut les Arduino, donc toujours pas de tests pour le moment :/

    En tout cas merci beaucoup pour votre aide, et dès que je recois je test !
    (en attendant c'est la CNC que j'ai recu, ca va aussi m'occuper ! )

    A bientot

    Julien

  12. #102
    oakado

    Re : Alimentation moteur Synchrone Vinyl

    hey hey hey !
    bonjour Messieurs, ca y'est j'ai recu ma carte hier, plus qu'a trouver un peu de temps et je test !

    Je vous tiens au courant

Page 4 sur 4 PremièrePremière 4

Discussions similaires

  1. [Brun] Moteur de platine vinyl (à courroie)
    Par KR1943 dans le forum Dépannage
    Réponses: 2
    Dernier message: 23/06/2013, 20h31
  2. Le moteur synchrone
    Par jules345 dans le forum Physique
    Réponses: 11
    Dernier message: 09/08/2012, 18h28
  3. Moteur Synchrone/ Moteur Asynchrone ?????
    Par bous dans le forum Technologies
    Réponses: 2
    Dernier message: 01/10/2010, 22h22
  4. moteur asynchrone -> moteur synchrone
    Par invite5d5dfac0 dans le forum Électronique
    Réponses: 5
    Dernier message: 08/06/2008, 22h21
  5. Alimentation pour moteur synchrone 220v
    Par damdam51 dans le forum Électronique
    Réponses: 14
    Dernier message: 31/07/2005, 08h42
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...