Na gut :)
Was genau ist der AC ? Vielleicht kann ich ja helfen ?
Druckbare Version
Na gut :)
Was genau ist der AC ? Vielleicht kann ich ja helfen ?
Der "Analog Comparator".
Ich hab da keine genauen Infos über die Software-Ansteuerung.
Beispiele in BASCOM sind leider ziemlich rar gesät.
Der AC soll permanent messen und den Ausgabewert im "ACO"-Register jederzeit auslesbar sein.
Vielleicht verwende ich auch stattdessen den ACO-Interrupt - je nach dem was sinvoller ist.
Ich hab zwar schon was zusammengestellt, aber so richtig tuts noch nicht.
Darum kann ich mich aber leider erst am Wochenende kümmern.
Meinen Code gibt's dann auch.
Vielleicht habe ich es überlesen, aber welchen Proz nimmst Du eigentlich ?
Einen ATMega8 mit 16 MHz-Quarz.
Hi,
ich hab´s gerade mal im Datenblatt überflogen. Sinnvoller wäre es doch, wenn Du das Bit ACO nicht abfragen musst, sondern einen Interrupt bekommst, wenn Überstrom kommt. Sonst könnte es ja sein, daß Du den Überstrom übersiehst. Um das einzustellen, musst Du doch nur ein paar Register setzen, das mache ich immer direkt, weil in Bascom oft kleine Fehler drin sind. So z.B. das ACME Bit in SFIOR:
Set SFIOR.ACME 'AC Mux enable
ACSR =&B01011110
Und so weiter. Das sollte eigentlich funktionieren. Also das Datenblatt ab Seite 190 genauestens durchlesen und die Register entsprechend setzen. An dieser Stelle einfach mal kein Bascom. Das nimmst Du dann nur für die ISR und zum Interrupt löschen.
Ich habe gerade noch einen Thread unter mikrocontroller.net gefunden. In diesem wird die genaue auslegung des rc-glieds behandelt, voraussetzungen ähnlich wie hier.
http://www.mikrocontroller.net/topic/80643
Nur falls mal jemand über diesen Thread stolpert :)
Also ich hab jetzt mal probiert das mit Skragans Befehlen zu machen, aber es funktioniert genausoweinig wie mit den BASCOM-Befehlen.
Das Problem ist, dass die Aci_Isr ständig gefeuert wird, obwohl ich mit dem Multimeter am Pin AIN0 = 0V und an AIN1 = 500 mV messe.
Referenz ist also im Moment 500 mV.
Solange der Motor abgeschaltet ist, liegt die Spannung an AIN0 also natürlich unter AIN1.
Trotzdem startet die ISR ständig.
Hier mal die relevanten Code-Stücke:
Ich weis nicht ob ich den Bit-Code für das ACSR-Register richtig gesetzt habe.Code:Set SFIOR.ACME 'AC Mux enable
ACSR = &B01011011 'sollte ISR=Ein, Timer1-Verbindung=Aus und Flanke=Rising sein...
On Aci Aci_isr 'Interrupt Vektor
'Start Ac 'Comparator-Überwachung starten
'Enable Aci 'ACI-Interrupt aktivieren
Config Pind.6 = Input 'Analog-Comparator: Motorstrom-Messung (Spannung über Shunt)
Config Pind.7 = Input 'Analog-Comparator: Referenz für Motorstrom (500 mV, was ca. 1,85 A entspricht.
'Für ANTRIEB (Buchse A)
Config Pind.4 = Output 'Antrieb Kanal 1
Config Pind.5 = Output 'Antrieb Kanal 2
Config Pinb.1 = Output 'Antrieb PWM
AntriebPWM Alias Pwm1a 'Antrieb-Einstellung (PWM)
'MOTOR-ÜBERSTROM-SCHUTZ
Aci_isr: 'ISR-Routine für Motor-Überstrom
AntriebPWM = 0
print "MOTOR_OVERLOAD"
waitms 500
Ich möchte den Interrupt für den AC verwenden, bei steigender Flanke auslösen und keine Verbindung mit Timer1 haben.
Den Schaltplan und den kompletten Programm-Code hab ich angehängt.
Moin,
ich hol das einfach noch mal hoch, selbes Problem ;).
Ich Steuere 2 DC Mototen über den L298, als Messwiderstand habe ich wie gewohnt einen 0,47 ohm 5W Widerstand verbaut... Das signal ist aber derbe verrauscht und eine Idee wie man an das geschickt auswertet habe ich auch noch nicht... wie macht das denn der L297 mit der Strombegrenzung?
Bild hier
Gelb ist das PWM vom µC am L298, Blau die Spannung am Messwiderstand... der Motor sollte eigentlich nach Datenblatt intern Entstört sein...
Habe irgend wo was von einem RC Filter gehört mit 0,1uF und 10K Ohm wäre ein fg = 159.15 Hz, da ich ja mit 250Hz PWM den Motor betreibe habe ich ihn mit 4,7K ohm ausgelegt macht ein fg = 338.63Hz... macht aber irgendwie keinen unterschied ob mit oder ohne RC Filter. Wirklich brauchen tu ich das nicht aber wäre fein wenn es Funktionieren würde ;)
lg
Wenn ein DC Motor Entstört ist, heißte dass vor allem das es nicht mehr so viele HF Störungen bei Frequenzn im MHz bereich und darüber gibt. Die Störungen bei niedreigeren Frequenzen hat man weiter, und kann sie auch kaum vermeiden.
Bei der Schaltung mit dem L297 hat man in der Regel Schrittmotoren und daher kaum Störungen. Sonst ggf. auch einen RC Filter.
Der RC Filter soll die Störungen nur vom AD Wandler fernhalten und dem ein schon geglättetes Signal geben. Ein Tiefpass mit run 300 Hz sollte da schon was dran ändern. Das letzte Bischen muß dann der µC durch mitteln erreichen.
mmm ok danke erst mal,
da mein ~330 Hz Filter keine Änderung bringt... mmm ja wie kann man dem breiten Signal noch entgegen wirken? Oder besser warum ist das so breit?
lg