Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Assembler Modul DA-Wandler gesucht für Unterdruckmessung Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Andreas - 11.07.2013 12:48)
 Als Antwort auf Re: Assembler Modul DA-Wandler gesucht für Unterdruckmessung von Andreas - 10.07.2013 15:02
Andreas nutzt:  Open-Micro, Open-Mini
> > Hallo Andreas!
> >
> > > Und jetzt mal wieder das ABER. Der OM wird mit 8MHz getaktet. Würde bedeuten, dass er ca. 125 ns pro Takt braucht. Da jeder Schritt im Programm mindestens einen Takt bedeutet, und es vier Schritte innerhalb der for next Schleife sind, wären das theoretisch 500 ns. Angenommen die Motordrehzahl wäre 1.200 U/min, wären das 50 ms für eine Umdrehung. Ergo rund 100000 Messungen pro Umdrehung.
> >
> > Jo, das wäre ja richtig super, wenn das so funktionieren würde. Die rund 100000 Messungen pro Umdrehung sind aber reine Utopie. Zu den genauen Zeiten müsste Dietmar dann aber etwas sagen können, ich habe keine Ahnung wie schnell der Tocken-Code abgearbeitet wird...
> >
> > > Wie groß kann ein for next Schleife realisiert werden? Gibt es da Grenzwerte?
> >
> > Die For Schleife ist auch Byte orientiert, geht also auch nur bis 255, dann ist Schluss. Wenn Du hier größere Werte brauchst, dann musst Du mehrere For Schleifen ineinander verschachteln (wird aber mit Sicherheit nicht notwendig sein).
> >
> > LG Jens
>
> Hallo Jens,
> hab grad ´ne schöpferische Pause eingelegt. ;-)
> 100000 Messungen ist doch nur Theorie. Auch wenn nur 10000 Messungen wären, würde eine ziemlich hohe Genauigkeit entstehen. Im Test verläuft es aber noch nicht so gut wie ich dachte. Ich habe daher noch ein zweite Prototypenplatine gebaut, die mittels Bargraphen die Absolutwerte der beiden Zylinder anzeigt. Jetzt weiß ich, dass das Programm einen Fehler hat.
>
> Die zwei verschachtelten Schleifen habe ich also erst mal aufgehoben und lasse derzeit nur eine Schleife durchlaufen. Damit geht die Anzeige erst mal schneller, wenn auch rucklig in der Anzeige, weil der Maximalwert nicht immer erreicht wird. Ich bin mir nicht sicher, aber ich denke, dass der Fehler in der Subtraktion liegen könnte.
>
> #start
>     for h = 0 to 255                   ' Festlegung der Messdurchläufe zur Maxiamlwertermittlung
> '   for i = 0 to 255                   ' Festlegung der Messdurchläufe zur Maxiamlwertermittlung
>     if Zyl1 > z1 then z1 = Zyl1        ' Maximalwert Zylinder 1 ermitteln und in Variable ablegen
>     if Zyl2 > z2 then z2 = Zyl2        ' Maximalwert Zylinder 2 ermitteln und in Variable ablegen
> '   next                               ' nächste Messung (Sprung zu for 2 )
> '   i=0                                ' Rücksetzen Zähler 1
>    next                                ' nächste Messung (Sprung zu for 1)
>    if (z1) - (z2) <= 9 then tmp=125    ' Vergleich Zylinder 1 mit 2 und bei annähernder Gleichheit setzen der Variable des PWM auf Mittenspannung
>    if (z2) - (z1) <= 9 then tmp=125    ' Vergleich Zylinder 1 mit 2 und bei annähernder Gleichheit setzen der Variable des PWM auf Mittenspannung
>    if (z1) - (z2) > 9 then gosub positiv  ' Vergleich Zylinder 1 mit 2 und bei Zylinder1 größer Zylinder2 Sprung in Unterprogramm positiv
>    if (z2) - (z1) > 9 then gosub negativ  ' Vergleich Zylinder 1 mit 2 und bei Zylinder2 größer Zylinder1 Sprung in Unterprogramm negativ
>    pwm1 tmp                               ' zuweisen der Variable zum Pulsweitenmodulator
>    h = 0                                  ' Rücksetzen Zähler 2
>    z1 = 0                                 ' Rücksetzen Variable Unterdruckwert Zylinder1
>    z2 = 0                                 ' Rücksetzen Variable Unterdruckwert Zylinder2
>    Pause 20
>    goto start                             ' Rücksprung zum Anfang
>
> Ich habe jetzt testhalber die Variablen z in Klammern gesetzt. Ich bin mir nicht sicher, ob das Minus nicht als negatives Vorzeichen interpretiert wird.
> Der Fehler äußert sich dahingehend, dass bei Erreichen eines Wertes für eine Subroutine der z-Wert offenbar "wegläuft". Anzeige geht nach Maximum und erlischt dann.
> In den Unterprogrammen wird lediglich noch ein Vergleich von z mit vordefinierten Werten vorgenommen und dann ein dazu passender Wert an die Variable tmp übergeben. Dann erfolgt der Rücksprung. Also nichts dramatisches.
> Da laut Programm nach Abschluss der Schleife alle Variablen auf Null gesetzt werden (rücksetzen) sollte das weglaufen eigentlich nicht passieren.
>
> Ich muss das noch mal direkt messen bei Betrieb. Derzeit habe ich nur wenig Zeit. Wird also erst im August weiter gehen.
>
> Fällt Dir noch was ein ?
>
> LG Andreas

So! Nun funktioniert es schon besser. War ein Denkfehler auf der einen Seite und ein Hardwareproblem auf der anderen Seite.
Im ersten Fall habe ich bei der Umsetzung von analog auf digital den digitalen Werten nur die Hälfte des zur Verfügung stehenden Pegelraums, der durch zwei Eingänge ja zwei mal full range ist, gegönnt. Damit sind Werte oberhalb der Grenze "weggelaufen". Nach Korrektur der PWM-Werte sah das schon besser aus.

Allerdings funktionierte die Mittenstellung (Nullpunkt) nicht zufriedenstellend. Die Messung ergab, dass die dem PWM-Ausgang folgende Integration asymmetrisch war. Offenbar ist die Ausgangsstufe des open micro keine Gegentaktstufe. Ohne Last ist das Signal beim PWM bei 50% exakt ein Rechtecksignal mit 1:1 Tastverhältnis. Mit Integrator (Kondensator + Vorwiderstand 470 Ohm) brach die Spannung jedoch zusammen. Die Anzeige wanderte damit gegen Minus. Ich habe das nun mit einer externen Gegentaktstufe gelöst. Hier wird in beiden Zweigen mit gleichen Kollektorwiderständen gleicher Lade- bzw. Entladestrom realisiert. Die Niederohmigkeit der Endstufe und die mittelohmige Signalauskopplung machen jetzt ein gute Figur. Die Anzeige steht nun auf Mitte, wenn Symmetrie herrscht.
Bleibt nun nur noch Praxistauglichkeitstest. ;-)

 Antwort schreiben

Bisherige Antworten: