Dear Paul,
please test this Code and use an Ozilloscope. You can see the PWM doesnt increased the value straight. The PWM hops back and forward in little steps. Is there an Teensy register bug?
I have tested different resolution but with the same effect.
Barney
please test this Code and use an Ozilloscope. You can see the PWM doesnt increased the value straight. The PWM hops back and forward in little steps. Is there an Teensy register bug?
I have tested different resolution but with the same effect.
Barney
Code:
#define AnalogWriteResolutionBits 16 // Festlegen der Aufloesung in Bit fuer die Digital Analog Umsetzer, hier die PWM Auflösung
#define AnalogWriteResolutionValue (uint16_t) pow(2,AnalogWriteResolutionBits) // Festlegen der Aufloesung (Wertebereich) fuer die Analog Digital Umsetzer
#define PWMFrequenz 50 // Festlegen der PWM Frequenz für die Ansteuerung des Motorstellers. Ueblicherweise alle 20ms ein Impuls
#define UntererStellWertMotor (uint16_t) float(1*AnalogWriteResolutionValue*PWMFrequenz/1000) // Wert berechnen für 1ms Pulsweite
#define LeerlaufStellWertMotor (uint16_t) float(1.5*AnalogWriteResolutionValue*PWMFrequenz/1000) // Wert berechnen für 1.5ms Pulsweite
#define ObererStellWertMotor (uint16_t) float(2*AnalogWriteResolutionValue*PWMFrequenz/1000) // Wert berechnen für 2ms Pulsweite
#define Pin_Motorstelleranschluss A9 // Pin A9 Motorsteller PWM-Anschluss
uint16_t pos = LeerlaufStellWertMotor; // variable to store the servo position
void setup()
{
// Die Motorsteller benoetigen ein PWM Signal mit einer Impulsweite von
// 1ms bis 2ms alle 20ms. Diese PWM wird ueber den 16 Bit Timer in Hardware realisiert
analogWriteFrequency(Pin_Motorstelleranschluss, PWMFrequenz); // Einstellen der PWM Parameter fuer den Motorsteller
analogWriteResolution(AnalogWriteResolutionBits); // analogWrite Aufloesung
analogWrite(Pin_Motorstelleranschluss, LeerlaufStellWertMotor); // Geschwindigkeitsvorgabe Motor
delay(2000);
// Ende PWM
}
void loop()
{
for(pos = UntererStellWertMotor; pos < ObererStellWertMotor; pos += 1)
{ // von 1ms to 2ms
analogWrite(Pin_Motorstelleranschluss, pos); // Geschwindigkeitsvorgabe Motor
delay(1); // waits 15ms for the servo to reach the position
}
for(pos = ObererStellWertMotor; pos >= UntererStellWertMotor; pos -=1) // von 2ms to 1ms
{
analogWrite(Pin_Motorstelleranschluss, pos); // Geschwindigkeitsvorgabe Motor
delay(1); // waits 15ms for the servo to reach the position
}
}