PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ATtiny13 Problem mit PWM



stefan8010
20.05.2011, 20:37
Hallo,

mit dem ATtiny13 erzeuge ich ein PWM Signal, welches über einen L293D die Leistung von Motoren regelt.
Ist ein NXT Motor angeschlossen spinnt das PWM- Signal. Mal läuft der Motor schneller, dann langsam und ziemlich schnell erst mal gar nicht mehr. Ohne den ATtiny13, also ohne PWM, läuft der Motor ohne Probleme mit voller Leistung. Habe ich einen Motor mit geringerer Leistung angeschlossen scheint die PWM zu funktionieren.
Ist in meinem Quellcode evtl. ein Fehler oder weiß jemand woher das kommen könnte?


$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 10

Config Portb.0 = Output 'PWM M1
Config Portb.1 = Output 'PWM M2
Config Portb.3 = Input 'Poti M1
Config Portb.4 = Input 'Poti M2

Config Timer0 = Pwm , Prescale = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc

Dim Analog_m1 As Integer
Dim Analog_m2 As Integer

Do
'M1
Analog_m1 = Getadc(3)

Select Case Analog_m1
Case 0 To 200:
Pwm0a = 140
Case 201 To 400:
Pwm0a = 100
Case 401 To 600:
Pwm0a = 60
Case 601 To 800:
Pwm0a = 40
Case 801 To 900:
Pwm0a = 20
Case 901 To 1023:
Pwm0a = 0
End Select

'M2
Analog_m2 = Getadc(2)

Select Case Analog_m2
Case 0 To 200:
Pwm0b = 140
Case 201 To 400:
Pwm0b = 100
Case 401 To 600:
Pwm0b = 60
Case 601 To 800:
Pwm0b = 40
Case 801 To 900:
Pwm0b = 20
Case 901 To 1023:
Pwm0b = 0
End Select

Loop
End

Gruß
stefan8010

Besserwessi
20.05.2011, 22:29
Am Programm wird der Fehler eher nicht liegen. Da es vom Motor abhängt, spricht das mehr dafür, dass mit dem stärkeren Motor irgendwie Störungen erzeugt werden. Ein paar Mögliche Fehlerursachen:
1) die Versorgungsspannung bricht ein und der µC startet gelegentlich neu
2) die Reset Leitung (vom ISP) fängt sich Störungen ein
3) die AD Eingänge werden gestört

Als Test könnte man an den einen noch freien Pin ggf. einen LED hängen. Am Anfang des Programms dann ein kurzes Blinken der LED einfügen, bevor der Motor startet. Ggf. reicht auch schon eine deutlich Verzögerung am Anfang des Programms um einen Reset festzustellen.

oberallgeier
21.05.2011, 00:33
Hi Stefan,

wie hast Du den Motor versorgt? Ist die Motorversorgung (Netzteil, Batterie/Akkupack) die gleiche für Motor und Controller? Dann dürfte es ziemlich klar sein, dass Unterspannung bzw. Störungen beim Motorbetrieb der Grund für das "Spinnen" ist. Übliche, ziemlich störungsfreie Systeme haben für Controller und Verwandte eine von den übichen Verdächtigen wie Motoren, Servos etc. getrennte Versorgung. Dabei muss aber der GND aller Systeme auf eine gemeinsame Leitung gehen!

Den Vorschlag von Besserwessi kann ich nur unterstützen. Ich habe prinzipiell in meinen Programmen sofort nach der Portdefinition eine kleine Blinkroutine eingefügt, die etliche kurze Blitze an einer Kontroll-LED generiert, bevor ich Timer definiere und Interrupts freigebe. Damit erkenne ich ziemlich sicher zufällige Interrupts.

Viel Erfolg

stefan8010
21.05.2011, 09:25
Hallo,


Ist die Motorversorgung (Netzteil, Batterie/Akkupack) die gleiche für Motor und Controller?
Ja. Habe die jetzt getrennt und alles funktioniert. Danke!

Gruß
stefan8010