Hallo,
ich bastel zur Zeit an einem kleinen Projekt (DC Motor mit Back EMF
regeln).
Um zu schauen wie die Regelung funktioniert lass ich den MC ca 1s laufen
(entspricht dann ca. 100 Regelzyklen) und schreibe den Istwert, sowie
den errechneten Stellwert ins SRAM.
Nach Ende der 1s wird der Control Loop verlassen und die Daten aus dem
SRAM ins EEPROM geschrieben (unter Verwendung von avr/eeprom.h).
Soweit so gut... die Reglung funktioniert erstmal - zumindest grob - so
wie sie soll... Sollwert der Drehzahl ist ca 1/4 des Maximums.
Nun das Kuriose, wenn ich das EEPROM auslese steht meist als Stellgröße
0x03FF (PWM Stellwert voll ausgesteuert) und die gemessene Back EMF
schwankt um 0 (+- 4).
Prinzipiell sieht das passend aus... Back EMF natürlich viel zu gering
-> also maximale Aussteuerung. Der Haken an der Sache ist: ich seh bzw.
hör das die Regelung funktioniert und das der Controller nicht voll
aussteuert wie geloggt.
Noch viel kurioser:
nach mehreren Versuchen und EEPROM auslesen erhalte ich (trotz gleichen
Verhaltens des Motors) auch mal Daten die sehr gut passen. Also die so
aussehen wie sich die Motordrehzahl anhört und wie die Regelung
funktionieren sollte.
ABER: nach zweitem Auslesen des EEPROMs ohne irgendwas gemacht zu haben
(MC sitzt immer noch auf seiner Programmierstation) hab ich auf einmal
wieder die Werte wie oben drinstehen (also Vollaussteuerung)
Was könnte das sein? Schreibvorgang nicht ordentlich funktioniert? Also
zu flüchtig beschrieben und das Lesen zieht die Ladung von den EEPROM
Gates? Aber wieso stehen dann auf einmal (vermutlich ältere) andere
Werte drin?
Hier noch der Code zum EEPROM beschreiben:
Hi
Ok, du schreibst in C, da hab ich etwas Probleme. In Assembler hätt ich
dir Openeye ans Herz gelegt. Da kannst du die Werte im Prinzip Online
auslesen. Ist aber für Assembler gedacht. Trotzdem denk ich, müßte es
sich auch in C nutzen können. Das Programm macht nichts anderes, als von
einer Startadresse x-Werte über RS232 in den PC zu schieben. Die
Startadresse ist definiert durch die entsprechende SRam Adresse. Du
müßtest dir nur einen Bereich schaffen, den du direkt mit den
interessanten Werten füllst. Allerdings ist OpenEye byteorientiert. Da
mir bisher keine Information bezüglich der Verwendbarkeit zugegangen
ist, hab ich da auch nicht weiterentwickelt. Mir reicht's so, um
Informationen über die Arbeitsweise des µC zu erhalten.
Gruß oldmax
Hallo oldmax,
vielen Dank für Deine Antwort. Deine Empfehlung ist also, dass ich die
Werte statt ins EEPROM schreibe am Ende über RS232 an den PC sende?
Ich habe Dein Programm OpenEye gefunden, allerdings benutzt Du, wie Du
bereits erwähnt hast, in deiner Doku Assembler Code. Damit tu ich mich
leider ein bisschen schwer, aber wenn ich mein Projekt hier beendet hab
werd ich mich mal damit befassen.
Für den Moment könnte ich dazu ja auch selbst eine kleine USART Routine
schreiben, da ich ja nicht unbedingt den Komfort brauche die Daten
detailliert anzufordern. Danke für den Tipp, wird mein nächster Schritt
sein.
Zur EEPROM Problematik... was da Ursache sein könnte würde mich dennoch
brennend interessieren
Viele Grüße
Stefan
> (MC sitzt immer noch auf seiner Programmierstation)
Du ziehst den also ab und steckst ihn in ein Programmiergerät?
> Was könnte das sein? Schreibvorgang nicht ordentlich funktioniert?
Wie ausgelutscht sind deine EEPROM-Zellen?
Wieviele Schreibzyklen hast du darauf schon gemacht?
Oh... das hört sich irgendwie plausibel an Maik. Ich kenn mich, wie man
sieht, nicht so sehr mit Mikrocontrollern aus und habe einfach
angenommen dass die Programmierstation den nicht laufen lässt.
@Lothar:
Habe erst etwas 50 mal probiert, daran sollte es nicht liegen. Ich bin
mir ziemlich sicher, dass Maik recht hat. Ich werd mal umstellen, dass
die Regelung nur durch ein Eingangssignal gestartet werden kann.
Vielen Dank für Eure Antworten!
Stefan
Stefan schrieb:
> Oh... das hört sich irgendwie plausibel an Maik. Ich kenn mich, wie man> sieht, nicht so sehr mit Mikrocontrollern aus und habe einfach> angenommen dass die Programmierstation den nicht laufen lässt.
Der läuft los sobald er an der Stromversorgung hängt...
Stefan schrieb:
> Oh... das hört sich irgendwie plausibel an Maik.
Ja, das könnte eine mögliche Erklärung für die falschen Werte sein, um
das zu unterbinden solltest du noch einen Taster einbauen, der vorher
mindestens einmal für mehrere Millisekunden gedrückt werden muss (->
entprellt), bevor das EEPROM-Logging startet, am besten noch mit einer
kleinen LED, die anzeigt, dass das Logging jetzt aktiv ist.
Nebenbei: So richtig toll ist das ja auch nicht, einfach die
Regelung/Messung zu unterbrechen, um schnell mal 200 Werte zu schreiben.
Ich hab das selbst noch nicht nachgerechnet aber Peter Danegger meint
hier, das das ordentlich Zeit braucht, in deinem Fall u.U. mehr als eine
Sekunde:
Beitrag "Re: [ATMega EEPROM]: Ist "eeprom_read_byte" noch notwendig?"
Da würde ich die Werte lieber kontinuierlich im Interrupt, mit RS232 und
einer höheren Baudrate an den PC schicken.
> Ich kenn mich, wie man> sieht, nicht so sehr mit Mikrocontrollern aus und habe einfach> angenommen dass die Programmierstation den nicht laufen lässt.
Das lässt sich leicht klären wenn du uns mitteilst, um welche
"Programmierstation" es sich handelt.
>> @Lothar:> Habe erst etwas 50 mal probiert, daran sollte es nicht liegen.
Wenn du einmal pro Sekunde Werte schreibst, wäre dein EEPROM, zumindest
rein theoretisch, nach 27,7 Stunden am Ende seiner Lebensdauer. Wenn der
Mikrocontroller also auch in der "Programmierstation" losläuft und da
schon mehrere Stunden drin war ...
> Ich bin> mir ziemlich sicher, dass Maik recht hat. Ich werd mal umstellen, dass> die Regelung nur durch ein Eingangssignal gestartet werden kann.>> Vielen Dank für Eure Antworten!> Stefan
Hallo nochmal,
vielen Dank für Eure äußerst hilfreichen Ratschläge.
Albrecht H. schrieb:
> Ja, das könnte eine mögliche Erklärung für die falschen Werte sein, um> das zu unterbinden solltest du noch einen Taster einbauen, der vorher> mindestens einmal für mehrere Millisekunden gedrückt werden muss (->> entprellt
Ja das werde ich gleich heut Abend ausprobieren. Aber nach allem was ihr
angemerkt habt ist es wohl so, dass er einfach die offenen Eingänge
misst wenn er in der Station sitzt.
Albrecht H. schrieb:
> Nebenbei: So richtig toll ist das ja auch nicht, einfach die> Regelung/Messung zu unterbrechen, um schnell mal 200 Werte zu schreiben.
Das Beschreiben des EEPROMs mit einem Byte dauert laut Atmega Datenblatt
ca. 3.3ms, da ich 4 Byte schreiben möchte würde dies zu lange dauern um
es zwischen den Regelzyklen zu tun (würde die Regelung zumindest
beeinflussen).
Da mich in erster Linie (vorerst) der Einschwingvorgang interessiert
durchlaufe ich die Regelung von erster Messung bis ca 1s nach der ersten
Messung, danach ist der Motor sicher auf Sollwert (bzw irgendwo
drumherum). Während dieser Schleife kommen die Mess- und Stellwerte ins
SRAM. Sobald die Schleife beendet ist brenne ich das EEPROM mit den
Werten und beende dann das Programm (es findet danach also keine
Regelung oder EEPROM Brennen mehr statt).
Sicher das ist kein besonders eleganter Weg. UART wird der nächste
Schritt sein.
Albrecht H. schrieb:
> Das lässt sich leicht klären wenn du uns mitteilst, um welche> "Programmierstation" es sich handelt.
Bei der Programmierstation handelt sich um myMultiProg mit mySmartUSB.
Viele Grüße
Stefan
Stefan schrieb:
> ...> Da mich in erster Linie (vorerst) der Einschwingvorgang interessiert> durchlaufe ich die Regelung von erster Messung bis ca 1s nach der ersten> Messung, danach ist der Motor sicher auf Sollwert (bzw irgendwo> drumherum). Während dieser Schleife kommen die Mess- und Stellwerte ins> SRAM. Sobald die Schleife beendet ist brenne ich das EEPROM mit den> Werten und beende dann das Programm (es findet danach also keine> Regelung oder EEPROM Brennen mehr statt).> Sicher das ist kein besonders eleganter Weg. UART wird der nächste> Schritt sein.>
Schon ok, halt ein bisschen umständlich, da du die Werte nach Abschluss
der Messung ja auch gleich per RS232 vom SRAM an den PC übertragen
könntest, in dem Fall sogar ohne spezielle UART-Interruptroutinen in
einer einfachen Schleife, aber wenigstens weißt du jetzt wie das mit den
EEPROM funktioniert.
Bei dieser Art von Experimenten hättest du sicher auch noch Freude an
einem externen SRAM, oder wenigstens einem Controller mit etwas mehr
internem RAM wie z.B. dem ATmega 644.
> Albrecht H. schrieb:>> Das lässt sich leicht klären wenn du uns mitteilst, um welche>> "Programmierstation" es sich handelt.>> Bei der Programmierstation handelt sich um myMultiProg mit mySmartUSB.>
Hängt natürlich davon ab, was der der auf diesem Board verbaute ATtiny
nach Abschluss des Flashvorgangs mit der Resetleitung anstellt, aber
ansonsten ist da alles drauf, was ein ATmega zum Laufen braucht, ich
würde mal sagen der startet sofort nach Beendigung des
Programmiervorgangs.
> Viele Grüße> Stefan