Débutant, par où commencé ?

Premier projet, copter ou autre

a marqué ce sujet comme résolu.

Tu as mesuré le courant dans ton moteur quand il est en fonctionnement normal et en butée ? tu peux normalement le faire avec un multimètre, mais méfie toi de la valeur annoncée si tu contrôles ton moteur par PWM, la mesure peut être inexacte (mais elle est intéressante quand même) (il faut vraiment que j'écrive un tuto sur les multimètres....). L'info est utile pour savoir combien couterait une détection de blocage du moteur.

Natalya

Désolé pour le temps de réponse, pas trop le temps dernièrement.

J'ai fais quelques mesures mais aucune idée de leur certitude. Les multimètres et moi.. (Un tuto serait effectivement utile, ma dernière utilisation d'un multimètre remonte un peu :) )

Il y a aussi un mécanisme à ressort qui recentre les roues à chaque fois. Par exemple j'arrive à faire tourner les roues (en forçant un peu au bout, pas l'idéal), mais quand je met la PWM à 0, les roues reviennent au centre(le ressort). Et si je reste à une PWM élevé, le moteur fais un bruit aigu.

En écrivant ça, je me dis que j'ai vraiment du mal.. J'y pense que maintenant mais on peut freiner le moteur. C'est la solution ? Par exemple, si je mets les 2 inputs à 0 (ou 1), le moteur empêchera le ressort de ramener les roues au centre non ?

Merci d'avance de votre aide et de votre patience :)

(Au passage j'ai relu quelques cours d'électricité de collège, et je me rends compte de ma bêtise plus haut sur le branchement en parallèle)

ça marchera pas de mettre tout à 0, ou à 1, ça reviendrait à mettre ta pwm à 0%:

ça coupe l'alimentation du moteur, et comme il reçoit plus de courant, il a plus de couple, du coup tes ressorts le ramènent au 0.

+0 -0

le bruit aigu c'est parce que ton moteur aime pas forcer comme un malade contre la butée.

du coup, l'alimenter "moins fort" serait une solution (à court terme, évidemment). diminuer le rapport cyclique de la PWM pour être à la limite de laisser le ressort revenir, peut-être que ça lui plaira déjà mieux…

dans le doute avant d'être sur d'avoir dit une bêtise, t'as mis quoi comme caractéristiques à ta PWM? (fréquence et rapport cyclique)

+0 -0

C'est aigu ou très aigu ? Les PWM de l'arduino sont de l'ordre de 1kHz par défaut, c'est à peut près la note la plus aigüe que tu puisses faire avec une flute à bec (la flute qu'on utilise dans tous les cours de musique en France), mais ce n'est pas si aigüe que ça dans l'absolu.

Du coup, quand le moteur fournit un effort, il vibre à cette fréquence et fait du bruit.

Si c'est ça la cause du bruit, c'est pas grave.

le Do aigu d'une flute à bec standard est sur le coup de 1046.5Hz. par contre, le Do un octave plus loin (donc vachement plus aigu, même si j'ai rien pour montrer le son que ça fait) ne fait que 2.1kHz…

