PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : BDLC-Controller mit Bascom und ATMegaXX



Bastler0815
20.12.2011, 10:24
Hallo Bascom Programierer,

nachdem ich jetzt in Bascom und mit verschiedenen ATMega's diverse Motorsteuerungen mit normalen Bürstengleichstrommotoren aufgebaut habe möchte ich mich jetzt an einen Brushlesscontroller ranwagen. Im WEB findet man diverse Selbstbauprojekte, sollte also machbar sein. Leider habe ich keinen einzigen gefunden, bei dem die Software in BASCOM geschrieben ist. Ist das so? Auch hier im Forum habe ich kein erfolgreiches Projekt gefunden. Hat von Euch schon mal jemand soetwas gemacht? Weis jemand Links zu solchen Projekten in Bascom oder hat jemand ein funktionierenden Bascom Code in den ich michr einlesen kann?
Ein befreundeter Roboterbastler (C-Programmierer) hat mir gesagt soetwas würde in Bascom nie funktionieren weil da "Echtzeitanforderungen" bestehen. Versteh ich nix von! Ist das so? Ist hier die Grenze von Bascom erreicht?

Ich würde mich freuen wenn Ihr in meinen Thread einsteigt. Vielleicht bewahrt mich das davor doch noch C lernen zu müssen (will ich nicht, bisher hat alles mit Bascom geklappt dann wird das doch wohl auch gehen).

Gruß

Andreas

robin
20.12.2011, 11:00
Nimm Assembler, dann musst du kein C lernen :p

Möglich ist es mit Bascon bestimmt auch, aber wie schon gesagt wurde ist die Ansteuerung Zeitkritisch und da wäre Assembler sogar C vorzuziehen

PICture
20.12.2011, 11:08
Hallo!

@ Bastler0815

Ich habe zwar mit BLDC's nur geringe Erfahrung, aber z.B. ein Lüfter sollte mit BASCOM regelbar sein, da die PWM Frequenz, wegen Trägheit des Rotors, sehr niedrig seien darf (z.B. 1 Hz). ;)

oberallgeier
20.12.2011, 12:33
Zeitkritisch? Ich erinnere mich nicht an viel Belege dafür, dass bascom langsamen Maschinencode liefert. Soweit ich weiß, hat willa seinen Tricopter mit Bascom programmiert. Drei BLDC (ich hatte in diesen Thread eigentlich nur in deswegen geguckt, weil ich wissen wollte, was ein BDLC ist) regeln, drei Gyros, und etliches noch dazu . . . wie gesagt, soweit ich weiß in Bascom. Frag Willa einfach.


... Ein ... Roboterbastler (C-Programmierer) ... würde in Bascom nie funktionieren ... "Echtzeitanforderungen" ...Oooch - das ist ein übliches Argument, gerade von C-Anbetern. Hundert Maschinencyklen bei 20 MHz sind gerade erst 5 µs (MIKROsekunden). Und ein BLDC bei 30000 Umdrehungen pro Minute braucht für EINE Umdrehung schon 2 ms (MILLIsekunden). Das sind schon satte zwei (zweieinhalb) Größenordnungen dazwischen.

Kampi
20.12.2011, 12:45
Zeitkritisch? Ich erinnere mich nicht an viel Belege dafür, dass bascom langsamen Maschinencode liefert. Soweit ich weiß, hat willa seinen Tricopter mit Bascom programmiert. Drei BLDC (ich hatte in diesen Thread eigentlich nur in deswegen geguckt, weil ich wissen wollte, was ein BDLC ist) regeln, drei Gyros, und etliches noch dazu . . . wie gesagt, soweit ich weiß in Bascom. Frag Willa einfach.

Oooch - das ist ein übliches Argument, gerade von C-Anbetern. Hundert Maschinencyklen bei 20 MHz sind gerade erst 5 µs (MIKROsekunden). Und ein BLDC bei 30000 Umdrehungen pro Minute braucht für EINE Umdrehung schon 2 ms (MILLIsekunden). Das sind schon satte zwei (zweieinhalb) Größenordnungen dazwischen.

Jap der Quellcode von dem Copter ist in Basic geschrieben (und das Teil fliegt nicht schlecht wie man in dem Video sieht ;) )
Mag sein das Bascom recht "großzügig" mit den Zyklen ist, aber ich denke für das was man mit Basic machen kann recht es locker(!) aus.
Und im zweifelsfall, falls es auf Mikrosekunden ankommt kannst du immernoch mittendrin auf Assembler wechseln.
Wie Oberallgeier schon geschrieben hat. Ein "normaler" Mega32 mit 16MHz braucht 6-7µs für einen Zyklus und das ist im Vergleich zu den Millisekunden / Sekunden in denen sich eine Motorsteuerung bewegt nichts.
Und wie gesagt....du hast immernoch die Möglichkeit mit dem Wechsel zu Assembler :)

