Forum: Mikrocontroller und Digitale Elektronik 25 kHz PWM Ausgabe


von Marius L. (Firma: Hochschule Ulm) (biker_92)


Lesenswert?

Hallo,

ich versuche gerade mit meinem Arduino Due Mikrocontrollerboard eine PWM 
Frequenz von 25 kHz auszugeben. Habe auf dem Microcontroller (Atmel 
SAM3X8E) einen PID Regler programmiert, dessen Ausgangssignal den Duty 
Cycle des 25 kHz Signals bestimmen soll. Habe folgende Lösung mit der 
TimerThree Bibliothek versucht anzuwenden:


#include <TimerThree.h>



const int fanPin = 14;

void setup(void)
{
  Timer3.initialize(40);  // 40 us = 25 kHz
  Serial.begin(9600);
}

void loop(void)
{
  // slowly increase the PWM fan speed
  //
  for (float dutyCycle = 30.0; dutyCycle < 100.0; dutyCycle++) {
    Serial.print("PWM Fan, Duty Cycle = ");
    Serial.println(dutyCycle);
    Timer3.pwm(fanPin, (dutyCycle / 100) * 1023);
    delay(500);
  }
}




Jedoch erkennt Arduino den Timer3 nicht, obwohl ich ihn eingebunden 
habe. Könnte mir vielleicht jemand weiterhelfen, oder einen anderen 
Lösungsvorschlag geben.

Viele Grüße
Marius

von qa (Gast)


Lesenswert?

Konkrete Fehlermeldung des Compilers bitte.

von Falk B. (falk)


Lesenswert?

Marius L. schrieb:
> edoch erkennt Arduino den Timer3 nicht, obwohl ich ihn eingebunden
> habe.

Nö, du hast nur das Include-File eingebunden. Das sagt dem Compiler, wie 
die Objekte Timer??? aussehen. Es fehlt aber die Instanz des Timers!

Etwa so, ich kenn die Inludes nicht.

timer3_type my_timer3;

my_timer3.initialize(40);.

Gibt es keine Beispiele zur Nutzung des Timers?

von Marius L. (Firma: Hochschule Ulm) (biker_92)


Lesenswert?

"Timer3 has no member named initialize" kommt immer als Fehlermeldung.

von Rolf M. (rmagnus)


Lesenswert?

Falk B. schrieb:
> Gibt es keine Beispiele zur Nutzung des Timers?

Der obige Code ist offenbar eines der Beispiele:
https://github.com/PaulStoffregen/TimerThree/blob/master/examples/FanSpeed/FanSpeed.pde

Der TimerThree.h aus der gleichen Quelle kann man entnehmen, dass die 
ganzen Memberfunktionen nur dann definiert sind, wenn entweder das:
1
#if defined(__AVR__)
oder das gilt:
1
#elif defined(__arm__) && defined(CORE_TEENSY)

In allen anderen Fällen existiert die Klasse zwar, aber ist komplett 
leer.

von Falk B. (falk)


Lesenswert?

Rolf M. schrieb:
> In allen anderen Fällen existiert die Klasse zwar, aber ist komplett
> leer.

Dann sollte man aber auch ne passende Fehlermeldung im HEaderfile 
generieren!

von Patrick (Gast)


Lesenswert?

Je nachdem wie gut du dich mit Register-/Bitmanipulationen und dem lesen 
von Datenblättern auskennst, kannst du gleich die integrierten PWM 
Peripheren des ATSAM3X8E nehmen. Dann brauchst du gar keinen Timer und 
bist je nach Anwemdungsfall flexibler.

Das Arduino Framework baut auf CMSIS auf, und dort gibt es auch 
Funktionen, um ohne Register die Peripherien zu nutzen.

von leo (Gast)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.