Hallo, Ich bin gerade dabei eine Drehzahlregelung für einen DC Getriebemotor zu enwickeln. Die Drehzahlregelung soll über den Laststrom vom DC Motor laufen. Als Motortreiber werde ich einen L298N Treiber verwenden. Ich habe im Datenblatt gelesen, dass man hier direkt über einen Widerstand auf Masse den Laststrom vom Motor messen kann. Ich möchte nun diesen Strom(Spannung) mit einem Atmega32 über einen ADC Channel messen und dann dementsprechend das PWM Signal für den L298N nachregeln. Nun zu meinem eigentlichen Problem: Ich dachte mir, ich löse immer einen Interrupt aus wenn die ADC Conversion von diesem ADC Channel fertig ist und lese dann den Wert vom Kanal ein. Da sich der Laststrom ständig ändern wird und ich ein möglichst gutes Ergebnis vom Regler erzielen möchte, denke ich das der Weg über den Interrupt der bessere ist. (andere Möglichkeit wäre zB immer nach einer bestimmten Zeit den ADC Wert zu lesen) Es ist aber so dass ich später vermutlich für irgendwelche anderen Sensorsignale auch noch ADC Werte einlesen möchte, die aber nicht so hochprior sind wie das Signal des aktuellen Laststromes vom DC Motor. ich bin mir jetzt nicht sicher wie ich das einlesen mehrerer ADC Signal sinnvoll implementieren soll. Der Interrupt wird ja immer ausgeführt wenn eine ADC Conversion fertig ist, egal von welchem Kanal. Ist das richtig oder hab ich hier etwas falsch verstanden? Ich möchte jetzt nur den Kanal der den Laststrom misst Interrupt gesteuert einlesen und zB alle anderen Signale im 5ms Zeitraster einlesen. Im datenblatt habe ich vom "Free running mode" oder "Auto triggered mode" gelesen aber für scheinen diese Ansätze nicht wirklich die richtigen zu sein. Hat hier jemand eine Vorschlag wie ich dieses Problem am sinnvollsten lösen kann oder welchen Ansatz ich verfolgen soll? Kann ich einen Interrupt "ADC Conversion complete" auch nur für einen bestimmten ADC Kanal auslösen lassen? wenn ja wäre mein Problem ja eigentlich gelöst :-) vielen Dank schom im Voraus!
> Kann ich einen Interrupt "ADC Conversion complete" auch nur > für einen bestimmten ADC Kanal auslösen lassen? Nein, kannst du nicht. Macht auch keinen Sinn, weil du ja nur 1 ADC hast. Aber nichts und niemand hindert dich daran, in der ISR die Kanalumschaltung durchzuführen und anstelle des Free Running Modus den ADC in der ISR selbst wieder zu starten. ISR( ADC_COMPLETE ) { ADC Ergebnis holen und abspeichern ADC auf den nächsten Kanal einstellen den ADC loslegen lassen }
Hi, über den Motorstrom die Drehzahl zu regeln geht nur bei absolut konstanter Last. Sollte der Motor belastet werden, geht der Strom hoch und die Drehzahl runter. Bei konstanter Last ist höherer Strom auch höhere Drehzahl. Der Strom ist proportional zum Dehmoment und somit eher geeignet eine Momentenregelung aufzubauen. Die Drehzahl würde ich über Impulse von der Welle abnehmen. Hambone
Hallo, erstmal danke für eure Antworten! @Karl Heinz Buchegger: Ja da hast du allerdings recht :-) da hatte ich wohl einen Denkfehler. Was mir aber noch nicht ganz klar ist, wie ich sinnvoll 2 analog Signale einlesen soll. Also Zb: 2 Signale ADC1 und ADC2 ADC1 soll unbedingt immer dann eingelesen werden wenn sich der Wert ändert -> Interrupt gesteuert bei "ADC Conversion Complete" dh.: Ich muss ja eigentlich ständig den ADC1 als Kanal der gelesen werden soll auswählen. alle 10ms soll ADC2 gelesen werden. Dh Ich konfiguriere mir einen Timer der alle 10ms einen Interrupt auslöst. In dieser Interruptroutine muss ich dann quasi den ADC Channel auf ADC2 ändern und die Conversion neu starten. Dann wird aber wieder der ADC_conversion_complete Interrupt eventuell durch den ADC2 und nicht durch ADC1 ausgelöst. Wäre ja möglich das genau zu dieser Zeit sich der ADC1 ändert. Irgendwie steh ich glaub ich jetzt komplett auf der Leitung!! Mir geht gerade nicht ein wie ich das am schönsten und sinnvollsten lösen soll. @ Thomas Hauffe: Ich möchte die Drehzahl von einem kleinen RC Fahrzeug regeln. Konstante Lasten sind somit eher schwierig möglich da es ja sein kann, dass einmal bergauf einmal bergab mit unterschiedliche Steigungen gefahren werden soll. Da es sich als eher schwierig herausgestellt hat, einen Sensor an der Chassis anzubringen um die Drehzahl zu messen, dachte ich mir, ich versuche mal den Ansatz mit der Stromregelung. Habe allerdings nicht daran gedacht dass es nur sinnvoll funktioniert, bei konstantem Laststrom. Ich komme scheinbar nicht drum rum die Drehzahl abzugreifen. Ich finde irgendwie nicht wirklihc eine Möglichkeit einen Drehgeber (zB eine Lochplatte) an einer Welle vom Getriebe oder direkt am Motor anzubringen ohne großen Aufwand und grobe Umbauarbeiten durchzuführen. Hast du vlt noch eine andere Idee um relativ einfach die Drehzahl zu messen? Relativ leicht zugänglich wäre das Hauptzahnrad vom Getriebe. Eventuell das ich hier mit einem Sensor Drehimpulse abfangen kann... Da muss ich mir wohl noch was einfallen lassen. Mir ist wichtig dass die Drehzahlmessung mit einer halbwegs brauchbaren Genauigkeit gemessen wird... Vielen Dank!
Nein. Dann solltest du den ADC1 und den ADC2 abwechselnd lesen. Mir leuchtet dasd Projrkt nicht ein. Einem RC Auto den Strom reglen zu wollen ist eher sinnfrei, denn man gibt per per Steuerknueppel jas eher die PWM fuer den Motor vor, also die Spannung. Und der Fahrer soll regeln.
> Da es sich als eher schwierig herausgestellt hat, einen Sensor > an der Chassis anzubringen um die Drehzahl zu messen Ich kann mir nicht vorstellen, dass es im kompletten Antriebsstrang eines RC-Autos keine Möglichkeit gibt, irgendwo die Drehzahl abzugreifen. Und sei es mit Magneten und Hallsensoren in den Felgen. Oder einer optischen Markierung und einer Reflexlichtschranke auf der Kardanwelle. Oder .....
Wäre es denn möglich am Hauptzahnrad eine Bohrung anzubringen durch die mittels einer Lichtschranke die Drehzahl abgefasst werden kann? Zur Regeleung solltest Du meines erachtens eher auf eine konstante Abtastrate achten anstatt einfach nur "dann wenn der ADC fertig ist" den nächsten Wert zu holen. Abhängig von der Programmlaufzeit holst Du ja dann den Messwert mal nach x und mal nach y millisec, mikrosec, oder was auch immer.
Hallo, erstmal Danke für eure Antworten! Ich verwende die Chassis eines Offroad RC Autos. Soll nur als Basis dienen. In Zukunft soll dieses Fahrzeug autonom fahren bzw über den PC manuell gesteuert werden können. Ich dachte, dass ich die Drehzahlregelung über den Laststrom umsetzen kann, da direkt am Motortreiber L298 der Laststrom abgreifbar ist. Somit hätte ich mir einen zusätzlichen Sensor erspart. Habe aber dabei ein paar wichtige Faktoren vergessen zu bedenken. Ich habe auch nicht gesagt, dass es nicht möglich ist die Drehzahl irgendwo am RC car abzugreifen. Ich habe nur gesagt, dass es nicht so einfach ist, da irgendwo einen Sensor hinzupflanzen. Bei meiner Chassis ist alles ziemlich knapp. Das Fahrzeug soll auch draußen (offroad) fahren können, darum würde ich den Sensor eher nahe am Getriebe oder direkt am DC Motor plazieren, damit ich dann auch die Elektronik und Getriebebox und DC Motor vor Schmutz schützen kann. In der Felge ist nicht viel Platz da die Radhalterung so viel Platz wegnimmt, dass ich einen Magneten nur am äußeren Rand plazieren könnte. Da ist aber dann die Gefahr dass der Magnet durchs Gelände eventuell heruntergerissen wird. Ich werde mir mal Gedanken machen den Sensor am Hauptzahnrad vom Getriebe anzubringen. Vielen Dank für eure Infos und Gedanken!! Bin für jeden weiteren Gedanken oder Kritik sehr dankbar!!
Hallo Juergen Roeck! Vielen dank für deine Antwort! ja der Gedanke ist mir auch schon gekommen. Ein kleines Loch ins Hauptzahnrad zu bohren und dann mit einer IR Diode und Transistor (also ein Lichtschranken, wo Sender und Empfänger getrennte Bauteile sind) die Drehzahl zu messen. Vielleicht gibt es sogar einen Gabellichtschranken der gesamt nicht zu groß ist, wo Sender und Empfänger mindestens 5mm Abstand haben. Muss mal schauen welche Bauelemente es dazu gibt und ob sich das dann platztechnisch auch ausgehen würde. vielen Dank!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.