AM32电调学习笔记

AM32 电调学习

基于AM32固件和G071的32位无刷电机电调及原理图

1.设置参数

  • char dir_reversed = 0;
  • char bi_direction = 0;
  • char use_sin_start = 0;
  • char comp_pwm = 1;
  • char VARIABLE_PWM = 1;
  • char stuck_rotor_protection = 1; // Turn off for Crawlers
  • char advance_level = 2; // 7.5 degree increments 0 , 7.5, 15, 22.5)
  • uint16_t TIMER1_MAX_ARR = TIM1_AUTORELOAD; // maximum auto reset register value
    自动调整
   if (eepromBuffer[24] < 49 && eepromBuffer[24] > 7) {
        if (eepromBuffer[24] < 49 && eepromBuffer[24] > 23) {
            TIMER1_MAX_ARR = map(eepromBuffer[24], 24, 48, TIM1_AUTORELOAD, TIM1_AUTORELOAD / 2);
        }
        if (eepromBuffer[24] < 24 && eepromBuffer[24] > 11) {
            TIMER1_MAX_ARR = map(eepromBuffer[24], 12, 24, TIM1_AUTORELOAD * 2, TIM1_AUTORELOAD);
        }
        if (eepromBuffer[24] < 12 && eepromBuffer[24] > 7) {
            TIMER1_MAX_ARR = map(eepromBuffer[24], 7, 16, TIM1_AUTORELOAD * 3,
                TIM1_AUTORELOAD / 2 * 3);
        }
        SET_AUTO_RELOAD_PWM(TIMER1_MAX_ARR);
        throttle_max_at_high_rpm = TIMER1_MAX_ARR;
        duty_cycle_maximum = TIMER1_MAX_ARR;
    } else {
        tim1_arr = TIM1_AUTORELOAD;
        SET_AUTO_RELOAD_PWM(tim1_arr);
    }
  • uint16_t min_startup_duty = 120;
  • uint16_t minimum_duty_cycle = DEAD_TIME;
    if (eepromBuffer[25] < 151 && eepromBuffer[25] > 49) {
        min_startup_duty = (eepromBuffer[25] + DEAD_TIME);
        minimum_duty_cycle = (eepromBuffer[25] / 2 + DEAD_TIME / 3);
        stall_protect_minimum_duty = minimum_duty_cycle + 10;
    } else {
        min_startup_duty = 150;
        minimum_duty_cycle = (min_startup_duty / 2) + 10;
    }
  • uint16_t motor_kv = 2000; motor_kv = (eepromBuffer[26] * 40) + 20;
  • motor_poles = eepromBuffer[27];
  • char brake_on_stop = 0;
  • char stall_protection = 0;
  • volumn
        if (eepromBuffer[30] > 11) {
            setVolume(5);
        } else {
            setVolume(eepromBuffer[30]);
        }
  • char TLM_ON_INTERVAL = 0;
  • servo_low_threshold = (eepromBuffer[32] * 2) + 750; // anything below this point considered 0
  • uint16_t servo_low_threshold = 1100; // anything below this point considered 0
  • uint16_t servo_high_threshold = 1900; // anything above this point considered 2000 (max)
  • servo_high_threshold = (eepromBuffer[33] * 2) + 1750;
  • servo_neutral = (eepromBuffer[34]) + 1374;
  • uint16_t servo_neutral = 1500;
  • servo_dead_band = eepromBuffer[35];
  • uint8_t servo_dead_band = 100;
  • char LOW_VOLTAGE_CUTOFF = 0; // Turn Low Voltage CUTOFF on or off
  • low_cell_volt_cutoff = eepromBuffer[37] + 250; // 2.5 to 3.5 volts per cell range
  • uint16_t low_cell_volt_cutoff = 330; // 3.3volts per cell
  • char RC_CAR_REVERSE = 0; // have to set bidirectional, comp_pwm off and stall
  • char USE_HALL_SENSOR = 0;
  • char sine_mode_changeover_thottle_level = 5; // Sine Startup Range
        if (eepromBuffer[40] > 4 && eepromBuffer[40] < 26) { // sine mode changeover 5-25 percent throttle
            sine_mode_changeover_thottle_level = eepromBuffer[40];
        }
        if (eepromBuffer[41] > 0 && eepromBuffer[41] < 11) { // drag brake 1-10
            drag_brake_strength = eepromBuffer[41];
        }

