ich nutze einen DC Motor zusammen mit einer Treiberplatine auf welcher der MC33926 ( http://www.pololu.com/file/download/MC33926.pdf?file_id=0J233 ) verbaut ist.
Der angesteuerte Motor läuft, gibt aber nervende summende Geräusche von sich, was meiner Meinung nach am PWM Signal liegt.
Kann ich durch zuschalten von z.B. eines Kondensators das Summen wegbekommen?
"...Gibt einen analogen Wert (PWM wave?) auf einem Pin aus. Dies kann entweder für die Helligkeitssteuerung einer LED oder zur Geschwindigkeitsregelung eines Motors verwendet werden. Nach einem Aufruf analogWrite() liegt am bezeichneten Pin ein fertiges Rechtecksignal mit definiertem Tastverhältnis bis zum nächsten analogWrite() (oder Aufruf mit digitalRead() oder digitalWrite() am gleichen Pin) an. Die Frequenz dieser Pulsweitenmodulation (PWM) beträgt ungefähr 490 Hz...."
ja, und du du kannst auch Pins mit 980Hz haben, was aber die Sache auch nicht besser macht. Das Pfeifen wird nur höher.
The frequency of the PWM signal on most pins is approximately 490 Hz. On the Uno and similar boards, pins 5 and 6 have a frequency of approximately 980 Hz.
Bei Motoren wirst du ab 10Khz meist nichts mehr hören, weil die Laufgeräusche lauter sind.
Du wirst also nicht umhinkommen, deine PWM-Frequenz zu ändern.
Ich habe mal ein kleines Testprogramm geschrieben um mit den PWM Einstellungen zu testen.
Heraus gekommen ist das:
const int M1D2 = 9;
const int M1IN1 = 11;
const int M1IN2 = 12;
const int EN = 2;
int i;
void setup(){
pinMode(M1D2, OUTPUT);
pinMode(M1IN1, OUTPUT);
pinMode(M1IN2, OUTPUT);
pinMode(EN, OUTPUT);
digitalWrite(EN,LOW);
TCCR2B = TCCR2B & 0b11111000 | 0x01;
// timer 0 (controls pin 13, 4) for millis() and delay()
// timer 1 (controls pin 12, 11)
// timer 2 (controls pin 10, 9)
// timer 3 (controls pin 5, 3, 2)
// timer 4 (controls pin 8, 7, 6)
//
// TCCRnB, where 'n' is the number for the timer.
// TCCR2B for timer 2, TCCR3B for timer 3.
//
// Pins 9 and 10: controlled by timer 1 in phase-correct PWM mode (cycle length = 510)
// Setting Divisor Frequency
// 0x01 1 31372.55
// 0x02 8 3921.16
// 0x03 64 490.20
// 0x04 256 122.55
// 0x05 1024 30.64
//
// TCCR1B = TCCR1B & 0b11111000 | <setting>;
}
void loop(){
digitalWrite(EN, HIGH);
digitalWrite(M1IN1,HIGH);
digitalWrite(M1IN2,LOW);
for (i=0; i<220;i=i+10){
analogWrite(M1D2,i);
delay(100);
}
delay(2000);
for (i=220; i>0;i=i-10){
analogWrite(M1D2,i);
delay(100);
}
digitalWrite(M1IN1,LOW);
digitalWrite(M1IN2,HIGH);
for (i=0; i<220;i=i+10){
analogWrite(M1D2,i);
delay(100);
}
delay(2000);
for (i=220; i>0;i=i-5){
analogWrite(M1D2,i);
delay(100);
}
}
Kann etwas passieren, wenn ich die Einstellung 0x01 ( 31372.55 Hz ) nutze?
Der MC33926 ist ja bis Frequenzen von < 20kHz ausgelegt.
Die anderen Werte, 0x02 ... 0x05, erreichen nicht den erhofften Erfolg.
Was mir noch aufgefallen ist, der Motor läuft sanft an und kurz bevor er wieder langsam runter fährt, um die Richtung zu wechseln, "heult" er kurz auf, fährt kurz die Geschwindigkeit hoch.
Wo steckt der Fehler?
Wenn die PWM Frequenz höher wird, sind die Transistoren öfters im leitenden Zustand. Wenn sie zu hoch wird, übersteigt das eventuell die Fähigkeiten der Treiber-Schaltung die Gate-Kapazitäten schnell genug umzuladen. Dadurch wird das IC heißer. Das ist nicht zu empfehlen.
Da ist es wirklich etwas doof, dass man die PWM Frequenz nicht genauer einstellen kann.