Partage
  • Partager sur Facebook
  • Partager sur Twitter

Arduino et Matlab/Simulink

Acquisition de signaux

    19 février 2013 à 22:01:12

    Bonjour,

    Je vous explique tout d'abord ce que nous souhaitons réaliser du point de vue Arduino/Matlab. Nous envoyons simplement des signaux électriques à Arduino provenant de plusieurs voies différentes afin de les récupérer sur Matlab/Simulink pour ensuite les traiter numériquement. Evidemment on pourrait se contenter de récupérer les données numériques dans un fichier adapté et ensuite faire le traitement sur Matlab mais il s'avère qu'il existe une toolbox nommée ArduinoIO qui, associée à un programme ardiosrv.pde pour communiquer avec Matlab et pour associer directement un schéma Simulink à l'acquisition et au traitement que nous souhaitons faire, simplifierait la tâche.

    Cependant nous sommes confrontés à un problème avec cette dernière solution puisqu'il semble, après avoir fait un test simple, que le signal que l'on récupère en sortie de l'Arduino et après passage sur Maltab/Simulink ne peut pas excéder une fréquence maximale d'échantillonnage qui est très faible vis à vis du débit maximal proposé par la carte Arduino (Duemilanove). En effet, on observe une fréquence d'échantillonnage de 60 Hz alors que le débit que l'on a fixé est de 115 200 bits/sec.... sachant que l'on quantifie sur 10 bits cela n'est pas cohérent.

    Le problème est donc bien précis, j'aimerais savoir si l'un d'entre vous a une solution ou du moins des pistes de recherche pour résoudre ce problème. Est-ce un mauvais réglage de la carte Arduino ou bien de Simulink ?

    Merci d'avance !

    • Partager sur Facebook
    • Partager sur Twitter
      22 février 2013 à 10:50:15

      Je ne connais pas Arduion, mais tu dois bien avoir un moyen de vérifier a quel fréquence tu échantillonnes des inputs sur ta carte ardiuno ? Genre Toggle une led/sortie sur ta carte et mesure a l'oscillo la fréquence de la led/sortie.

      Ensuite, ce n'est pas parce que tu as un baud de 115k que tu envoyes beaucoup de donnée, quel est le protocol de communication ? SPI I2C UART ?

      dépendemment des protocoles, certain sont en Master Slave, d'autre pas. Ce qui en SPI,I2C le master doit déclanché plus de frame/sec. Si c'est de l'UART, c'est a ton Arduino d'envoyer plus de trame/sec.

      De meme, utilse une sortie pour voir la fréquence d'envoye des trames, et non du baudrate. Et tu trouvera ou ca coince.

      -
      Edité par Bounce17 22 février 2013 à 13:32:49

      • Partager sur Facebook
      • Partager sur Twitter
        22 février 2013 à 11:58:27

        115 200 bits/sec c'est ton baud rate, c'est aussi une sorte de fréquence mais ça correspond au "tempo" de synchronisation de ta communication (UART je crois) entre le PC et l'arduino... par contre quand tu "mesure" un signal, c'est le Convertisseur Analogique/Numérique de ton arduino (CAN en français, ADC en anglais) qui va déterminer d'une part la quantification (10bits comme tu dit) et d'autre part la fréquence d'échantillonnage du signal...

        J'ai cru lire quelque part que tu pouvais monter jusqu'à 15 kHz... à régler sur l'arduino sûrement. C'est vrai que 60Hz c'est ridicule, sauf pour mesurer de la température peut être ^^

        • Partager sur Facebook
        • Partager sur Twitter
          21 mars 2013 à 17:46:14

          Bonjour,

          Désolé pour la réponse tardive, on a eu un contretemps.

          Pour le 60 Hz c'était bien un problème avec Simulink, là on passe juste par Matlab, on a Arduino qui envoie en continu la numérisation d'une entrée analogique et on récupère dans Matlab via un fscanf sur le port série.

          Cependant on est toujours limité par le nombre de valeurs reçues à la seconde pour un signal analogique en entrée, nous n'avons seulement 50-60 points à la seconde ce qui est peu vis à vis de ce qu'est capable Arduino. Par contre si je ne fais pas le plot en temps réel l'affichage passe 3000 points à la seconde environ. On a pourtant essayé de changer le prescale pour augmenter la fréquence de la clock, on a essayé une méthode avec remplissage du buffer et envoi des données seulement après et cela n'a pas amélioré le nombres de valeurs à la seconde que l'on reçoit.

          Pourtant sur le moniteur série j'ai environ 4000 points à la seconde. Que se passe-t-il avec Matlab ?

          i=0;
          t0=tic;
          grid on;
          hold on;
          while (toc(t0)<=numSec)
              i=i+1;
              t(i)=toc(t0);
              t(i)=t(i)-t(1);
              v1(i)=fscanf(s1, '%d');
              plot(i, v1(i));
              drawnow;
          end
          fclose(s1);

          On ne comprend vraiment pas ce qu'il se passe, avez-vous une idée ?

          Merci !

          -
          Edité par Paul-Henri 21 mars 2013 à 19:10:36

          • Partager sur Facebook
          • Partager sur Twitter

          Arduino et Matlab/Simulink

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown