Den alten Code ( ist auch wieder über ein Jahr her) müsste ich, wie gesagt, in der Datensicherung suchen, da ich das Projekt eingestellt habe (weil BLHeli_32)
Um Zeit zu sparen schreibe ich das hier aus der Hüfte, die Sachen sind so nicht getestet, und könnten Fehler enthalten, prinzipiell sollte es aber funktionieren, und wahrscheinlich in der Praxis auch, und ist alles andere als „reif“.
War jetzt wieder ne satte 3/4Stunde, (wozu eigentlich? es interessiert/nutzt am Ende niemanden) das meiste war ja noch in groben Zügen weit hinten tief im Bregen, damals habe ich dafür 3Stunden meines Lebens geopfert, für ne Soft die am Ende nur zweimal geflogen ist, ich hoffe das ist nun open-sourcig genug
Wer Spaß hat da weiterzumachen, hat hier jedenfalls schon mal ein biss Grundlage dafür….
Evtl finden sich ein paar Leute, das man geschlossen (Trollfrei) das mal ausarbeiten kann…
Falls es C sein sollte die Ulrich Rahdig BLDC Soft hatte ich mal soweit umgeschriebem, das sie auf den üblichen Chinareglern rennt (BS-nfet), aber da müsste man noch ein bissl am Anlauf schrauben, und am Timing bei.
Evtl wären die BLHeli_S noch für sowas interessant, der ADC vom SIL MCU ist dem vom Atmega deutlich überlgen, das ASM etwas gewöhnungsbedürftig, aber es geht, kostenlosen Assemblierer gibt es auch.
Man nehme:
Irgendeinen BLHelitauglichen Regler atmega8 basierend (fast jeder funzt dafür)
BLHeli Source Code:
https://github.com/bitdump/BLHeli
BLHeliSuite
http://www.mediafire.com/file/1tn449x6815upat/BLHeliSuite16714901.zip/file
AVR Assembler2 >>>Google
Flashadapter (USBlinker Hott-Jeti USB-Adapter oder Arduino)
Compiliert/Assembliert nach dem editieren wird im einfachsten Fall mit einem Klick der Makefile.bat, danach hat man die Hex-Files für alle möglichen Regler in einem Unterverzeichniss (EEP und HEX zusammenkopieren!)
In der Suite klick auf flash BLHeli, dann kommt ein Bild wo man seinen Regler aussuchen kann, da auf „ignorier List- pick File“ klicken, das eigene File auswählen, und ab dafür.
Nun brauchen wir noch einen Texteditor (ich liebe Geany), und öffnen die BLHeli.asm, und können schon direkt loslegen.
ADC und AC in Kooperation, Grundinfo:
Der Comperator erkennt bei dem Regler die Rotorlage, er wird 6x pro Feldumdrehung ausgelöst. Bei den eh etwas langsam drehenden Solarmotoren ist dazwischen Zeit genug die Solarspannung über den ADC einzulesen.
Zum Glück müssen wir uns bei BLHeli nicht näher damit beschäftigen, die entsprechende Routine dafür ist bereits vorhanden.
Der BLHeli – ADC, erst mal prinzipell.
Zeile 3795
unter ; Check if low voltage limiting is enabled
einfügen:
sts ADCL_SOLAR, Temp1
sts ADCH_SOLAR, Temp2
Zeile 1275
einfügen
ADCL_SOLAR: .BYTE 1
ADCH_SOLAR: .BYTE 1
Nun haben wir die Solarspannung in ADCL_SOLAR ADCH_SOLAR überall jederzeit zu Verfügung, wenn ich mich jetzt nicht irre, wird der bei jeder zweiten Feldumdrehung ausgelesen.
Wenn wir dem ADC noch ein bissl Beine machen wollen, in Zeile 3909 Set_Adc_Ip_Temp ändern in Set_Adc_Ip_Volt, dann sollte er jede Feldumdrehung einmal die Spannung einlesen, dafür ist der Tempsensor dann auser Betrieb (brauchen wir eh nicht).
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Nun einen einfachen MPP, in unfertig:
Die oberen Änderungen wieder raus.
Diesmal in Zeile 3795 (damit speichern wir in SOLAR_INC_DEC als 1-0 ob die Spannung über oder unter unserer MPP-Vorgabe liegt)
lds XH, Pgm_Gov_Setup_Target
cp Temp1, XH
ldi XH, 0x00
cpc Temp2, XH
brcc das_andere_Dings
ldi XH, 1
sts SOLAR_INC_DEC, XH
rjmp check_voltage_good
das_andere_Dings:
ldi XH, 0
sts SOLAR_INC_DEC, XH
rjmp check_voltage_good
Etwa in Zeile 2168 kommentieren wir den org Govornor raus, und ersetzen ihn in ähnlicher Weise durch unseren eignen. Kann sein das ich mal wieder spontan die Drehrichtung verdreht haben, das kann ich nämlich gut
in I_Temp4 liegt unser Empfängersignal, wer es verarbeiten will. Die Routine davor sorgt berreits dafür das bei Knüppel nur unter 20% Gov aktiv ist, darüber springt er in die MPP-Schleife.
t0h_int_rcp_gov_by_tx:
lds I_Temp2, Governor_Req_Pwm
;HL cp I_Temp2, I_Temp4 ; Is governor requested pwm equal to requested pwm? (Requested_Pwm in I_Temp4)
;HL breq t0h_int_rcp_gov_pwm_done ; Yes - branch
;HL brcs t0h_int_rcp_gov_pwm_inc ; No - if lower, then increment
;HL dec I_Temp2 ; No - if higher, then decrement
;HL rjmp t0h_int_rcp_gov_pwm_done
;HL t0h_int_rcp_gov_pwm_inc:
;HL inc I_Temp2 ; Increment
lds XL, SOLAR_INC_DEC
tst XL
breq inc_PWM
rjmp dec_PWM
inc_PWM:
cpi I_Temp2, 0xFF
breq t0h_int_rcp_gov_pwm_done
inc I_Temp2
rjmp t0h_int_rcp_gov_pwm_done
dec_PWM:
cpi I_Temp2, 0x00
breq t0h_int_rcp_gov_pwm_done
dec I_Temp2
rjmp t0h_int_rcp_gov_pwm_done
Nicht vergessen, oben in Zeile 1275:
SOLAR_INC_DEC: .BYTE 1
Das wars schon, es funzt aber noch nicht wirklich gut, da der Gov nur in einem beschränktem Bereich und nur in 8Bit arbeitet. Entweder man erweitert ein Stück weiter unten den Bereich, oder setzt den MPP an eine andere Stelle, wie man mag.
Nun die Suite:
Einstellen wie auf dem Screenshot.
Mit P und i stellen wir die Regelcharakterisik des MPP ein.
Mit Setup-Target unten die MPP-Spannung.
Diese ist nur das LOW-Byte, Grobe Voreinstellung unter
lds XH, Pgm_Gov_Setup_Target
cp Temp1, XH
ldi XH, 0x00 <<<< hier das H-Byte
Wir können auch das H-Byte einfach auf einen anderen unbenutzten Schieber der Soft legen, oder rechnen den von Setup etwas um das es passt.
Bei den Einstellungen ansonsten umsichtig sein,
EMK-Bremse kann natürlich (de)aktiviert werden, Timing u.s.w. auch.
edit, einige ATmega8 Regler haben keinen Cap am Aref, das kann man in den inc Files sehen, fehlt unten das im Gerätefile im ADC Makro das:
ori @0, (1<<REFS1)+(1<<REFS0)
Dann hat er keinen, und die Messungen werden ungenau. Abhilfe, einen anderen Regler, oder einen 100n an Aref und irgendwo an Minus löten, und das ADC Makro aus einem anderem Regler mit Cap (z.B: Arfo regler) in das betreffende kopieren
Da BLHeli = Simonk (V2) ist, ist die Vorgehensweise dieselbe, adc_read ist in Simonk schon als Schleife vorhanden, in run6_irgendwas vorm wait auf comXcom )oder so ähnlich, (müsst ich jetzt erst runterladen und guggen) mit reinhaun, die schleife kurz halten, dann passts auch so mit 10Bit ADC bei den langsameren Solarmotoren.
.
.
.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Jaaaa, jetzt kommt wieder die riesen Troll-Welle, was da nun alles anstössig, blöd und nicht Wiki-Komform ist