5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)

标题: BLHeli开源帖子讨论 [打印本页]

作者: i150625    时间: 2016-4-19 15:46
标题: BLHeli开源帖子讨论
欢迎大家一起加入进来讨论有关BLHeli开源代码使用过程遇到的问题,一起讨论和解决
首先需要知道的是:BLHELI不是用KEIL编译的,而是另外一种编译器Raisonance,但是Raisonance这个编译器使用8k以上的程序需要收费(虽然blheli开源程序在8K以下),而且我们使用起来也不方便,一般我们喜欢用keil来修改BLHELI开源的程序使程序和自己设计的硬件对应,因为编译器的不同导致汇编的伪指令不同,汇编指令相同,在网上参考了http://bbs.5imx.com/forum.php?mod=viewthread&tid=786831这篇帖子中所讲的Raisonance和keil编译器伪指令不同的如下:
宏定义   Raisonance:MACRO [ 宏指令名 ]  [形式参数,.........]
            keil: [ 宏指令名 ] MACRO [形式参数,.........]
将使用到的头文件中的(下面的只是其中一个哦,所有的宏定义都要改哦!)
MACRO Rcp_Int_Enable
        orl        PCA0CPM0, #01h                                ; Interrupt enabled
ENDM
改成
[size=13.9130439758301px]Rcp_Int_Enable MACRO
[size=13.9130439758301px]        orl        PCA0CPM0, #01h                                ; Interrupt enabled
[size=13.9130439758301px]ENDM

[size=13.9130439758301px]如有不对请批评哦,欢迎大家将自己的见解和问题发上来共同讨论,学习


作者: i150625    时间: 2016-4-19 15:48
上面不知道为什么乱码了是这样的哦
Rcp_Int_Enable MACRO
        orl        PCA0CPM0, #01h                                ; Interrupt enabled
ENDM[/code]


作者: i150625    时间: 2016-4-20 09:54
我发现用keil编译blheli10.1版本可以,而编译blheli12.1和14.1版本就一直通不过提示错误如下:
Build target 'Target 1'
assembling BLHeli.asm...
A51 MACRO ASSEMBLER V8.02 - SN: A1CMC-P6XRBC
COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2008
"D:\Keil\C51\BIN\A51.EXE" "BLHeli.asm" NOMOD51 SET (SMALL) EP
A51 FATAL ERROR -
  ERROR:      LIMIT EXCEEDED: BALANCED TEXT LENGTH
A51 TERMINATED.
Target not created
有人有好的建议吗?

作者: giantwjt    时间: 2016-4-20 18:01
貌似代码太长,编译不了。这里懂软件的少点,又是编译器又是汇编什么的

作者: i150625    时间: 2016-4-20 19:27
恩恩,从keil帮助里的解释:
The macro preprocessor's internal limit for balanced text length is violated. Expansions and intermediate expansions cannot produce strings longer than 2045 characters.
好像是定义的常量长度超出编译器限定的,算了我还是用BLHeli10.1版本研究吧,打算研究汇编了哦,问一下blheli修改参数是通过接受PPM信号接口吗?电脑用usb转串口连接吗?我看了一下他PPM是接RX,TX,像是通过串口修改参数的,没有刷过blheli固件,有刷过的说一下谢谢!

作者: skypup    时间: 2016-4-20 21:28
关注。

楼主是指的 C8051 的代码吧,那个单片机我试过直接用烧录程序的接口,在上位机里面改参数。
另一种 Bootloader 的方法,没有试过,不知道该如何接线。

学汇编有啥快捷一些的方法么?
我改 BlHeli 的程序,都是先想一想用C该如何写,然后再人肉把C翻译成汇编,效率应当是非常低的。


作者: giantwjt    时间: 2016-4-21 08:36
ppm就是接收机的信号,并非串口
blheli可以通过ppm和编程口修改设置

