- 12V Akku mit 280 Ah bauen         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20

Thema: PWM Signal mit max. 5MHz

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.06.2004
    Alter
    43
    Beiträge
    232

    PWM Signal mit max. 5MHz

    Anzeige

    Praxistest und DIY Projekte
    Hi Leutz!

    Ich experimentiere gerade mit dem PWM Signal und hab folgenden Bascom-Code:

    Code:
    $regfile = "m8def.dat"
    $crystal = 4000000
    $baud = 9600
    
    
     Dim A As Byte
         A = 0
    
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 64
    
    Do
    
    If A < 255 Then A = A + 1
    
    Compare1a = A
    
    Waitms 500
    
    Print A
    Loop
    
    End
    Das Signal scheint von meinem Mega8 erzeugt zu werden, denn die Motoren drehen sich. Doch da sie immer mit voller Geschwindigkeit laufen, denke ich, dass das PWM Signal zu hoch frequentiert ist. Der L293D verkraftet ja nur bis 5 MHz. Wie kann ich das Signal auf die 5 MHz anpassen, so dass ich die Geschwindigkeit steuern kann?

    MFG!

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    29.12.2004
    Ort
    Bayern
    Alter
    45
    Beiträge
    90
    Hi,
    versuchs mal, wenn du deine Ausgangsregister setzt...
    Also beim mega8: DDRB.1=1 (für OCA1)
    und über 5Mhz kann das sig nicht haben, da du nur 4Mhz Takt hast..

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.06.2004
    Alter
    43
    Beiträge
    232
    Hallo rapo!

    Nochmal langsam bitte! Das das Signal nur bis 4 Mhz läuft is jetzt klar aber wo stelle ich diese Ausgangsregister ein?

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Der PWM hat eine Frequenz von 4.000.000/64/256 also ca. 244 Hz.
    Da der Pin aber nicht als Ausgang gesetzt ist passiert an ihm auch nix. Deshalb:

    DDRB.1=1;

    Heißt: im Data-Direction-Register-B (also von Port B) wird Pin 1 als Ausgang fesetzt. "=0" hieße Eingang.

    Der Motor müsste jetzt entweder vom stehen innerhalb von ca. 2 Minuten entweder lasam anlaufen, bis zum Maximum oder genau das Gegenteil. Und nach diesen 2 Minuten dann in dem Zustand bleiben (2Minuten und 3 Sekunden )

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.06.2004
    Alter
    43
    Beiträge
    232
    Danke für die Hinweise!
    Mein Code sieht jetzt so aus:

    Code:
    $regfile = "m8def.dat"
    $crystal = 4000000
    $baud = 9600
    
    
     Dim A As Byte
         A = 0
    
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 64
    
    Ddrb.1 = 1
    
    
    Do
    
    If A < 255 Then A = A + 1
    
    Compare1a = A
    
    Waitms 200
    
    Print A
    Loop
    
    End
    Der Motor dreht sich auch und ändert ab und zu die Geschwingkeit... Aber das sieht eher willkürlich aus. Wie groß ist denn die Rasterweite bei "Compare1a"? Läuft sie wirklich nur bis 255 oder gehts da noch weiter?

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Die Geschwindigkeit ändern im sinne von mal schneller mal langsamer? Das würde mich sehr wundern!

    Ja es geht mehr, Timer 1 hat 10 Bit! Du musst oben statt "Pwm = 8" "Pwm = 10" schreiben, dann werden die 10 Bit des PWMs ausgenutzt, also Werte von 0 bis 1023. Der Mega8 kann mit bestimmten Konfigurationen bis zu 16 Bit, aber keine Ahnung wie das unter Bascom geht

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.06.2004
    Alter
    43
    Beiträge
    232
    Naja es gab einige male ein Rucken des Motors, danach lief er wieder auf volle Leistung....

    Mit dem Code möchte ich eigentlich bewirken, dass der Motor immer schneller läuft. Stimmt der Code dafür?

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Naja es gab einige male ein Rucken des Motors, danach lief er wieder auf volle Leistung....
    Hm, also er ruckelt und gibt dann vollgas? Er sollte wie gesagt entweder stehen und dann schneller bis VOllgas. UNd Vollgas halten oder genau das Gegenteil tun. SChreibt doch mal bitte statt DDRB... oben über Config Timer1... das hier:

    Config Pinb.1 = Output

    Sollte das geilche bewirken, aber hier bin ich mir sicherer, dass es klappt, oder schreib einfach DDRB=255.

    Häng doch an den port statt der Motorschaltung mal ne LED mit Widerstand und überprüfe was passiert.

    Ansonsten weiß ich auch nicht mehr. Überprüf nochmal die Ports, nciht das er an am falschen Pin hängt oder so.

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.06.2004
    Alter
    43
    Beiträge
    232
    Also das Ruckeln kam durch einen Wackelkontakt in der Stromversorung. Ist jezt aber behoben!

    Der Motor dreht die ganze Zeit auf vollen Touren. Die ersatzweise angeschlossene LED blinkt rasend schnell, sie leuchtet fast ständig...
    Wird die Geschwindigkeit überhaupt über das Compare1a gesteuert?

    Achja auch die Änderungen bewirken nichts...

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Also das Ruckeln kam durch einen Wackelkontakt in der Stromversorung


    Die ersatzweise angeschlossene LED blinkt rasend schnell, sie leuchtet fast ständig...
    Hast du die Fusebits richtig eingestellt? Externes Quarz? Kommt am PC was vom AVR im Terminal an? Ein Flackern solltest du bei über 200Hz kaum noch wahrnehmen.

    Kann ja nicht sein, das wir den Fehler nicht finden, hab mich scheinbar zu lange nicht mehr mit Bascom beschäftigt. Probier einfach mal den Code hier aus und setz für Compare1a mal andere Werte.

    Code:
    $crystal = 4000000
    $regfile = "m8def.dat" 
     
    Config Portb = Output
    
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8 
    
    Enable Interrupts
    
    Do 
    Compare1a = 128 
    Compare1b = 128 
    Loop

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test