-
naja du optokoppler kannst dua uch per doppelseitigem klebeband befestigen. hatte ich so bei meinem eigenen cybot umbau geamcht aber mehr als das anbringen und nicht zufriedenstellenden ergebnis hab ich es dann verfallen lassen.
du könntst den koppler auch festschrauben... es gibt so aluprofile im baumarkt die wei eine schelle im querschnitt ist
nur wie willst du sonst eine odometrie aufbauen.. ansonsten musst du das twinset umbauen. evtl. wnen platz ist an dem motorende eine kleine encoderscheibe aus einer alten kugelmaus befestigen udn dann per gabellichtschranke.
-
Sorry, dass ich mich jetzt erst melde, aber ich hatte sehr viel zu tun! *blödes G8*
Mittlerweile habe ich mir nicht so viele Gedanken um die Befestigung des Sensors gemacht, sondern viel mehr um das Programm selbst! Zu einem PID-Regler habe ich aber noch ein paar Fragen, vielleicht kann mir die ja jemand hier beantworten?
1. Sollte ich die PID-Wert berechnung in der Hautpschleife dauernd machen lassen, oder nur immer, wenn wieder der Sensor ausgelesen wird (also nach ta)??
2. Wie kann ich beide Motoren zum Synchronlauf "zwingen"? Also wie ich einen Motor auf einer const. Geschwindigkeit halte, das ist mir jetzt klar (auch wenn ich mir nicht sicher bin, ob ichs richtig umgesetzt habe).
3. Muss der Wert KPID_buffer (in meinem Beispiel) zum alten PWM-Wert addiert werden, also:
Code:
pwm1a = pwm1a + kpid_buffer
oder sollen die beiden miteinander multipliziert werden, also:
Code:
pwm1a = pwm1a * kpid_buffer
oder soll der PWM-Wert durch den KPID_buffer wert ersetzt werden, also:
Code:
pwm1a = kpid_buffer
Ich persönlich tendiere ja dazu, die Werte zu addieren, aber 100%ig sicher bin ich mir da nicht!
hier mal mein derzeitiger Code:
Code:
$regfile = "m32def.dat"
$crystal = 16000000
$hwstack = 150
$swstack = 150
$framesize = 150
$baud = 19200
Config Portc.0 = Output
Portc.0 = 0
Config Pind.2 = Input
Config Portd.4 = Output
Config Portd.5 = Output
Config Portb.0 = Output
Config Portb.1 = Output
Portb.0 = 1
Portb.1 = 0
Portd.2 = 1
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
Pwm1a = 0
Pwm1b = 0
Config Timer2 = Timer , Prescale = 64
Timer2 = 6
On Timer2 Isr_von_timer2
Enable Timer2
Config Int0 = Rising
On Int0 Isr_von_int0
Enable Int0
Dim Abtastrate_flag As Byte
Dim Drehzahl_links As Word
'3
'10
'70
Const Kp = 1.2 '0.5
Const Ki = 0 '0.6
Const Kd = 0
Dim Esum As Single
Dim E As Single
Dim Ta As Single
Dim Ealt As Single
Dim Soll As Word
Dim Ist As Word
Dim Kp_buffer As Single
Dim Ki_buffer As Single
Dim Kd_buffer As Single
Dim Kpid_buffer As Single
'Dim Y As Word
Dim Y As Integer
Ta = 0.1 'ta = 0.1 --> 10 mal pro sek abtasten
Soll = 250
Print "Let's go"
Print
Wait 1
Portc.0 = 1
Pwm1a = 400
Enable Interrupts
Waitms 500
Do
E = Soll - Ist
'Esum = Esum * 0.95
Esum = Esum + E
Kp_buffer = Kp * E
Ki_buffer = Ki * Ta
Ki_buffer = Ki_buffer * Esum
Kd_buffer = E - Ealt
Kd_buffer = Kd_buffer / Ta
Kd_buffer = Kd_buffer * Kd
Kpid_buffer = Kp_buffer + Ki_buffer
Kpid_buffer = Kpid_buffer + Kd_buffer
Ealt = E
'Pwm1a = Pwm1a * Kpid_buffer
'Y = Kpid_buffer
If Kpid_buffer <= 0 Then
Y = Abs(kpid_buffer)
Pwm1a = Pwm1a - Y
Elseif Kpid_buffer >= 32000 Then
Y = 32000
Pwm1a = Pwm1a + Y
Else
Y = Kpid_buffer
Pwm1a = Pwm1a + Y
End If
'Pwm1a = Pwm1a + Y
'Pwm1a = Pwm1a + Kpid_buffer
'
Print "Ist = " ; Ist
Print "Soll = " ; Soll
Print "PWM1A = " ; Pwm1a
Print "kp_buffer = " ; Kp_buffer
Print "ki_buffer = " ; Ki_buffer
Print "kd_buffer = " ; Kd_buffer
Print "kpid_buffer = " ; Kpid_buffer
Print "Y = " ; Y
Print
'
Loop
End
Isr_von_timer2:
Timer2 = 6
Incr Abtastrate_flag
If Abtastrate_flag = 100 Then
Abtastrate_flag = 0
Ist = Drehzahl_links
Drehzahl_links = 0
End If
Return
Isr_von_int0:
Incr Drehzahl_links
Return
Natürlich kommen die Prints raus, wenns mal funktioniert ;-)
Derzeit habe ich einfach einen Motor mit einem Holzzylinder auf der Achse (welcher halb weiß und halb schwarz ist) über einen CNY70 mittels Tape geklebt, nur Probeweise. Die Auswertung der fiktiven Drehzahl funzt sehr gut, da ich den CNY70 mittels einem 74HC14N (Schmitttrigger) auswerte.
Bitte nehmt die Werte für Kp, Ki und Kd nicht so ernst, sind nur testweise!
Meine eigentlich Frage ist einfach nur, ob die Programmstruktur hier stimmt, also die ganzen multi- und additionen im Hauptteil?!
Gruß
Chris
-
hallo was macht dein roboter eigentlich?
wollte dir ne pn schreiben aber das hast du iwie net freigeschaltet.
habe gerade ein eigenen thread zu meine robby aufgemacht.
https://www.roboternetz.de/phpBB2/vi...=466563#466563
gruß bammel
-
Hallo,
er macht das was er soll: er fährt ;-)
wegen der pn muss ich nochmal schauen. Ich bin gerade dabei, mir informationen und evtl. auch einen Schaltplan von einem Ladegerät für Akkus zu besorgen. Könnt ihr mir eventuell sagen, wieviel Ah (mAh) 8 normale AA Batterien haben??! Den mit den Batterien bewegt er sich nach 15 min. nur noch sehr langsam . .
Welchen Akkutyp würdet ihr mir den empfehlen? Hier hab ich einen NiCd-Akku mit Ladegerät! Dieser hat allerdings nur 9,6V, was glaube ich sehr wenig ist bei einem L7806.
@Bammel:
Dein Roboter sieht wirklich sehr gut aus, ich werde hierzo aber noch in deinen Thread schreiben.
Gruß
Chris
-
also die voltzahl ist im prinzip egal wenn deine schaltungen für 9,6bolt ausgelegt ist ist das gut so.. um längere fahrzeiten zu haben musst du auf die mAh achten. mein lipo hat 11,1volt und 3200mAh
bei den standart AA akkus gibt es keine feste mAh die haben ja nachdem unterschiedlich das fängt (schätzungsweise) bei 400mAh udn das höchste was ich gesehen habe waren 2700mAh dies waren dann NiHm-Akkus.
in bezug auf ladegeräte habe ich keine ahnung benutzze immer fertige dinger
-
mir geht es eigentlich darum, wie hoch die mindestspannung sein muss, damit der L7806 noch zuverlässig seine 6V liefert!?
Kann man den davon ausgehen, dass akkus und batterien in etwa die gleiche Kapazität haben?
Gruß
Chris
-
bei aa zellen haben batterien 1,5 volt und akkus 1,2 volt. von den mAh ist das je nach dem unterschiedlich steht aber auf den zellen drauf
-
Für einen 7806 wird man wenigstens 8 V brauchen um stabil 6 V rauszubekommen. Bei mehr Strom sind vielleicht auch 8,5 V nötig. Das werden dann als 7 Akkus zu 1,2 V je Zelle. Oder theoretisch 6 Einwegzellen zu je 1,5 V. Es gibt aber auch low Drop Regler die mit etwa 6,2 V auskommen können.
Bei Batteriebtreib sind Regler wie 7806 , 7805 oder ähnliches eigenlich nur für eine kleine Leistung sinnvoll. Bei mehr Leistung sollte man ein Schaltregler oder Lowdrop Regler in Betracht ziehen. Wozu eigentlich 6 V ?
Die Motoren sollte man direkt aus den Akkus beteiben können (ggf. weniger Spannung bei den Akkus), und die µCs brauchen 4,5 - 5 V.
Bei den Akkus steht die Kapazität fast immer drauf. Das sollten bei neueren Akkus der Größe AA gut 2000 mAh sein. Bei Batterien hat man vielleicht etwas mehr Kapazität, aber nicht viel. Steht nur sehr selten drauf.