作者: i150625    时间: 2016-4-21 15:49
giantwjt 发表于 2016-4-21 08:36
ppm就是接收机的信号,并非串口
blheli可以通过ppm和编程口修改设置

“blheli可以通过ppm和编程口修改设置”这句话说的不是太懂,通过编程口修改设置是指:修改blheli程序中的参数再烧写程序吗?我其实是想问用blheli修改参数的上位机如何与刷了固件的电调通讯并修改参数,用什么工具,


作者: i150625    时间: 2016-4-21 15:51
skypup 发表于 2016-4-20 21:28
关注。

楼主是指的 C8051 的代码吧,那个单片机我试过直接用烧录程序的接口,在上位机里面改参数。

买本《单片机原理与接口技术》的书看就好了,语句比较简单,就是汇编程序的设计逻辑比较复杂。


作者: giantwjt    时间: 2016-4-22 00:52
blheli就是这么牛,上位机软件可通过编程口烧录程序以外,还可以设置参数,当然是烧完程序后再设置,而且上位机把hex内嵌了。观众朋友用起来非常方便
ppm设置就是常规的用遥控器设置,听声音那种方式

作者: i150625    时间: 2016-4-24 12:18
giantwjt 发表于 2016-4-22 00:52
blheli就是这么牛,上位机软件可通过编程口烧录程序以外,还可以设置参数,当然是烧完程序后再设置,而且上 ...

blheli支持有感无刷直流电机吗?我看blheli程序中有decode_parameters这个函数,像是编码器的意思


作者: skypup    时间: 2016-4-24 18:52
本帖最后由 skypup 于 2016-4-24 18:53 编辑
i150625 发表于 2016-4-24 12:18
blheli支持有感无刷直流电机吗?我看blheli程序中有decode_parameters这个函数,像是编码器的意思
;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Decode parameters
;
; No assumptions
;
; Decodes programming parameters
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
decode_parameters:
        ; Load programmed pwm frequency
        mov        Temp1, #Pgm_Pwm_Freq        ; Load pwm freq
        mov        A, @Temp1                                
        mov        Temp8, A                                ; Store in Temp8
        clr        Flags2.PGM_PWMOFF_DAMPED
IF DAMPED_MODE_ENABLE == 1
        cjne        Temp8, #3, ($+5)
        setb        Flags2.PGM_PWMOFF_DAMPED
ENDIF
        ; Load programmed direction
        mov        Temp1, #Pgm_Direction        
IF MODE >= 1        ; Tail or multi
        mov        A, @Temp1                                
        clr        C
        subb        A, #3
        jz        decode_params_dir_set
ENDIF

        clr        Flags3.PGM_DIR_REV
        mov        A, @Temp1                                
        jnb        ACC.1, ($+5)
        setb        Flags3.PGM_DIR_REV
decode_params_dir_set:
        clr        Flags3.PGM_RCP_PWM_POL
        mov        Temp1, #Pgm_Input_Pol        
        mov        A, @Temp1                                
        jnb        ACC.1, ($+5)
        setb        Flags3.PGM_RCP_PWM_POL
        clr        C
        mov        A, Temp8                        
        subb        A, #2
        jz        decode_pwm_freq_low

        mov        CKCON, #01h                ; Timer0 set for clk/4 (22kHz pwm)
        setb        Flags2.PGM_PWM_HIGH_FREQ
        jmp        decode_pwm_freq_end

decode_pwm_freq_low:
        mov        CKCON, #00h                ; Timer0 set for clk/12 (8kHz pwm)
        clr        Flags2.PGM_PWM_HIGH_FREQ

decode_pwm_freq_end:
        ret

可能是另一个作用。
从 #Pgm_Pwm_Freq 这些地址读出配置参数(parameters),并解析(decode)。


