STM32开发(TIM定时器:通用定时器 - PWM)
一、硬件定时器
1、高级定时器
2、通用定时器
3、基本定时器
二、PWM基础概念
PWM 也叫 脉冲宽度调制(Pilse width modulation)脉冲:这里指方波信号,是指由高低电平组成的具有完整周期的信号
脉冲周期:一周期脉冲(方波),从高电平或低电平开始变换,回到初始电平所需的时间
脉冲频率:单位时间内,具有完整周期的脉冲的个数
脉冲宽度:一周期脉冲中,高电平或低电平所持续的时间
脉冲宽度调制:指的是调制脉冲信号中正脉宽的占比
正占空比:指高电平在一个周期内所占时间的百分比
负占空比:指低电平在一个周期内所占时间的百分比周期与频率成反比:f(Hz) = 1/T(S) (公式:一秒内具有完整周期波形的个数)
周期单位: S ms us ns
频率单位: Hz KHz MHz GHz
三、分析芯片手册(通用定时器)
1、通用定时器的基本信息
在STM32U575RIT6这个芯片上,通用定时器有TIM2/TIM3/TIM4/TIM5,都属于可编程定时器
这些定时器由一个16位或32位的自动重载计数器寄存器组成,该计数器由一个可编程的分频寄存器驱动工作这些定时器可以用于测量输入信号的脉冲宽度(输入捕获)或生成输出波形(输出比较和脉宽调制)脉冲宽度可以设置为us级~ms级
需要通过定时器预分频器和RCC时钟控制器的预分频器来实现
2、通用定时器的特点
1. 有16位或32位的自动重载计数器,支持递增计数、递减计数、先递增再递减计数,三种不同的工作方式
2. 有16位分频器,用于控制计数器的时钟频率,分频器的分频系数为:1~65535
3. 每个定时器都有四个独立的通道(CH1,CH2,CH3,CH4),每个通道都支持以下四种功能输入捕获功能、输出比较功能、PWM波生成功能、单脉冲输出功能
3、通用定时器实现PWM功能
1)框图分析
需要配置的寄存器有:
1.TIMx_CR1 ————> 配置定时器基本单元的工作模式
2.TIMx_PSC ————> 向分频寄存器写入分频系数
3.TIMx_CCMR1 ————> 配置捕获/比较寄存器的工作模式
4.TIMx_CCER1 ————> 使能捕获/比较寄存器,并配置活跃电平
5.TIMx_ARR ————> 向自动重载寄存器写入自动重载的标志位
6.TIMx_CNT ————> 一般其中的值由自动重载寄存器写入,只读取计数寄存器中的值使用,可以手动写入
7.TIMx_CCR1 ————> 向通道1的捕获/比较寄存器中写入比较的标志位
2)定时器的基本单元
16位分频寄存器:分频系数范围: 1 ~ 65535 (1 ~ 2^16-1)
16位计数寄存器:计数范围: 0 ~ 65535 (0 ~ 2^16-1)32位分频寄存器:分频系数范围: 1 ~ 4,294,967,296 (1 ~ 2^32-1)
32位计数寄存器:计数范围: 0 ~ 4,294,967,296 (0 ~ 2^32-1)
3)定时器不同计数模式
定时器的计数方式:
1. 边沿对齐计数方式递增计数方式 / 向上计数方式递减计数方式 / 向下计数方式
2. 中心对齐计数方式先递增再递减计数方式
(1)递增计数方式
设置自动重载寄存器ARR中的值,并将计数寄存器CNT设置为递增计数方式
计数器CNT从 0 开始计数,每经过一个时钟周期,就自动加1,当CNT计数器自增到与ARR中的值相等时,就会产生一个溢出事件(标志位),此时CNT计数器会被ARR寄存器重载清0,循环上述操作
(2)递减计数方式
设置自动重载寄存器ARR中的值,并将计数寄存器CNT设置为递减计数方式
计数器CNT会以ARR中的值为起始值开始计数,每经过一个时钟周期,就自动减1,当CNT计数器自减到 0 时,就会产生一个溢出事件(标志位),此时CNT计数器会被自动重载为ARR寄存器中的值,重新开始自减,循环上述操作
(3)先递增再递减计数方式
设置自动重载寄存器ARR中的值,并将计数寄存器CNT设置为先递增再递减计数方式
计数器CNT从 0 开始计数,每经过一个时钟周期,就自动加1,当CNT计数器自增到与ARR中的值相等时,开始递减,每经过一个时钟周期,就自动减1,当CNT计数器自减到 0 时,就会产生一个溢出事件(标志位),循环上述操作
4)生成自定义PWM方波
1、准备工作:1.由RCC产生并分配给TIM一个分频前的时钟频率CK_PSC = 160MHz2.设置分频寄存器PSC = 160,分频后时钟频率CK_CNT = 1MHz3.设置自动重载寄存器ARR = 10004.设置计数器的计数方式为递增计数5.设置捕获/比较的值CCR1 = 700
2、自动重载寄存器ARR中的值会被加载到计数器CNT中
3、计数器CNT以0为起始值计数,每经过一个时钟周期,计数器的值就加1
4、每当计数器CNT中的值自增到与自动重载寄存器ARR中的值相等时,输出电平发生翻转
5、计数器CNT继续自增,直到与自动重载寄存器ARR中的值相等时,输出电平被置为活跃电平,并且CNT清零
6、至此生成一个完整的脉冲,也就是一个自定义PWM波,循环以上操作
寄存器配置:分频前时钟CK_PSC=160MHz,分频系数PSC=160,自动重载寄存器ARR=1000,
计数器计数方式为递增计数,默认输出初始电平为高电平,捕获/比较寄存器CCR1=700。分频后的时钟频率:CK_CNT = CK_PSC/PSC = 160MHz/160 = 1MHz
分频后的时钟周期:T = 1/f = 1/1MHz = 1us生成的PWM波频率:
生成的PWM波周期: