25 kHz PWM Ausgabe

OP (Firma: Hochschule Ulm) #6055016
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
#6055039
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?
#6055111
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.
Gast #6055515
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren