600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > STM32物联网项目-高级定时器软件仿真输出互补PWM信号

STM32物联网项目-高级定时器软件仿真输出互补PWM信号

时间:2022-02-01 09:58:57

相关推荐

STM32物联网项目-高级定时器软件仿真输出互补PWM信号

高级定时器软件仿真输出互补PWM信号

上次介绍了高级定时器特有的功能:重复计数器,互补PWM输出,死区,刹车功能

这里介绍使用keil软件仿真输出互补PWM信号和带死区后的互补信号

CubeMX配置

TIM1配置

预分频系数为71,即晶振振1次1us,自动重载值为99,即PWM输出周期为100us,也就0.1ms

死区时间先设置为0,后续再设置看效果

50%的占空比,互补通道极性CH Polarity和CHN Polarity设置为低电平,后续可以根据输出的PWM波形来调整,也就设置计数值小于50时是输出高电平还是低电平,可根据实际应用场景来设置,高低电平都可以

因为用到了触摸按键1和LED灯,触摸按键引脚设置为外部中断,下降沿触发,LED设置为推挽输出即可,比较简单,NVIC记得开启外部中断

代码

HAL库函数

开启和关闭PWM函数,在<stm32f1xx_hal_tim.h>文件中

/*Blocking mode: Polling*/HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim,uint32_t Channel);HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim,uint32_t Channel);

开启和关闭互补PWM函数,这是个拓展功能,所以在

/*Blocking mode : polling*/HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim,uint32_t Channel);HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim,uint32_t Channel);

MyInit.c

代码使用自己的框架,没有新增文件,因为初始化工作已经用CubeMX软件完成了,所以只需在初始化函数中开启定时器1的互补输出功能即可

/** @name Peripheral_Set* @brief 外设设置* @param None* @retval None */static void Peripheral_Set(){//启动定时器1互补PWM输出HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);}

CallBack.c

在外部中断回调函数中,通过触摸按键1切换占空比

/** @name HAL_GPIO_EXTI_Callback* @brief 外部中断回调函数* @param GPIO_Pin:触发外部中断的引脚* @retval None */void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){if(GPIO_Pin == KEY1_Pin){LED.LED_Fun(LED1,LED_Flip); //翻转LED1状态//通过触摸按键1切换占空比if(TIM1->CCR1 == 50){TIM1->CCR1 = 80; //占空比切换为80%}else{TIM1->CCR1 = 50; //占空比切换为50%}}}

keil软件设置

在Debug选项中选择左边的软件仿真,DLL文件按下图设置

软件仿真这两个选项可以通过下面的方法找到,不同芯片的类似

将找到的DLL文件复制到选项框里即可

然后芯片的外部晶振选择8MHz,根据自己芯片来选择,f103ZET6的外部晶振是8M,如果设置错,则后面软件仿真输出的PWM周期不对

编译代码,然后开始仿真

开始仿真——互补PWM输出

打开逻辑分析仪

点击Setup添加想要查看输出信号的引脚

显示类型都选择Bit

点击全速运行,过一会就能看到输出的PWM波形了,两个通道成互补状态,上面通道输出高电平,下面通道输出低电平,点击Cursor游标选项,可以测量一个PWM信号的周期是多少,看是否是前面设定的值

周期为0.1ms,频率约为10000Hz,也就是10kHz,测量得有点误差,这与前面71和99设定的周期是一样的

也可以看出占空比为50%,与前面设置的也是一样的

因为代码中编写了按键外部中断切换占空比的功能,所以要在软件仿真中模拟按键按下的功能,按下图打开GPIOE引脚

因为按键接到了PE0引脚,所以只需要点击PE0,就模拟了按下按键的动作

PE0点击一次表示按下,再点一次表示松开,然后逻辑分析仪就会输出信号的变化,蓝色是按键,粉色是LED灯,LED灯状态翻转

放大波形,可以看到,在按键下降沿产生后,PWM的占空比就被改变了,由原来的50%变为了80%,一个周期内高电平的时间明显变长

带死区的互补PWM信号输出

在CubeMX中设置死区时间为10,重新生成工程

再编译,查看PWM波形的变化,可以看到上下PWM波形并不完全互补,当上面通道要输出高电平导通MOS管时,会延时一段时间,等待下面通道输出低电平完全关闭MOS管后,再开启上面的MOS管,这段延时的时间就叫死区时间

改变死区时间的值,PWM波形就会发生改变

注意:死区时间设置的值要小于占空比的值,不然会无法输出PWM

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。