oberallgeier
20.12.2011, 14:11
... Ein "normaler" Mega32 mit 16MHz braucht 6-7µs für einen Zyklus ...
...Millisekunden / Sekunden in denen sich eine Motorsteuerung bewegt ...6 - 7µs - das sind rund 143 kHz bis 167 kHz. Richtig ist - bein 16MHz-Controller - egal welcher - dauert ein Zyklus 62,5 ns (NANOsekunden), die meisten Maschinenbefehle dauern einen, etliche zwei Zyklen, nur wenige Befehle haben drei oder vier Zyklen . . .

Ich habe meine Motorregelung mit nem P I D bei normalen, kleinen Gleichstrommotoren auf 100 Hz. Die Motoren drehen selten über 700 Hz - das sind aber immerhin schon über 40000 Upm (vierzig tausend - pro Minute), deren Zeitkonstante ist ca. 8 ms (selbst gemessen). Und wenn ich mich richtig erinnere, dauert mein Regler für ZWEI Motoren weniger als 3 % CPU-Zeit bei nem 20 MHz-Controller. *ggg* nicht in Bascom - aber wie gesagt - die angebliche Trägheit von Bascom ist ne wenig ergiebige Diskussion.

Kampi
20.12.2011, 14:55
6 - 7µs - das sind rund 143 kHz bis 167 kHz. Richtig ist - bein 16MHz-Controller - egal welcher - dauert ein Zyklus 62,5 ns (NANOsekunden), die meisten Maschinenbefehle dauern einen, etliche zwei Zyklen, nur wenige Befehle haben drei oder vier Zyklen . . .



Doof -.- Rechenfehler ^.^

Commander_Alpha
22.12.2011, 17:13
Hallo,

ich bin auch sehr Interessiert daran einen BLDC Controller in Bascom zu Programmieren.
Bin seit einiger Zeit am rumprobieren. Hardware mäßig müsste soweit klar sein. Ist so wie das BL-CTRL von mikrocopter.de, ist warscheinlich dem ein oder anderen bekannt.
Der Code dazu ist in C. und da hab ich nicht so den durchblick. Hab schon mal versucht die Interrupt Routine für Sensorlosen betrieb in Bascom um zu Basteln aber ohne Erfolg. Gehört warscheinlich doch noch mehr dazu.

Den Motor starten und laufen zulassen ist ja kein problem. Abgesehen davon das er am angünstigten Punkt komutiert und somit viel zu viel Strom benötigt. Und das er eben nicht auf Last reagieren kann, weil sich ja dafür das Timing anpassen muss.

Es scheint mir auch so als ob die Software von Mikrocopter.de gar keinen Timer für Komutierung verwendet sondern einfach nur den Interrupt vom Analog Komperator. Jedoch in den AppNotes AVR444 wird der Timer1 und auch schein nur der ADC anstelle des AC.

Vllt findet sich ja gemeinsam ein Lösung.

Mfg

MagicWSmoke
23.12.2011, 11:36
Ein befreundeter Roboterbastler (C-Programmierer) hat mir gesagt soetwas würde in Bascom nie funktionieren weil da "Echtzeitanforderungen" bestehen.
Sieh's als Vorteil, dann hast Du doch gleich jemand, den Du löchern kannst, wenn's um Übersetzungsdetails geht.

Wenn man sich das BL-Ctrl Projekt ansieht, wird man feststellen dass der Hauptteil der Arbeit in der SIGNAL(SIG_COMPARATOR) in BLMC.c erledigt wird und da ist auf den ersten Blick nix drin, was Bascom nicht im brauchbaren Zeitrahmen erledigen könnte.

Es gibt Unterschiede, Bascom nimmt ein Byte, verarbeitet es und speichert es zurück, C hält besonders in Optimierungsstufe -Os die Werte soweit wie möglich im Register. Ein weiterer Punkt ist die umfangreiche (pauschale) Sicherung der Prozessorregister in Bascom.

Den Vorteil, Werte im Register zu halten, kann C in einer ISR nicht recht ausspielen, da eine ISR zu jedem Zeitpunkt den Hauptcode unterbrechen kann und damit in der ISR verwendete Variablen sowieso immer neu geladen werden müssen. Da auch keine umfangreichen Berechnungen mit einer einzigen, sondern Zugriffe auf verschiedene Variablen sowie IO-Register vorkommen, hat hier C keinen rechten Vorteil. Der Punkt der Taktverschwendung per Pauschalsicherung kann durch den Parameter NOSAVE und selektiver Sicherung umgangen werden.

Die Ausführung der kritischen ISR('s) in ASM wäre das Beste, dann weis man auch gleich, welche Regs zu zu sichern sind, bei Bascom-Code muss man das erst durch Analyse des Disassemblats herausfinden.

Würde sagen, das geht in Bascom zu schreiben. Allerdings solltest Du den Umfang der Dateien zu BL-Ctrl beachten, da hast Du sicher etwas Arbeit vor Dir ;-)