AM32电调学习解读九:ESC上电启动关闭全流程波形分析
这是第九篇,前面的文章把各个模块的实现都介绍了一轮,本章是从运行的角度结合波形图,把整个流程走一遍。
先看下一运行的配置,我把一些配置关闭了,这样跑起来会好分析一些,不同配置跑起来效果会有差异。使用的ServoPwm信号。
1、运行配置
2、ESC上电启动停止全过程
ESC上焊了很多飞线,用GPIO指示运行的状态
void MX_GPIO_Init(void)
{gpio_mode_QUICK(GPIOA, GPIO_MODE_OUTPUT, GPIO_PULL_NONE, GPIO_PINS_12);gpio_mode_QUICK(GPIOA, GPIO_MODE_OUTPUT, GPIO_PULL_NONE, GPIO_PINS_15);gpio_mode_QUICK(GPIOB, GPIO_MODE_OUTPUT, GPIO_PULL_NONE, GPIO_PINS_2);gpio_mode_QUICK(GPIOB, GPIO_MODE_OUTPUT, GPIO_PULL_NONE, GPIO_PINS_3);gpio_mode_QUICK(GPIOB, GPIO_MODE_OUTPUT, GPIO_PULL_NONE, GPIO_PINS_4);gpio_mode_QUICK(GPIOB, GPIO_MODE_OUTPUT, GPIO_PULL_NONE, GPIO_PINS_5);gpio_mode_QUICK(GPIOB, GPIO_MODE_OUTPUT, GPIO_PULL_NONE, GPIO_PINS_7);gpio_mode_QUICK(GPIOB, GPIO_MODE_OUTPUT, GPIO_PULL_NONE, GPIO_PINS_8);//PA11作为比较器输出 gpio_init_type gpio_init_struct;crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);gpio_init_struct.gpio_pins = GPIO_PINS_11;gpio_init_struct.gpio_mode = GPIO_MODE_MUX;gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;gpio_init_struct.gpio_pull = GPIO_PULL_NONE; gpio_init(GPIOA, &gpio_init_struct);gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE11, GPIO_MUX_7);
}
3、ESC上电油门信号检测
先来一个部分发大图
(1)MCU启动
(2)发启动音
然后开启接收油门信号
(3)油门在位检测
detectInput->checkServo
transfercomplete -> inputSet == 1 -> !armed
这个时候油门信号是1001us,是小于启动点的
(4)油门信号置低解锁
油门置低1秒解锁
(5)解锁后发音
发两种频率的声音
4、启动
(1)油门大于启动点
(2)old_routine=1阶段
每隔50us执行tenKhzRoutine->getBemfState读取反电动势
(3)找到过零点则换相
(4)转速达到预期,切无感驱动
5、无感驱动
(1)interruptRoutine
(2)检测到过零点
这里会设置换相等待时间waitTime,然后使能定时器
(3)PeriodElapsedCallback定时器回调
换相,计算换相等待时间,使能比较器中断
(4)下一次interruptRoutine
6、油门减小转速低了
old_routine = 1;//油门低于这个转速,使用同步驱动的方式
7、转速低了油门小于启动点停转