; Indirect addressing data segment. The variables below must be in this sequence
ISEG AT 080h                                       
Pgm_Gov_P_Gain:                        DS        1                ; Programmed governor P gain
Pgm_Gov_I_Gain:                        DS        1                ; Programmed governor I gain
Pgm_Gov_Mode:                                DS        1                ; Programmed governor mode
Pgm_Low_Voltage_Lim:                DS        1                ; Programmed low voltage limit
Pgm_Motor_Gain:                        DS        1                ; Programmed motor gain
Pgm_Motor_Idle:                        DS        1                ; Programmed motor idle speed
Pgm_Startup_Pwr:                        DS        1                ; Programmed startup power
Pgm_Pwm_Freq:                                DS        1                ; Programmed pwm frequency

这些数据在放在指定的地址的:ISEG AT 080h.
有点儿像其它单片机的片内 EEPROM 的感觉。








作者: i150625    时间: 2016-4-25 10:11
skypup 发表于 2016-4-24 18:52
可能是另一个作用。
从 #Pgm_Pwm_Freq 这些地址读出配置参数(parameters),并解析(decode)。

这些数据是变量存储在RAM中,他上电是根据flash校验码是否正确,来读取flash中的储存的参数,相当于把flash当eeprom使用的,这个函数[size=13.9130439758301px]decode_damping_done中根据设置的值判断是否使能比较器,有感的不使用比较器使用端口检测就好了,无感的才要用到比较器,由此我才想到编码是位置传感器的意思,不过你说的也对,我在看看程序吧,
  1. CSEG AT 1A00h            ; "Eeprom" segment        从地址为1A00h的flash存储下面的常量
  2. EEPROM_FW_MAIN_REVISION                EQU        10                ; Main revision of the firmware
  3. EEPROM_FW_SUB_REVISION                EQU        1                ; Sub revision of the firmware
  4. EEPROM_LAYOUT_REVISION                EQU        16                ; Revision of the EEPROM layout

  5. Eep_FW_Main_Revision:                DB        EEPROM_FW_MAIN_REVISION                        ; EEPROM firmware main revision number
  6. Eep_FW_Sub_Revision:                DB        EEPROM_FW_SUB_REVISION                        ; EEPROM firmware sub revision number
  7. Eep_Layout_Revision:                DB        EEPROM_LAYOUT_REVISION                        ; EEPROM layout revision number

  8. IF MODE == 2
  9. Eep_Pgm_Gov_P_Gain:                        DB        DEFAULT_PGM_MULTI_P_GAIN                        ; EEPROM copy of programmed closed loop P gain
  10. Eep_Pgm_Gov_I_Gain:                        DB        DEFAULT_PGM_MULTI_I_GAIN                        ; EEPROM copy of programmed closed loop I gain
  11. Eep_Pgm_Gov_Mode:                        DB        DEFAULT_PGM_MULTI_GOVERNOR_MODE        ; EEPROM copy of programmed closed loop mode

  12. Eep_Pgm_Low_Voltage_Lim:                DB        DEFAULT_PGM_MULTI_LOW_VOLTAGE_LIM        ; EEPROM copy of programmed low voltage limit
  13. Eep_Pgm_Motor_Gain:                        DB        DEFAULT_PGM_MULTI_GAIN                        ; EEPROM copy of programmed tail gain
  14. _Eep_Pgm_Motor_Idle:                DB        0FFh                                                        ; EEPROM copy of programmed tail idle speed
  15. Eep_Pgm_Startup_Pwr:                DB        DEFAULT_PGM_MULTI_STARTUP_PWR                ; EEPROM copy of programmed startup power
  16. Eep_Pgm_Pwm_Freq:                        DB        DEFAULT_PGM_MULTI_PWM_FREQ                ; EEPROM copy of programmed pwm frequency
  17. Eep_Pgm_Direction_Rev:                DB        DEFAULT_PGM_MULTI_DIRECTION_REV        ; EEPROM copy of programmed rotation direction
  18. Eep_Pgm_Input_Pol:                        DB        DEFAULT_PGM_MULTI_RCP_PWM_POL                ; EEPROM copy of programmed input polarity
  19. ; 下面的两个地址中存储的是一个十六位的校验码 用于
  20. Eep_Initialized_L:                        DB        055h                                                        ; EEPROM initialized signature low byte
  21. Eep_Initialized_H:                        DB        0AAh                                                        ; EEPROM initialized signature high byte

  22. Eep_Enable_TX_Program:                DB        DEFAULT_PGM_ENABLE_TX_PROGRAM                ; EEPROM TX programming enable
  23. _Eep_Main_Rearm_Start:                DB        0FFh                                                       
  24. _Eep_Pgm_Gov_Setup_Target:        DB        0FFh                                                       
  25. Eep_Pgm_Startup_Rpm:                DB        DEFAULT_PGM_MULTI_STARTUP_RPM                ; EEPROM copy of programmed startup rpm
  26. Eep_Pgm_Startup_Accel:                DB        DEFAULT_PGM_MULTI_STARTUP_ACCEL        ; EEPROM copy of programmed startup acceleration
  27. _Eep_Pgm_Volt_Comp:                        DB        0FFh       
  28. Eep_Pgm_Comm_Timing:                DB        DEFAULT_PGM_MULTI_COMM_TIMING                ; EEPROM copy of programmed commutation timing
  29. Eep_Pgm_Damping_Force:                DB        DEFAULT_PGM_MULTI_DAMPING_FORCE        ; EEPROM copy of programmed damping force
  30. _Eep_Pgm_Gov_Range:                        DB        0FFh       
  31. Eep_Pgm_Startup_Method:                DB        DEFAULT_PGM_MULTI_STARTUP_METHOD        ; EEPROM copy of programmed startup method
  32. Eep_Pgm_Ppm_Min_Throttle:        DB        DEFAULT_PGM_PPM_MIN_THROTTLE                ; EEPROM copy of programmed minimum throttle (final value is 4x+1000=1148)
  33. Eep_Pgm_Ppm_Max_Throttle:        DB        DEFAULT_PGM_PPM_MAX_THROTTLE                ; EEPROM copy of programmed minimum throttle (final value is 4x+1000=1832)
  34. Eep_Pgm_Beep_Strength:                DB        DEFAULT_PGM_MULTI_BEEP_STRENGTH        ; EEPROM copy of programmed beep strength
  35. Eep_Pgm_Beacon_Strength:                DB        DEFAULT_PGM_MULTI_BEACON_STRENGTH        ; EEPROM copy of programmed beacon strength
  36. Eep_Pgm_Beacon_Delay:                DB        DEFAULT_PGM_MULTI_BEACON_DELAY        ; EEPROM copy of programmed beacon delay
  37. Eep_Pgm_Throttle_Rate:                DB        DEFAULT_PGM_MULTI_THROTTLE_RATE        ; EEPROM copy of programmed throttle rate
  38. Eep_Pgm_Demag_Comp:                        DB        DEFAULT_PGM_MULTI_DEMAG_COMP                ; EEPROM copy of programmed demag compensation
  39. Eep_Pgm_BEC_Voltage_High:        DB        DEFAULT_PGM_BEC_VOLTAGE_HIGH                ; EEPROM copy of programmed BEC voltage
  40. ENDIF
复制代码



作者: i150625    时间: 2016-4-25 10:19
这个是解码函数
;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Decode parameters
; 根据一些参数设置电机运行时参数
; No assumptions
;
; Decodes programming parameters
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
decode_parameters:
        ; Load programmed damping force
        mov        Temp1, #Pgm_Damping_Force; Load damping force
        mov        A, @Temp1                               
        mov        Temp8, A                                ; Store in Temp8
        ; Decode damping  下面是根据Pgm_Damping_Force中值跳转相当于swith ,给其中的两个变量赋值
        mov        Damping_Period, #9                ; Set default
        mov        Damping_On, #1
        clr        C
        cjne        Temp8, #2, decode_damping_3        ; Look for 2

        mov        Damping_Period, #5
        mov        Damping_On, #1
        jmp        decode_damping_done

decode_damping_3:
        clr        C
        cjne        Temp8, #3, decode_damping_4        ; Look for 3

        mov        Damping_Period, #5
        mov        Damping_On, #2
        jmp        decode_damping_done

decode_damping_4:
        clr        C
        cjne        Temp8, #4, decode_damping_5        ; Look for 4

        mov        Damping_Period, #5
        mov        Damping_On, #3
        jmp        decode_damping_done

decode_damping_5:
        clr        C
        cjne        Temp8, #5, decode_damping_6        ; Look for 5

        mov        Damping_Period, #9
        mov        Damping_On, #7

