Beeinflusst die Änderung der PWM-Frequenz in Arduino die SPI- und I2C-Kommunikation und hilft sie bei der Steuerung des Gleichstrommotors?

Ich verwende ein L293D-basiertes Motorschild zur Steuerung von zwei Gleichstrommotoren von Arduino Mega 2560. Ich verwende 5 und 6 PWM-Pin zum Einstellen der Geschwindigkeit jedes Motors. Ich habe zwei Fragen:

  1. Macht eine Erhöhung der PWM-Frequenz (von standardmäßig 500 Hz auf maximal 31 kHz) die Motoren empfindlicher? Mit der Standardfrequenz (abgesehen vom Rauschen) arbeiten die Motoren über 130-140 PWM-Pegel. Unterhalb von 130 drehen sie sich nicht, sondern geben nur das „BEEP“-Geräusch von sich. Es gibt auch wenig Unterschied zwischen 130 und 255 Pegel. Macht eine Erhöhung der Pulsfrequenz sie empfindlicher, sodass ich sie mit einer Stufe von etwa 32 (1/8 Höchstgeschwindigkeit) betreiben könnte?

  2. Wenn ja: Wird der Divisor in timer0 (wie hier beschrieben http://arduino.cc/playground/Code/PwmFrequency und hier http://www.mythic-beasts.com/~markt/ATmega-timers.html ) geändert SPI- und I2C-Schnittstelle beeinflussen? Wird (und wie) es die pulseIn-Funktion beeinflussen? (Ich weiß, dass dies die Verzögerungsfunktion beeinflussen wird, aber ich denke, ich muss das Funktionsargument neu skalieren).

Antworten (1)

1) 31 kHz ist eine viel vernünftigere PWM-Frequenz als 500 Hz. Motoren verhalten sich wie ein Tiefpassfilter und geben Ihnen im Allgemeinen das DC-Äquivalent Ihrer PWM, aber mit sehr niederfrequenter PWM, die brenzlig wird - wie Sie gesehen haben. Generell sollte man die Frequenz der PWM über die Bandbreite des Motors hinaus erhöhen – sonst sieht er eher eine Rechteckwelle als eine Gleichspannung. 31 kHz liegt genau im Bereich der meisten Motorsteuerungen, die ich gesehen habe. Sie möchten es im Allgemeinen hoch, aber nicht zu hoch (HF-Rauschen kann in andere Teile der Schaltung einkoppeln usw.). Es sieht so aus, als ob Sie mit 31 kHz in einem guten Bereich sind.

2) Es sollte diese Bitraten nicht beeinflussen. Die Peripheriegeräte sollten ihre eigenen Teiler und Skalierer haben und sollten von der Hauptuhr und nicht von einem Peripheriezeitgeber angesteuert werden. Ich kann jedoch nicht mit der pulseIn-Funktion sprechen.