- 12V Akku mit 280 Ah bauen         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: PWM Signal für Motor in C

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    68
    Beiträge
    531
    Anzeige

    Praxistest und DIY Projekte
    Da steht zweimal 'COM1A0' und keine 'COM1B0'

    gruss

    Henk

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    68
    Beiträge
    531
    //PWM
    TCCR1A = 0x00;
    TCCR1B = 0x00;

    //WGM10 = mode 1 = PWM Phase correct TOP=0x00FF
    //COM1A1 und COM1A0 = 11 = (Table 38 pdf)
    // => OC1A high on upcounting compare match, low on downcouting compare match
    //COM1B1 und COM1B0 = 11 = (Table 38 pdf)
    // => OC1B high on upcounting compare match, low on downcouting compare match
    TCCR1A |= (1<<WGM10) | (1<<COM1A1) | (1<<COM1A0) | (1<<COM1B1) | (1<<COM1B0); //Timer konfigurieren

    //prescaler /1024
    TCCR1B = (1<<CS10) | (1<<CS12);

    //======>>> port als Ausgang schalten <<<======
    //pin 19 (OC1A) und pin 18 (OC1B) als ausgang schalten (ATmega32)
    DDRD |=(1<<PD5) | (1<<PD4);

    //???
    //PORTC |= (1<<PC4) | (1<<PC6); //Fahrtrichtung

    //geschwindigkeit 0
    OCR1A = 0;
    //geschwindigkeit max
    OCR1B = 255;



    Meine bemerkungen (keine garantie es sei fehlerfrei....)

    Beim ATmega32 sind es die ports PD5 (OC1A) und PD4 (OC1B) die das PWM signal liefern.
    Die sollten als ausgang definiert sein mit 'DDRC'.
    In die Zeile mit 'TCCR1A |=' stand zweimal 'COM1A0' und keine 'COM1B0'


    99,99% dass es jetzt lauft...

    gruss

    Henk

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.12.2004
    Ort
    /dev/urandom
    Beiträge
    129
    Hallo Henk,
    danke für deine Hilfe! Tatsächlich habe ich zweimal COM1A0 verwendet und auch anstatt PD4+PD5 PD5+PD6 als Ausgang deklariert. Das kann dann ja nicht funktionieren.
    Nun habe ich folgenden Code:

    Code:
    	//PWM
    	TCCR1A = 0x00;
    	TCCR1B = 0x00;
    
    	TCCR1A |= (1<<WGM10) | (1<<COM1A1) | (1<<COM1A0) | (1<<COM1B1) | (1<<COM1B0);	//Timer konfigurieren
    	TCCR1B |= (1<<CS10) | (1<<CS12);																//Prescaler 1024
    
    
    //---------------------------------------------------------------------------------------------------------#
    	
    	// Port D
    	PORTD = 0x00;
    	PORTD |= (1<<PD2) | (1<<PD3);	//Default-Belegung
    	//			RXD RS232		TXD RS232		INT0				INT1				PWM M1			PWM M2		Sound
    	DDRD = (0 << DDD0) | (1 << DDD1) | (0 << DDD2) | (0 << DDD3) | (1 << DDD4) | (1 << DDD5) | (1 << DDD7); 
    
    
    	// Port C
    	PORTC = 0x00;
    	//			Motor1.1			Motor1.2			Motor2.1			Motor2.2
    	DDRC = (1 << DDC4) | (1 << DDC5) | (1 << DDC6) | (1 << DDC7);
    
    
    	PORTC |= (1<<M1_D1) | (1<<M2_D1);					//Fahrtrichtung
    
    OCR1A = 255; 
    OCR1B = 100;
    Das führt jetzt dazu, dass die Motoren mit steigender Zahl langsam werden! Ab etwa 230 tut sich garnichts mehr. Aber ansonsten scheint es doch zu funktionieren (hatte anfangs bedenken wegen der Antiproportinalen Motordrehzahl). Nochmal vielen Dank!
    Hilfe, wo ist die Anykey-Taste?

    <- Projekt Agrobot ->

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.12.2004
    Ort
    /dev/urandom
    Beiträge
    129
    Noch eine Frage: Kann ich OCR1A und OCR1B zeitgleich mit einem Befehl setzen? Ansonsten verzieht der Bot beim Anfahren, weil ein Motor verspätet andreht.
    Hilfe, wo ist die Anykey-Taste?

    <- Projekt Agrobot ->

  5. #15
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    68
    Beiträge
    531
    Kann ich OCR1A und OCR1B zeitgleich mit einem Befehl setzen?
    Gute Frage.

    Nein, dass geht nicht, aber wenn z.B. die ATmega ein externen oszilator hat mit 8 MHz taktfrequenz werden die zwei register ungefahr 1us (!) nach einander beschrieben.

    Bei theoretischen Motor (start) geschwindigkeit von 1 Meter pro Sekunde (!) macht dass ein unterschied zwischen beide Rader von 1 tausenste von eine Millimeter... Ist ja ungeheuer......

    Da musste mann doch ganz empfindlich sein dass irgendwo zu spuren. Ich denke wenn mann eine mechanische Schalter mit zwei kontakten benutzen sollte das die unterschied viel grosser ware.


    gruss

    Henk

  6. #16
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.12.2004
    Ort
    /dev/urandom
    Beiträge
    129
    Doch doch, den Unterschied merkt man schon, hab es ja schon pronbiert! Der Bot hat so eine Abweichung von gut 1cm schon direkt beim Start! Und diese Abweichung potenziert sich ja mit fortlaufender Fahrt.

    Wenn man die nicht gleichzeitig setzen kann, muss ich den ersten per Software wohl etwas langsamer anlaufen lassen. Experimentieren ist angesagt....
    Hilfe, wo ist die Anykey-Taste?

    <- Projekt Agrobot ->

  7. #17
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    68
    Beiträge
    531
    Hallo Toastbrot,

    hast Du schon mal probiert um OCR1A und OCR1B um zu tauschen? Ich meine
    nicht:
    OCR1A=0xFF; OCR1B=0xFF;
    programmieren sondern
    OCR1B=0xFF; OCR1A=0xFF;
    programmieren und dann getestet wass die unterschied ist?
    Vielleicht hat der Bot noch immer die gleiche abweichung.
    Dass liegt an die reibung zwischen zahnrader u.s.w. und keine zwei motoren sind gleich, denke ich.

    Gruss

    Henk

  8. #18
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.12.2004
    Ort
    /dev/urandom
    Beiträge
    129
    Habe ich noch nicht probiert, werde ich aber auf jeden Fall noch machen! Allerdings fährt der Bot nachher sehr genau geradeaus, daher denke ich schon, dass es an der Steuerung liegt. Ich werde es aber noch ausprobieren, danke für den Tipp.
    Hilfe, wo ist die Anykey-Taste?

    <- Projekt Agrobot ->

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress