鸽了一段时间,放心不会断的哈,目前仅仅是显示屏坏了,不影响后面项目
前文已经配置了GPIO、编码器
本节讲解CubeMX高级定时器TIM1配置带死区的6路互补的PWM
同时配置信号触发后续ADC采集
板子引角的原理图如下
对应的:
Motor1--U+--PA8--TIM1_CH1
Motor1--U---PB13--TIM1_CH1N
Motor1--V+--PA9--TIM1_CH1
Motor1--V---PB14--TIM1_CH1N
Motor1--W+--PA10--TIM1_CH1
Motor1--W---PB15--TIM1_CH1N
接着配置具体参数如下:
由于pwm控制频率为10K,芯片的时钟周期为168Hz,这里采用中心对齐的上下计数模式的计数周期为16800/2。计算公式为:
这里重复计数填1,根据下图stm手册,为的是在后面再每个PWM周期产生一个中断事件
触发事件选择update Event(控制adc采样并进入中断)
死区配置(这里根据MOS管具体情况设置,后期可以在程序中直接改)
最后各路PWM配置只需要把占空比改成周期的一半(16800/2/2),上下管各导通百分之50等效于单路输出为0,同时便于观察死区。
芯片的时钟树配置如下
生成代码
在初始化中开启PWM
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);
HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_3);
HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_3);
连接PWM1的两路互补引脚,示波器观察结果如图:
一格25us,4格100us,刚好10Khz的频率,并带有死区,说明配置正确