Go Down

Topic: Arduino PWM-Generator (Read 4576 times) previous topic - next topic

Holzwurm56

Hallo,
ich suche für Testzwecke einen PWM-Generator bei dem man die Frequenz und das Tastverhältnis einstellen kann, mit LCD 2x12. Ca. 50kHz max. Hat jemand so etwas schon mal gebaut? Leider bin ich aufgrund fehlender Kenntnisse nicht in der Lage so etwas selbst zu programmieren. Mit einem NE555 würde ich es ev. hinkriegen, aber der Arduino wäre mir lieber.

Vielen Dank für jede Antwort

Hans

agmue

Spontan: 16-Channel 12-bit PWM/Servo Driver "Adjustable frequency PWM up to about 1.6 KHz" mit Anleitung.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

guntherb

Ich fürchte, das wirst du mit den Standard-Arduino Befehlen nicht schaffen. 50kHz ist viel.

Wenn, dann geht das nur, in dem du den fast pwm mode des Timer1 verwendest.
dazu musst du aber direkt die Register des Atmega beschreiben.

Wie es geht, steht im Datenblatt des ATmega.
Aber das ist nicht einfach.
Grüße
Gunther

gregorss

ich suche ...
Guck mal in diesen Thread. Evtl. ist der Inhalt interessant für Dich.

Gruß

Gregor
Nicht lange fackeln, lass' Backen wackeln! (Seeed)

Doc_Arduino

#4
Oct 21, 2016, 10:38 am Last Edit: Oct 21, 2016, 10:41 am by Doc_Arduino
Hallo Hans,

wenn du es lernen möchtest, dann helfe ich dir dabei es Schritt für Schritt zu programmieren. Die Basics mußte drauf haben und gewillt sein mit dem Datenblatt umzugehen. Wenn du also zum Bsp. die Einstellungen mittels Poti ändern möchtest, dann solltest du jetzt schon in der Lage sein ein Poti einzulesen und den Wert auf der seriellen ausgeben zulassen. Timer Einstellungen erkläre ich dir mittels Datenblatt. Dabei lernst du viel mehr als wenn du fertigen Code bekommst. Das schwierigste an der Sache ist eigentlich nur die richtigen Einstellungen an Hand vom Datenblatt rauszusuchen und paar Dinge zubeachten, die auch im Datenblatt stehen.
Welchen Arduino hast du? Bereit fürs Eingemachte?
Wenn nicht, dann nimm Post #1.
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

MaHa76

Bitte nimm nicht Post #1 - ich würde gern mitlesen und lernen :-)

ElEspanol

dto. und Post #1 geht auch nur bis 1,6khz

Theseus

Hallo,
ich suche für Testzwecke einen PWM-Generator bei dem man die Frequenz und das Tastverhältnis einstellen kann, mit LCD 2x12.
Ein 2x12-LCD ist kein Standard. Das kann Probleme machen. Standard-LCDs sind 2x16 oder 4x20. Hier funktioniert die Ansteuerung und Libs reibungslos. Außerdem sind die Standard-LCDs als Massenware extrem günstig.

Holzwurm56

Hallo,
Display mit 12x12 habe ich nur so hingeschrieben, klar nehme ich ein 16x16 oder 20x20.
Hallo Doc_Arduino vielen Dank für dein Angebot, dieser Weg wäre mir natürlich lieber da kann ich was dazulernen. Ich probiere mal das Grundgerüst zu programmieren und stelle es hier ein.
Da ich von Timern wenig Ahnung habe hätte ich mit delayMicroseconds gearbeitet, Frequenz und Tastverhältnis hätte ich mit 2 Drehgebern an 2 Interupteingängen eingestellt.

MfG

Hans

HotSystems

Display mit 12x12 habe ich nur so hingeschrieben, klar nehme ich ein 16x16 oder 20x20.
Hier wirst du bei den Displays auch schwer fündig. ;)
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

ArduFE

#10
Oct 21, 2016, 02:08 pm Last Edit: Oct 21, 2016, 02:36 pm by ArduFE
Ich fürchte, das wirst du mit den Standard-Arduino Befehlen nicht schaffen. 50kHz ist viel.
Mit den Befehlen schon, nur nicht mit der Standard Hardware.

http://pjrc.com/teensy/td_pulse.html

Wahrscheinlich kommen andere 32 Bit Boards auch in diese Bereiche, nur finde ich da keine Doku.

Doc_Arduino

Hallo,

mit Befehlen geht schon nur wird man keine absolut stabilen Frequenzen hinbekommen. Auch wenn der Teensy schneller ist. Die Laufzeit der loop funkt dann mit rein. Deshalb ist die Nutzung der Hardware-Timer sinnvoll. Die Hardware-Timer belasten wiederum die loop nicht. Eine Win-Win Situation.