decode_damping_6:
        clr        C
        cjne        Temp8, #6, decode_damping_done; Look for 6

        mov        Damping_Period, #0
        mov        Damping_On, #0

decode_damping_done:
        ; Load programmed pwm frequency
        mov        Temp1, #Pgm_Pwm_Freq        ; Load pwm freq
        mov        A, @Temp1                               
        mov        Temp8, A                                ; Store in Temp8 Pgm_Pwm_Freq中的值送给Temp8
//IF MODE == 0        ; Main
//        clr        Flags2.PGM_PWMOFF_DAMPED_LIGHT
//        clr        C
//        cjne        Temp8, #3, ($+5)
//        setb        Flags2.PGM_PWMOFF_DAMPED_LIGHT
//        clr        Flags2.PGM_PWMOFF_DAMPED_FULL
//ENDIF
; 下面是根据Pgm_Pwm_Freq中的值
IF MODE >= 1        ; Tail or multi
        clr        Flags2.PGM_PWMOFF_DAMPED_LIGHT
        clr        C
        cjne        Temp8, #3, ($+5)
        setb        Flags2.PGM_PWMOFF_DAMPED_LIGHT
        clr        Flags2.PGM_PWMOFF_DAMPED_FULL
        clr        C
        cjne        Temp8, #4, ($+5)
        setb        Flags2.PGM_PWMOFF_DAMPED_FULL
ENDIF
        clr        Flags2.PGM_PWMOFF_DAMPED                ; Set damped flag if fully damped or damped light is set
        mov        A, #((1 SHL PGM_PWMOFF_DAMPED_FULL)+(1 SHL PGM_PWMOFF_DAMPED_LIGHT))
        anl        A, Flags2                                        ; Check if any damped mode is set
;根据PGM_PWMOFF_DAMPED_FULL和PGM_PWMOFF_DAMPED_LIGHT位是否为一选择跳转
        jz        ($+4)  ; 若A=0则跳转
        setb        Flags2.PGM_PWMOFF_DAMPED
        clr        Flags2.CURR_PWMOFF_DAMPED        ; Set non damped status as start
// 下面就是比较器使能选择变量
        jz        ($+4)
        setb        Flags2.CURR_PWMOFF_DAMPED        ; Set non damped status as start if damped
        setb        Flags2.CURR_PWMOFF_COMP_ABLE        ; Set comparator usable status
        jz        ($+4)
        clr        Flags2.CURR_PWMOFF_COMP_ABLE        ; Set comparator not usable status if damped
        ;判断Pgm_Direction_Rev.1是否为1来设置Flags3.PGM_DIR_REV的值
        clr        Flags3.PGM_DIR_REV
        mov        Temp1, #Pgm_Direction_Rev       
        mov        A, @Temp1                               
        jnb        ACC.1, ($+5)
        setb        Flags3.PGM_DIR_REV
        ;判断Pgm_Input_Pol.1是否为1来设置Flags3.PGM_RCP_PWM_POL的值
        clr        Flags3.PGM_RCP_PWM_POL
        mov        Temp1, #Pgm_Input_Pol       
        mov        A, @Temp1                               
        jnb        ACC.1, ($+5)
        setb        Flags3.PGM_RCP_PWM_POL
        ; 根据Temp8的值是否为2来选择跳转 等于decode_pwm_freq_low
        clr        C
        mov        A, Temp8                       
        subb        A, #2
        jz        decode_pwm_freq_low

        mov        CKCON, #01h                ; Timer0 set for clk/4 (22kHz pwm)
        setb        Flags2.PGM_PWM_HIGH_FREQ
        jmp        decode_pwm_freq_end