et "l'ordre de grandeur du KHz" recouvre en gros 4 octaves: (C c'est le nom anglais du Do, notation utilisée partout sauf en France)

  • C5: 0.525 KHz (un peu plus aigü que le La de ton téléphone)
  • C6: 1.05 KHz (le fameux do aigu de la flute à bec qu'on utilise à l'école en France)
  • C7: 2.1 KHz. y'a déjà plus beaucoup d'instruments "mélodiques" qui vont jusqu'à ce Do là en tant que fondamentale de note… peut-être dans les variantes de violon où le manche est très court… on est sur une longueur d'onde dans l'air de 16.5cm, donc une pression à 8cm du chevalet sur un instrument à cordes. je viens de regarder par curiosité si y'avait pas quelque part de quoi écouter cette note, la voici (lien youtube, attention les oreilles ça fait mal)
  • C8: 4.2 KHz (pareil qu'au dessus, mais club encore plus restreint, voilà la note - lien youtube, attention les oreilles ça fait encore plus mal)

et 4 octaves c'est l'écart entre les graves d'un synthé, et les aigues (souvent, un synthé amateur ça fait entre 4 et 5 octaves…)

tout ça pour dire que quantifier une fréquence en repérant sa note de musique associée… même si c'est une méthode pratique quand on a pas d'outillage, c'est pas d'une grande précision, et en plus l'échelle est pas du tout linéaire…

sinon, les vibrations, c'est pas gênant pour les parties électroniques du moteur, mais si tu veux faire des roulements à billes-cubes (ou à aiguilles-pavés), ça doit bien marcher, de les taper dans la même direction 500 fois par seconde. enfin à relativiser, je suppose que les roulements seront intacts après plusieurs heures de blocage comme ça en butée à vibrer, mais ça doit pouvoir être assez usant pour les nerfs du mec qui fait les tests, à force :P

du coup pour virer le bruit, si c'est ce que dit Natalya, y'a juste à augmenter la fréquence de ta PWM. si tu la mets entre 20 et 40 KHz tu devrais plus rien entendre. ça continuera de vibrer, mais d'une amplitude moindre, et tu n'entendras plus les vibrations.

+0 -0

C'est sur que c'est hasardeux, mais j'ai pas de moyen d'obtenir une info fiable par internet.

Et normalement, les vibrations sont des rotations mécaniques, qui ne tapent pas sur les billes. Il doit certes y avoir une usure, mais comme je n'ai jamais dépassé le millier d'heures d'utilisation d'un moteur en tant que hobbyiste, je ne l'ai jamais observée.

nan la PWM est controlée sur 2 valeurs:

  • la fréquence: le nombre de motifs par seconde
  • le rapport cyclique, qui correspond au pourcentage d'un motif où tu alimente ton moteur.

si tu mets ton rapport cyclique à 30%, tu donne 1/3 de l'énergie à ton moteur, résultat il aura moins de force pour tourner si tu fais ça avec une tension de 12V, c'est comme si tu l'alimentais en 4V continu.

et si tu augmente beaucoup la fréquence (autour de 20khz suffit peut-être, 44Khz c'est sûr), normalement tu auras plus ce sifflement désagréable.

+0 -0

Ben j'ai pris la datasheet TI, en page 5, on a les caractéristiques de commutation.

switching characteristics, VCC1 = 5 V, VCC2 = 24 V, TA = 25°C
Transition time, low-to-high-level output 100ns (typ)
Transition time, high-to-low-level output 350ns (typ)

du coup, pour faire une oscillation complète, il faut 450ns. disons 500ns. Ca fait une fréquence de 2MHz, et, à ce niveau là, le signal a vraiment une sale gueule. Bon, je me suis juste planté de 3 zéros. Après, si on veut vraiment avoir une PWM avec 255 valeurs de rapport cyclique, il va falloir que le créneau qui prend 450ns puisse être le 255e de la période, donc une période de 115ns, 8.7kHz. Je n'ai pas calculé la chaleur dissipée, vu que ça dépend de la charge. Bon, après, à 20kHz, ça devrait encore marcher, si on cherche pas trop de précision sur le rapport cyclique.

Maintenant, avec une PWM à 100%, quelle que soit la fréquence, ça ne vibre pas, c'est du continu, par contre les roues devraient tourner. Là je ne vois pas où est le problème. Un bug du code à des fréquences trop élevées ?

+0 -0

ha bah j'avais calculé comme toi, mais pas avec le bon tableau, et je m'étonnais de pas avoir trouvé du tout comme toi :p

par contre, je sais pas si il a bien compris ce qu'on disait, j'ai l'impression qu'il a fait changer son rapport cyclique.

sinon, à tout hasard, est-ce qu'il y a pas un truc sur arduino qui fait que pendant 1 tick de PWM le signal est à l'état bas quand le rapport cyclique est annulé? style 2 interrutpions qui se chevauchent à l'overflow du timer? en tout cas quand on voit le degré de précision de l'équipe qui fait la doc autour d'arduino, ça m'étonnerait pas.

+0 -0

Vous m'avez un peu perdu en effet :p

J'ai trouvé ici pour changer la fréquence. Mon code :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
void setup() {
    TCCR2B = TCCR2B & B11111000 | B00000001;

    pinMode(12, INPUT_PULLUP);

    pinMode(3, OUTPUT);
    pinMode(7, OUTPUT);
    pinMode(8, OUTPUT);

    analogWrite(3, 0);
    digitalWrite(7, LOW);
    digitalWrite(8, HIGH);
}

void loop() {
    digitalRead(12) ? analogWrite(3, 0) : analogWrite(3, 255);
}

sinon, en tapant changer fréquence pwm arduino dans google, tu tombe sur ce site (clique c'est un lien)

ou tu peux copier-coller au moins cette partie de code:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void setPwmFrequency(int pin, int divisor) {
  byte mode;
  if(pin == 5 || pin == 6 || pin == 9 || pin == 10) {
    switch(divisor) {
      case 1: mode = 0x01; break;
      case 8: mode = 0x02; break;
      case 64: mode = 0x03; break;
      case 256: mode = 0x04; break;
      case 1024: mode = 0x05; break;
      default: return;
    }
    if(pin == 5 || pin == 6) {
      TCCR0B = TCCR0B & 0b11111000 | mode;
    } else {
      TCCR1B = TCCR1B & 0b11111000 | mode;
    }
  } else if(pin == 3 || pin == 11) {
    switch(divisor) {
      case 1: mode = 0x01; break;
      case 8: mode = 0x02; break;
      case 32: mode = 0x03; break;
      case 64: mode = 0x04; break;
      case 128: mode = 0x05; break;
      case 256: mode = 0x06; break;
      case 1024: mode = 0x7; break;
      default: return;
    }
    TCCR2B = TCCR2B & 0b11111000 | mode;
  }
}

et y'a des exemples en fonction de ce que tu as besoin.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte