首先感谢网上的各位大神,在你们的帮助下我顺利的调试出任意PWM相移例程,技术员源于分享,在此我开源源码,有问题请指出谢谢!
1、需要查找数据手册,查看自己MCU的定时器触发关联表,我这用的芯片是STM32F103C8T6,
1、cubeMX配置,打开高级定时器TIM1,配置TRGO输出触发方式,选择OC1,占空比代表输出触发时间;后面程序中修改占空比就修改TIM2定时器的相移
2、程序源码添加
占空比变量
uint16_t dutyCycle = 100;
初始化启动定时器
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);
while中循环
if((dutyCycle != 0) && (dutyCycle <1000)) //dutyCycle ( 0~1000)
{
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, dutyCycle); //change dutyCysle and phase_shift
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, dutyCycle); //change dutyCysle (htim1_dutyCysle == htim2_dutyCysle)
dutyCycle =0;
}
else
{
dutyCycle =0;
}
test_value ++;
HAL_Delay(100);
3、keil5仿真修改参数:
DARMSTM.DLL
-pSTM32F103C8
4、方式效果
后续测试中发现电平反转:需要在下面通道配置也加上自动重装;
源码 :https://github.com/NoSmallWhite/WL-open-projects
参考文档:https://blog.csdn.net/Wind4study/article/details/44860521