decode_pwm_freq_low:
        mov        CKCON, #00h                ; Timer0 set for clk/12 (8kHz pwm)
        clr        Flags2.PGM_PWM_HIGH_FREQ

decode_pwm_freq_end:
        ret

作者: i150625    时间: 2016-4-29 21:08
看程序时这两个变量不知道是什么意思?这两个变量在pwm产生定时器中断中使用,Damping的翻译为阻尼??好像是消磁或则是抑制??还有这个单词damped,都不是太懂,有人能指点一下吗?
Damping_Period:                        DS        1                ; Damping on/off period
Damping_On:                                DS        1                ; Damping on part of damping period

作者: i150625    时间: 2016-5-2 16:38
i150625 发表于 2016-4-29 21:08
看程序时这两个变量不知道是什么意思?这两个变量在pwm产生定时器中断中使用,Damping的翻译为阻尼??好像 ...

刷了固件就是这种效果,感觉一直再重新启动


作者: i150625    时间: 2016-5-2 16:39
   
这是视频

作者: sunicecream    时间: 2016-5-3 10:26
C8051F的单片机没有EEPROM,所以把一部分FLASH开辟出来当成EEPROM用而已

作者: menglongfc    时间: 2016-7-12 15:28
楼主好棒,blheli是可以刷正反转的吧

作者: i150625    时间: 2016-7-17 08:58
menglongfc 发表于 2016-7-12 15:28
楼主好棒,blheli是可以刷正反转的吧

可以,你刷固定翼尾桨的电调就好了


作者: menglongfc    时间: 2016-7-26 13:51
i150625 发表于 2016-7-17 08:58
可以,你刷固定翼尾桨的电调就好了

恩恩,谢谢楼主


作者: 逗倪豌儿    时间: 2016-10-29 11:32
i150625 发表于 2016-5-2 16:39
这是视频

你好 ,你的这个问题找到了吗 ,我好像也是这样,刷过之后就像视频里那样,启动不起来,看源码也没看出个所以然来,求帮助!


作者: 18513030413    时间: 2016-11-9 14:04
楼主编译解决了吗?汇编代码容易看吗?

作者: i150625    时间: 2016-11-25 17:43
逗倪豌儿 发表于 2016-10-29 11:32
你好 ,你的这个问题找到了吗 ,我好像也是这样,刷过之后就像视频里那样,启动不起来,看源码也没看出个 ...

遗憾的是没有找到,我看了程序也不知道原因在哪里,后来没有看了

作者: i150625    时间: 2016-11-25 17:45
18513030413 发表于 2016-11-9 14:04
楼主编译解决了吗?汇编代码容易看吗?

好像是因为宏定义过长导致的,换了个低版本的代码看就可以编译了,他的汇编不太好看,注释太少,花时间的话,还是没有问题


作者: sjh2100    时间: 2017-1-13 11:16
本帖最后由 sjh2100 于 2017-1-23 00:23 编辑


;Set BEC voltage,
set_bec_voltage:
; Set bec voltage
;
IF HIGH_BEC_VOLTAGE == 1
Set_BEC_Lo   ; Set default to low
mov Temp1, #Pgm_BEC_Voltage_High  
mov A, @Temp1   
jz set_bec_voltage_exit
Set_BEC_Hi   ; Set to high
****************************
program_by_tx_entry_wait_pwm:
  clr     EA                                          ; Disable all interrupts
         call beep_f1
         call wait10ms
         call beep_f1
         setb EA                                          ; Enable all interrupts
         call wait100ms
         clr     C
         mov A, New_Rcp                        ; Load new RC pulse value
         subb          A, #RCP_MAX                    ; At or above max?
         jc      program_by_tx_entry_wait_pwm  ; No - start over

         jmp  program_by_tx                           ; Yes - enter programming mode

         ; PPM throttle calibration and tx program entry
