mikrocontroller.net

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


Autor: Angulardisplace (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Ralph (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Felix (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: angulardisplace (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
:-D

Autor: Matthias Lipinsky (lippy)
Datum:

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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich steuere damit solidstate Optokoppler an.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich steuere damit solidstate Optokoppler an.

Und was steuern die an?

Autor: angulardisplace (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die steuern Verstärkung und Filter in einem Vorverstärker.
Sozusagen als Potiersatz

Autor: angulardisplace (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.