Ich habe mir für meinen DF4 Heli den PWM-->PPM Konverter (unten) nachgebaut (Attiny13) Damit kann ich an dem Alten Empfänger mit Konverter. Brushless regler inkl.BL_Motoren anschließen. Funktioniert Top! Aber ich habe einen zu starken Motor. Der Heli fliegt mit 25% Gasanschlag. Wie kann ich das in der Originalen Soft (6ms) so ändern das er nur die hälfte annimmt Compiler usw habe ich.Ich habe auch schon was selbergeschrieben aber nur in C. Von ASM habe ich keinen blassen schimmer. Kann ich den Wert den der Attiny von Eingang (ist doch ein ADC)kriegt, nicht einfach durch 2 teilen lassen?(PWM ist von 0-5V) Dann würde er doch die Leistung runterregeln!?? Und ich hätte einen fliegenden Heli bei Halbgas. Oder ist die Summe die der ADC mißt 255?Dann würde auch ein immer -100 auch gehen. In C kriegt er ja bei einer rev5V doch 1024 als wert. Aber das ist in Assembler wohl anders. Komplette Dateien. http://home.versanet.de/~b-konze/koax_he..._bl-koax_01.zip
In der Source ist IMHO kein ADC verhanden, sondern zwei eingehende PWM Signale und zwei ausgehende PPM Signale. Fernsteuersignale sind für mich unbekanntes Gebiet. Hast du schon versucht mit dem dem Autor zu reden, ob der die gewünschte Anpassung macht bzw. ob es vom Programmprinzip her überhaupt machbar ist?
Stefan B. schrieb: > Hast du schon versucht mit dem dem Autor zu reden Ne noch nicht. Da ich dachte des es einfach nur ein wert wie bei der ADC messung sei! Den Code verstehe ich daher ja auch nicht. ;(
Hallo, soweit ich das sehe wird die Dauer des PWM-Signals mit einer Zählschleife eingelesen.
1 | count_on: clr temp1 ; PWM 1 |
2 | sbis PINB, PWM_IN1 |
3 | ldi temp1, 0 |
4 | sbic PINB, PWM_IN1 |
5 | ldi temp1, 1 |
6 | add on1cnt_l, temp1 |
7 | adc on1cnt_h, temp2 |
und das 16 mal (zur Filterung) am Ende der Messung wird der Zählwert deshalb wieder durch 16 geteilt
1 | lsr on1cnt_h |
2 | ror on1cnt_l |
3 | lsr on1cnt_h |
4 | ror on1cnt_l |
5 | lsr on1cnt_h |
6 | ror on1cnt_l |
7 | lsr on1cnt_h |
8 | ror on1cnt_l |
du könntest probehalber einfach noch eine weitere Division durch 2 ergänzen,
1 | lsr on1cnt_h |
2 | ror on1cnt_l |
und somit den Messwert der PWM halbieren. Natürlich auch für die 2. PWM on2cnt_l/on2cnt_h Sascha
Du meinst das ich es so aussehen lassen soll? lsr on1cnt_h ror on1cnt_l lsr on1cnt_h ror on1cnt_l lsr on1cnt_h ror on1cnt_l lsr on1cnt_h ror on1cnt_l lsr on1cnt_h ror on1cnt_l So Langsam kapier ich was der Code macht. Natürlich nur wenn es für PMW1 ist.
Jepp!! auf jedenall geht das softwaremäßig Nun habe ich ein wenig zu wenigleistung. Er fliegt/schwebt gut aber beim abfangen ein wenig zu wenig. Das Heck arbeitet so wie es endlich soll.Da ich im guten Teillast liege. Kann einer den Code ein bischen erklären. Damit ich anhaltpunkte habe wohin ich googeln kann. Ich will ihn ja auch verstehen. Mit der änderung wurde probiert den eingang zu halbieren. Geht aber wir kommt das ansprechen ein wenig grob vor. Kann man den Ausgangswert nicht auch Teilen? Mal sehen was besser ist. Wie würde ein drittel oder vierteln aussehen?
kabu schrieb: > Mit der änderung wurde probiert den eingang zu halbieren. > Geht aber wir kommt das ansprechen ein wenig grob vor. das kommt daher, das mit der Halbierung natürlich auch die Auflösung halbiert wird > Kann man den Ausgangswert nicht auch Teilen? sicher, aber wie sieht das PPM-Signal aus - da bin ich gerade überfragt > Mal sehen was besser ist. > Wie würde ein drittel oder vierteln aussehen? das nützt doch nichts, denn dann wird die Ausgangsleistung und auch die Auflösung noch viel kleiner. Alternativ bleibt noch eine Subtraktion, damit verschiebst du den Regelbereich nur, aber die Auflösung bleibt erhalten. Allerdings wird der untere Bereich abgeschnitten.
1 | .... |
2 | lsr on1cnt_h |
3 | ror on1cnt_l |
4 | |
5 | mov temp1, on1cnt_l |
6 | ;;neuer Code |
7 | subi temp1,xxx ;Festwert subtrahieren |
8 | brcc cnv_on1sub ;wenn negativ |
9 | clr temp1 ;dann =NULL |
10 | cnv_on1sub: |
11 | ;;[END] neuer Code |
12 | subi temp1, -10 |
13 | mov ppm1, temp1 |
14 | .... |
für xxx mal einen entsprechenden Wert testen (0..255) Es reicht dann natürlich den Kanal für den Hauptrotor so anzupassen. Sascha
Das im unterren Berreich was abgeschnitten wird macht nix. Ich habe jetzt mal einiges kompiliert und Das beste mit subi temp1,1 ;Festwert subtrahieren gekriegt. Das ist noch ein wenig zu wenig leistung Kann der Wert der Teilung Kommas beinhalten? Ich habe nochmal versucht mit der cnv_PWM2PPM: ldi temp1, low (-150*16) ldi temp2, high (-150*16) und die 16 variiren lassen von 9-16 Mit 9 Würde ich sagen die hälfte an Leistung. 11 noch ein wenig schlapp.. und mit 13 genau richtig. So würde ich es lassen außer das sich on2cnt_l Nun auch ändert. Das ist aber noch nicht so schlimm da Der Heckmotor noch ein Bürsten Motor ist und und vom Empfänger den Strom kriegt.
kabu schrieb: > Ich habe nochmal versucht mit der > > cnv_PWM2PPM: ldi temp1, low (-150*16) > ldi temp2, high (-150*16) > > und die 16 variiren lassen von > 9-16 > Mit 9 Würde ich sagen die hälfte an Leistung. > 11 noch ein wenig schlapp.. > und mit 13 genau richtig. > So würde ich es lassen außer das sich > on2cnt_l > Nun auch ändert. du könnetest die beiden PWM's auch getrennt zählen siehe Anhang ... Sascha
Ich habe das mal so kompiliert. Geht natürlich ;) Den anderen Port konnte ich nicht Testen.Aber ich vertrau dir mal. Das wird bestimmt mit 100% leistung Laufen. Aber so geht das richtig gut freu!!!! Gelernt habe ich auch was. Das ich besser bei meinen Linux skripte bleibe ;) Assembler ist echt ne eigende Welt. Cool wie du dir das so aus den Ärmel schütteln kannst Respekt!!! Habe vielen dank das ich das so vorgekaut gekriegt habe.
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.