*****************以上红色代码没有找到来源,我搜索了BLHeliTxPgm.inc,BLHeliBootLoad.inc,C8051F330.INC,Skywalker_20A.inc,和blheli.asm这5个文档(非s版程序)都没发现,请教各位网友。







作者: sjh2100    时间: 2017-1-13 11:53
i150625 发表于 2016-4-29 21:08
看程序时这两个变量不知道是什么意思?这两个变量在pwm产生定时器中断中使用,Damping的翻译为阻尼??好像 ...

damp应该就是阻尼,类似刹车的效果吧。


作者: sjh2100    时间: 2017-1-23 22:55
本帖最后由 sjh2100 于 2017-1-23 23:03 编辑

            jb        Flags1.DIR_CHANGE_BRAKE, run6_check_speed;;A1--如果Flags1.DIR_CHANGE_BRAKE=1则run6_check_speed
        setb        Flags1.DIR_CHANGE_BRAKE                   ;   ; B1--如果Flags1.DIR_CHANGE_BRAKE=0则令其为1
        mov        Pwm_Limit, Pwm_Limit_Beg         
        jmp        run4            
run6_check_speed:                                                      ;;B1之后顺序执行到这里时,Flags1.DIR_CHANGE_BRAKE=1
        mov        Temp1, #0F0h                                       ; ; A2 --Flags1.DIR_CHANGE_BRAKE=1
        jnb        Flags1.DIR_CHANGE_BRAKE, run6_brake_done   ;从B1下来Flags1.DIR_CHANGE_BRAKE=1,从A1下来也是为1,再判断还有意义吗?
        mov        Pwm_Limit, Pwm_Limit_Beg                        
        mov        Temp1, #20h            
run6_brake_done:
       clr        C



作者: huhuzz    时间: 2017-2-18 22:05
sjh2100 发表于 2017-1-13 11:16
;Set BEC voltage,
set_bec_voltage:
; Set bec voltage

找不到代码是因为你看的那个Skywalker_20A不支持设置BEC电压,前面那个  IF HIGH_BEC_VOLTAGE == 1  是告诉编译器,只有设置了HIGH_BEC_VOLTAGE 为1 才编译下面这段。
而在Skywalker_20A.inc里面是定义了 HIGH_BEC_VOLTAGE 为 0,所以不编译下面这段。
在BLHeli里,只有Align RCE-BL35P, Platinum 50A v3,Turnigy AE 45A, Turnigy KForce 40A 这几个才支持这个功能。


作者: sjh2100    时间: 2017-2-19 10:36
huhuzz 发表于 2017-2-18 22:05
找不到代码是因为你看的那个Skywalker_20A不支持设置BEC电压,前面那个  IF HIGH_BEC_VOLTAGE == 1  是告 ...

谢谢不吝指教!


作者: chenzdh    时间: 2017-3-4 16:48
本帖最后由 chenzdh 于 2017-3-4 17:10 编辑
i150625 发表于 2016-4-20 09:54
我发现用keil编译blheli10.1版本可以,而编译blheli12.1和14.1版本就一直通不过提示错误如下:
Build targ ...

可以用Keil编译14.1版本的,报错是因为程序开始电调型号选择定义的常量太多,将不需要的电调型号选择常量定义都删掉编译就不会出错了,如下:
;**** **** **** **** ****
; List of enumerated supported ESCs and modes  (main, tail or multi)

XP_3A_Main                                         EQU 1
XP_3A_Tail                                         EQU 2
XP_3A_Multi                                         EQU 3


只保留需要的定义,其它都删掉,这样就可以编译了!








欢迎光临 5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年) (http://5imx.com./) Powered by Discuz! X3.3