Ich würde erstmal auf Hans eingehen wollen. MaHa u.a. machen einfach mit und können natürlich auch Fragen stellen. Ich hoffe das ergibt kein Kaos. Ich hoffe Hans hält durch. Ein Oszi oder Logikanalyzer ist vorhanden?
Wobei das grundlegend nicht sooo schwer ist, wenn man erstmal weiß welche Bits man in welchen Register einstellen und welche Registerwerte man später ändern muß. Ich werde wenn Hans soweit ist erstmal paar Grundfragen zum Timer stellen, damit ihr ein Gefühl bekommt wie schnell der ist. Vorher kümmern wir uns noch um stabile Potiwerte. Dabei kommt die Filterfunktion von Gunther ins Spiel. Ich möchte das Schritt für Schritt aufbauen und nicht alles auf einmal. Dauert zwar länger, erhoffe mir dadurch jedoch eine Struktur und kein Kaos und das alle mitkommen.

grober Ablauf:
Wir nehmen den Timer 1. Das kalte Wasser kann nicht tief genug sein. Wer den beherrscht kann später alles.
a) grundlegende Fragen zum Timer, damit ihr ein Gefühl bekommt wie schnell oder langsam der sein kann
b) arbeiten mit dem Datenblatt und ein wenig rechnen
c) Auswahl des Timer Mode und daraus folgend die Registereinstellungen
d) erste Versuche mit festen Settings
e) erste live Änderung des Timers einbauen
f) zweite live Änderung des Timers einbauen
g) ... wird sich ergeben ...

Ich bin auch nicht 24h am Tag und 7 Tage die Woche im Forum. Ich versuche es so oft wie möglich.

Also wenn Hans das analoge einlesen zweier Potis und serielle Ausgabe dessen fertig hat, machen wir weiter würde ich vorschlagen. Code bitte in Code Tags, Button oben links </>.

Es müßte sich noch jeder das Pinout zu seinem Arduino besorgen. Dann ist es egal ob man einen Uno oder Mega hat. Nur die Arduino-Board Pin Nummern sind dann jeweils verschieden. Die interne Bezeichnung ist gleich.

http://www.pighixxx.com/test/pinoutspg/boards/

Pinout Uno

Pinout Mega2560

Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

agmue

#12
Oct 21, 2016, 05:13 pm Last Edit: Oct 21, 2016, 05:22 pm by agmue
Wahrscheinlich kommen andere 32 Bit Boards auch in diese Bereiche, nur finde ich da keine Doku.
Der teensy ist eine gute Idee!

Befehle/Funktionen/Methoden, die die Hardware optimal unterstützen, gefallen mir und eine Doku ist doch sehr hilfreich, weshalb ich schnell mal ein Programm für den teensy 3.2 gezimmert habe, um die Funktionalität zu überprüfen.

Mit ein paar Zeilen kommt man zum Erfolg:


Auflösung 9 mit 96 MHz CPU Frequenz an Pin 3. Oben ist die vom TO gewünschte Maximalfrequenz (50 kHz) zu sehen mit zwei Tastverhältnissen, unten eine beliebige niedrigere Frequenz (1,91 kHz) ebenfalls  mit zwei Tastverhältnissen.

Nun möchte ich nur ungern als Spielverderber dastehen, aber Hans würde ich einen teensy 3.2 mit kurzem, leicht verständlichem Programm empfehlen.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

gregorss

Nun möchte ich nur ungern als Spielverderber dastehen ...
Was auch immer Hans am Ende macht bzw. nimmt, ich lese auf jeden Fall interessiert mit. Ich kenne mich mit Oszi-Grafiken nicht allzu gut aus, könntest Du kurz erklären, was die Angaben unter den Kurven bedeuten (und von was für einem Oszi die stammen)?

Gruß

Gregor
Nicht lange fackeln, lass' Backen wackeln! (Seeed)

Doc_Arduino

Hallo,

wie gesagt, 50kHz würde auch ein Arduino schaffen. Nur macht das keinen Sinn. Damit wäre er fast ausgelastet. Änderungen an der Looplaufzeit wirken sich direkt auf den Takt aus. Ist bei allen µC so wenn man das im Hauptprogramm macht. Egal ob Arduino oder Teensy. Deswegen gibts Hardware-Timer. Zudem hat Hans nun einmal einen Arduino und keinen Teensy. Ich habe nichts gegen Teensy, nur wenn Hans das hier wirklich durchziehen möchte, dann macht bitte für den Teensy einen eigenen Thread auf. Sonst gibts hier Kaos. Der Teensy bringt hier keinen Vorteil.
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

Go Up