uint8_t driving_brake_strength = 10

        if (eepromBuffer[42] > 0 && eepromBuffer[42] < 10) { // motor brake 1-9
            driving_brake_strength = eepromBuffer[42];
            dead_time_override = DEAD_TIME + (150 - (driving_brake_strength * 10));
            if (dead_time_override > 200) {
                dead_time_override = 200;
            }
            min_startup_duty = eepromBuffer[25] + dead_time_override;
            minimum_duty_cycle = eepromBuffer[25] / 2 + dead_time_override;
            throttle_max_at_low_rpm = throttle_max_at_low_rpm + dead_time_override;
            startup_max_duty_cycle = startup_max_duty_cycle + dead_time_override;
#ifdef STMICRO
            TIM1->BDTR |= dead_time_override;
#endif
#ifdef ARTERY
            TMR1->brk |= dead_time_override;
#endif
#ifdef GIGADEVICES
            TIMER_CCHP(TIMER0) |= dead_time_override;
#endif
        }
  • uint8_t TEMPERATURE_LIMIT = 255; // degrees 255 to disable
  • uint16_t CURRENT_LIMIT = 202;
        if (eepromBuffer[44] > 0 && eepromBuffer[44] < 100) {
            CURRENT_LIMIT = eepromBuffer[44] * 2;
            use_current_limit = 1;
        }
  • uint8_t sine_mode_power = 5;
       if (eepromBuffer[45] > 0 && eepromBuffer[45] < 11) {
            sine_mode_power = eepromBuffer[45];
        }
  • dshot servopwm edt_arm
    if (eepromBuffer[46] >= 0 && eepromBuffer[46] < 10) {
            switch (eepromBuffer[46]) {
            case AUTO_IN:
                dshot = 0;
                servoPwm = 0;
                EDT_ARMED = 1;
                break;
            case DSHOT_IN:
                dshot = 1;
                EDT_ARMED = 1;
                break;
            case SERVO_IN:
                servoPwm = 1;
                break;
            case SERIAL_IN:
                break;
            case EDTARM:
                EDT_ARM_ENABLE = 1;
                EDT_ARMED = 0;
                dshot = 1;
                break;
            };
        } else {
            dshot = 0;
            servoPwm = 0;
            EDT_ARMED = 1;
        }
  • char low_rpm_throttle_limit = 1;
       if (motor_kv < 300) {
           low_rpm_throttle_limit = 0;
       }
  • low_rpm_level = motor_kv / 100 / (32 / motor_poles);
  • high_rpm_level = motor_kv / 17 / (32 / motor_poles);
    • reverse_speed_threshold = map(motor_kv, 300, 3000, 1000, 500);
  • bi_direction
   if (!comp_pwm) {
        bi_direction = 0;
    }
### AM32 开源电调 上位机软件 开发教程 下载 对于AM32开源电调项目的开发,尤其是涉及到上位机软件的选择和开发资源获取方面,有多种途径可以获得所需资料和支持。 #### 使用的编程环境与工具链 为了方便开发人员进行固件编写以及调试工作,推荐使用Keil MDK作为主要IDE来完成C/C++代码编辑、编译等工作[^3]。此外,STM32CubeMX也是一个非常有用的图形化配置工具,它可以帮助快速初始化外设并生成初始项目框架。 #### 烧录方式及工具介绍 针对不同接口类型的烧写需求,提供了两种方案供选择: - 对于采用串口或USB DFU模式进行程序加载的情况,建议选用`Artery_ISP_Programmer`这款官方支持的应用程序来进行操作; - 若是通过SWD硬件接口实施,则应考虑利用`ArteryICPProgrammer`配合AT-LINK或J-LINK仿真器实现高效稳定的在线调试体验[^1]。 #### 通信协议解析 当涉及具体应用层面上的数据交互时,通常会借助UART(Universal Asynchronous Receiver Transmitter)总线完成主机间的信息传递任务。在此过程中,需注意设定正确的波特率参数(如本案例中的256000bps),并通过特定命令序列触发目标设备响应机制——例如连续发送多字节FF指令以达成初步握手目的。 #### 关键特性概述 值得注意的是,在实际运行状态下,该型号ESC具备良好的兼容性和扩展能力,不仅能够良好适配各类主流无人机平台架构下的飞行控制系统,而且允许用户自定义调整PWM信号周期内的占空比比例从而精确控制电机运转状态(-2000至+2000区间范围内)。 #### 获取更多帮助 除了上述提及的内容之外,还可以关注DroneCAN社区动态及其关联的技术文档库,那里或许能找到关于如何构建更复杂应用场景方面的指导性意见或是最佳实践分享[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值