Nimm Assembler, dann musst du kein C lernen
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
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
Nimm Assembler, dann musst du kein C lernen
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
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).
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
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.... Ein ... Roboterbastler (C-Programmierer) ... würde in Bascom nie funktionieren ... "Echtzeitanforderungen" ...
Ciao sagt der JoeamBerg
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
Schaut ruhig mal auf meiner Homepage vorbei :
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
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 . . .Zitat von Kampi
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.
Ciao sagt der JoeamBerg
Schaut ruhig mal auf meiner Homepage vorbei :
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
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
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
Lesezeichen