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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.