一、预备知识
1.定时器TIM功能:定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断、内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能,我们主要使用的是普通定时中断和PWM输出比较功能。
每一个时钟周期计数器+1,周期数量*单个周期时间=定时时长
二、普通定时器功能
1.计算公式:单个时钟周期=1 / (输入时钟频率/分频系数+1)
定时时间=(技术周期+1) / (输入时钟频率/分频系数+1)=(ARR+1)*(PCS+1)/Tclk
2.cubeMX配置
找到对应TIMx定时器,选择 internal clock (内部时钟源)一般均选择这个选项,其他都不需要选。
3.程序内容
创建中断函数
参数TIM_HandleTypeDef*htim为产生中断的定时器编号
三、PWM输出功能
1.原理讲解
每个定时器有4个通道,每个通道都有一个捕获比较寄存器(即获取CNT的值,与CCRx进行比较),通过比较输出高低电平,以此来实现对脉宽的调制(PWM)
TIMx_ARR寄存器确定PWM频率,TIMx_CCRx寄存器确定占空比
向上计数模式:当CNT<CCRx时,TIMx_CHx通道输出低电平,当CNT>CCRx时,TIMx_CHx通道输出高电平
例:
在选择输出PWM时,Slave Mode ,Trigger Source不会涉及。
参数说明:
计数模式:向上计数即为计数器从0加到ARR(自动重装载值),计数器溢出,然后计数器归为0,继续加循环,向下计数即为计数器从ARR减到0,计数器溢出。然后计数器归为ARR,继续减循环
内部时钟因子:暂时忽略
PWM模式:设置CNT大于还是小于CRR时为有效电平,具体如下,PWM模式1: 在向上计数时,当CNT<CCRx时通道x为有效电平,当CNT>CCRx时通道x为无效电平; 在向下计数时,当CNT>CCRx时通道x为无效电平,当CNT<CCRx时通道x为有效电平
PWM模式2: 在向上计数时,当CNT<CCRx时通道x为无效电平,当CNT>CCRx时通道x为有效电平; 在向下计数时,当CNT>CCRx时通道x为有效电平,当CNT<CCRx时通道x为无效电平
有效电平可以是高电平也可以是低电平,具体得看CCER寄存器的CC1P位的值来确定,CC1P=0 时有效电平为高,CC1P=1时 有效电平为低。
通道极性:即设置有效电平为高电平还是低电平,有效电平即为占空比中占的部分
PSC分频系数
ARR自动重装数
CCR计数器值
频率=系统频率 / (PSC+1)(ARR+1)HZ
分辨率=1 / (ARR+1)
占空比=CRR / (ARR+1)
先通过频率和分辨率计算ARR和PSC的值,CCR从0增到ARR+1对应0到100%占空比
输出模式配置为复用推挽输出 (Alternte Function Push Pull)
__HAL_TIM_SetCompare(,,)函数通过设置CCR值配置占空比
参数说明:①定时器编码②定时器通道③CCR的值
四、在MBD中的应用
在simulink中,勾选Timers的Duty Cycle is an input port 后,输入Tim的变量应为0~100的占空比值