-         

Ergebnis 1 bis 6 von 6

Thema: Rechteckgenerator mittels µC

  1. #1

    Rechteckgenerator mittels µC

    Anzeige

    Hallo Leute.

    Ich benötige mal ein paar grundlegende Info´s darüber wie man einen Rechteckgenerator mittels µC realisieren kann.

    Seit September diesen Jahres erhalte ich im Rahmen der Technikerausbildung 4 Stunden pro Woche Unterricht, in der µC Programmierung, in Assembler.
    Für die Realisierung des Generator`s ist ein Jahr Zeit. Ich denke / hoffe der Zeitraum dürfte trotz meines Anfängerstatus genügen.

    - Die Frequenz soll auf 8 Kanälen jeweils von 1 - 1500 Hz
    stufenlos einstellbar sein.
    - Bei jedem Kanal soll die Phasenverschiebung und das
    Tastverhältnis, in Bezug auf eine "Masterfrequenz", stufenlos
    einstellbar sein.

    Erste benötigte Info´s:
    - Nennt mir bitte mal 2 oder 3 µC´s die dafür geeignet sind.
    - Reicht ein µC für alles? ( Mangels verfügbarer Timer )
    - Wie wird das Signal mittels Timer erzeugt.

    Das wären die ersten Fragen.
    Schon mal vielen Dank im voraus!

    Gruß Marco

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.07.2009
    Ort
    Wien
    Beiträge
    131
    stufenlos gibt's nicht in der digitaltechnik. nicht weil ich gern klugscheiß, sondern weil das einen wesentlichen parameter deines setups ergibt, die zugrundeliegende zeitauflösung.

    das wäre also der erste schritt: welche zeitauflösung? angenommen, "stufenloses" tastverhältnis und phasenlage heißt 256 schritte, macht das bei 1.5kHz 384kHz; das sind bei 16MHz taktfrequenz 41 zyklen pro zeiteinheit, nicht sehr viel.

    du könntest jetzt hergehen und für deine 8 kanäle vorberechnen, wieviele zeiteinheiten das jeweilige signal ein und aus sein muß, und dann nur mehr raufzählen und wenn der entsprechende wert erreicht ist, umschalten. dazu hast du pro kanal aber nur 5 CPU-zyklen zeit. nachdem du wegen der auflösung mindestens mit 24bit rechnen mußt, ist das unmöglich, jedenfalls bei dieser auflösung.

    elegant fände ich folgendes, was aber wegen des variablen taktverhältnisses nicht geht, nur für 1:1: du rechnest mit festkommazahlen (24 oder 32 bit), und für jeden kanal gibt's einen zähler und einen wert, der bei jedem schleifendurchlauf dazuaddiert wird. das MSB vom zähler ist dann dein ausgabewert für diesen kanal. das ließe sich nämlich völlig ohne branches in eine schleife packen, an deren ende dann die gesammelten ausgabewerte auf einen port ausgegeben werden. die schleife hat dann eine fixe anzahl CPU-zyklen, sprich, das timing ist stabil. leider fällt mir hier keine variante ein, wie man das tastverhältnis da einbringt, ohne branches und die damit verbundenen variablen laufzeiten.

    zum controller: optimal wäre einer, bei dem alle 8 bits eines ports verwendbar sind, dann kannst du nämlich alle kanäle zum exakt gleichen zeitpunkt umschalten. das ginge zb mit dem atmega8, allerdings mußt du dann entweder auf die RS232 oder auf den externen quarz verzichten.

    cm.

  3. #3
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Wenn man eine Phasenverschiebung haben will, dann macht das nur Sinn wenn die Signale die gleiche Frequenz haben.
    Das macht schon einen Unterschied ob man 8 verschiedenen Frequenzen oder nur 1 Frequenz mit 8 Phasen und PWM Verhältnissen braucht.
    Bei einer Frequenz von nur 1500 Hz könnte man das Signal wie oben angedeutet auch noch per Software erzeugen. Die Vergleiche mit fester Laufzeit gehen schon, wenn man das Ergebnis eins vergleiches per Shift befehl aus dem Carry flag ausliest. Das ist für software PWM eine sehr elegante Lösung.

    Mit der Softwarelösung wird man für die PWM Breite eine Auflöung von der Größenordung 60 Zyklen oder mehr bekommen. Wenn es feiner sein soll, dann müßte man die PWM hardware nutzen. Wegen der variablen Phase wird man so vermutlich nur 1 Signal pro timer erzeugen können, also nur 2- 4

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.07.2009
    Ort
    Wien
    Beiträge
    131
    Zitat Zitat von Besserwessi
    Wenn man eine Phasenverschiebung haben will, dann macht das nur Sinn wenn die Signale die gleiche Frequenz haben.
    nein, jedenfalls theoretisch betrachtet. wo es in der praxis relevant sein könnte, sowas zu generieren, ist eine andere frage

    außerdem ist's billig zu implementieren, weil du die phasenlage nur bei der initialisierung in den phasenakkumulator schreiben mußt.

    Die Vergleiche mit fester Laufzeit gehen schon, wenn man das Ergebnis eins vergleiches per Shift befehl aus dem Carry flag ausliest. Das ist für software PWM eine sehr elegante Lösung.
    ja, das wär ein guter ansatz.

    cm.

  5. #5

    Hardwarelösung?

    Hallo besserwessi,
    schon mal vielen Dank für die Vorschläge an euch beide!
    Könntest du mir bitte die PWM mittels Hardware etwas genauer erläutern.
    Und wie fein kann man damit "auflösen".

    Gruß Marco

  6. #6
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Mit der PWM hardware kann rein in hardware ein Rechtecksignal mit variablem Tastverhältnis und mit in grenzen variabler Frequenz erzeugt werden. Allerdings hat man davon nur relativ wenige Einheiten zur verfügung. Rein in hardware ist das vor allem bei hohen Frequenzen interessant, denn man kann so bis auf taktzyklen genaue Signale erzeugen. Für niedriege Frequenzen muß man den Takt oft vorher teilen und hat dann weniger Auflösung, vor allem bei den 8 Bit timern.

    Mit Aufwand in Software geht es auch zumindest 2 Signale bei niedreigen Frequenzen noch bis auf einen taktzyklus genau zu erzeugen. Man muß dann nur zur rechten zeit jeweils PWM an und ausschalten. Die Timer laufen die ganze Zeit durch. Bei mehr als etwa 4 Signalen wird es aber vermutlich Probleme geben, weil die Laufzeit zu lang wird.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •