Forum: Mikrocontroller und Digitale Elektronik Software PWM für 12 Kanäle à 0-5V


von Angulardisplace (Gast)


Angehängte Dateien:

Lesenswert?

So Hallo,
Ich bin ein Einsteiger und beschäftige mich seit einiger Zeit mit 
Mikrocontrollern. Momentan möchte ich eine Software PWM programmieren.
Den Mikrocontroller benötige ich um Bauteile mit bestimmten 
Spannungswerten anzusteuern. Dabei möchte ich mehr als 12 Kanäle 
gleichzeitig steuern. Die Auflösung sollte so hoch wie möglich sein.
Außerdem sollten die Pulsabstände sehr klein sein.

Dazu habe ich mir das angehängte Programm überlegt.
Die Werte für die einzelnen Ausgänge werde ich per TWI, bzw SPI in die 
globalen Variablen übertragen.

Die Spannungswerte ändere ich nur in längeren Abständen von mehreren 
Sekunden.
Ich dachte mir, da ich den Mikrocontroller für keine anderen Prozesse 
benötige, könnte ich die PWM-Erzeugung einfacher gestalten.
Die Arbeitschleife besteht dabei aus einem Zähler der endlos nach oben 
zählt und lauter Vergleichen mit den einzelnen globalen Variablen
Ich habe gedacht, dass ich damit über die globalen Variablen
die Spannungsverhältnisse einstellen kann.
Natürlich hat man bei dieser Methode immer einen kleinen Fehler durch 
die Laufzeit des Programms, aber bei 8MHZ sollte dieser vernachlässigbar 
sein.

Anbei habe ich die Testumgebung für den ATMEGA 8 angehängt.

GainA ist dabei (2^16)/2. Damit wäre das reintheoretisch ein 
Ausgangspegel von ca.2,5V.
In der Realität habe ich jedoch gar kein Ausgangssignal.

Ich wollte fragen, ob jemand von euch weiß warum das ganze nicht 
funktioniert?
Wäre echt nett, wenn jemand sich das mal ansehen könnte, da ich wie 
gesagt noch nicht so viel Erfahrung besitze.

von Ralph (Gast)


Lesenswert?

Sieh dir die Ausgänge mit einem Oszilloskop an.
Multimeter haben einen sehr eingeschränkten Frequenzbereich in dem ein 
sinnvoller Gleichanteil gemessen werden kann.

Die Logik an sich sollte funktionieren, allerdings kenne ich den ATmega 
nicht, und kann so nicht beurteilen ob die Portsettings korrekt sind.

So wie du die MainLoop aufgebaut hast, ist die Ausgangsfrequenz extrem 
von Code abhängig. Eventuell wäre es besser die Ausgabe mit einem 
Timerinterrupt in definierten Intervallen aufzurufen. Dann hängt die 
Ausgangsfrequenz vom eingestellten Wert im Timer ab und ändert sich 
nicht bei jeder Codeänderung.

von Felix (Gast)


Lesenswert?

mmh, habe den code überflogen und mir ist kein fehler aufgefallen 
(zugegeben, code kann man eher falsifizieren als verifizieren (ist wie 
mit wissenschaftlichen Theorien (popper :-))))
gruß

von angulardisplace (Gast)


Lesenswert?

Danke, für eure schnelle Antwort.
Wenigstens besteht so eine Chance, dass es funktionieren kann.
Der Oszibefund muss leider noch auf sich warten, da ich momentan noch 
keines zur Verfügung habe (Ich weis, ist n bissle ärmlich, wenn man µC 
programmieren will).
Ich wollte erst mal den Code so einfach wie möglich zum Laufen bringen.
Den Timerinterrupt kann man später ja immer noch einbauen, um die 
Frequenz zu steuern.
Ich habe mir halt gedacht, dass ich statt dem Interrupt eventuell auch 
einfach in der Arbeitsschleife ne Verzögerungsschleife einbaue, dann 
könnte ich eventuell den Takt einfach steuern (Poti->A/D) und dann per 
Oszi einstellen.
Ich häng halt irgendwie noch an der guten alten Hardware ;-)

von Gast (Gast)


Lesenswert?

:-D

von Matthias L. (Gast)


Lesenswert?

Super. Somit hast du eine 16bit-12Kanal Doft-PWM programmiert.
Was steuerst du mit dieser PWM an?

von Gast (Gast)


Lesenswert?

Ich steuere damit solidstate Optokoppler an.

von Matthias L. (Gast)


Lesenswert?

>Ich steuere damit solidstate Optokoppler an.

Und was steuern die an?

von angulardisplace (Gast)


Lesenswert?

Die steuern Verstärkung und Filter in einem Vorverstärker.
Sozusagen als Potiersatz

von angulardisplace (Gast)


Lesenswert?

Bin jetzt doch noch schnell an ein Oszi gekommen.
Verrückterweise zeigt der Atmega8 am Pin D2 ein 5V Signal.
An allen anderen Null.
Ist denk ich mal schrottreif, da ich kurz n anderes Programm zum testen 
drüber laufen lies, und da war das gleiche.

Wenn von euch jemand den kurz zu Hand hätte und einfach mal Messen 
könnte, ob bei im am Pin B0 n 2,5V Signal rauskommt, dann wäre das echt 
nett.
Ich hab nämlich nur den einen gehabt. Es liegen sonst nur noch Atmega 
128 rum, und für die hab ich keine Testumgebung (SMD).

Wäre also wie gesagt echt nett, wenn einer von euch das machen könnte.

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.