打印
[其他ST产品]

STM32——TIM输出比较

[复制链接]
5037|61
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
4c1l|  楼主 | 2024-3-31 14:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
TIM输出比较——主要功能——输出PWM波形——》驱动电机的必要条件

一、如何实现LED呼吸灯——LED连续调控亮度???

PWM的功劳

二、PWM驱动舵机

三、PWM驱动直流电机

OC ——output compare输出比较
IC——input capture输入捕获
CC——capture/compare——输入捕获和输出比较的单元
OC(Output Compare)输出比较
输出比较可以通过比较CNT计数器与CCR捕获/比较寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形

每个高级定时器和通用定时器都拥有4个输出比较通道
高级定时器的前3个通道额外拥有死区生成和互补输出的功能——驱动三相无刷电机



CCR Capture/Compare Register——捕获/比较寄存器

输入捕获和输出比较共用

使用特权

评论回复
沙发
4c1l|  楼主 | 2024-3-31 14:05 | 只看该作者
输入捕获和输出比较共用

当使用IC时,是捕获寄存器;当使用OC时,比较寄存器——电路比较CCR与CNT的值,CNT计数自增,CCR是我们给定的值



由上图可以读到:有四个输出比较的通道,可以同时输出四路PWM波形,这四个通道有各自的CCR寄存器,但是它们共用一个CNT计数器

使用特权

评论回复
板凳
4c1l|  楼主 | 2024-3-31 14:05 | 只看该作者
基本定时器最为简单,无输出比较和输入捕获功能


使用特权

评论回复
地板
4c1l|  楼主 | 2024-3-31 14:05 | 只看该作者
PWM波形——数字输出信号,由高低电平组成,连续变化电平信号
function:在数字系统等效实现一个模拟信号的输出

最开始提出的问题:数字输出端口控制的LED,按理来说,只有高低电平——完全亮灭两种状态,如何实现呼吸灯???
回答ANSWER:让LED不断亮灭,其点亮、熄灭的频率足够大时,LED不会闪烁(起码人眼识别不到——余晖、人眼的视觉暂留现象,LED不会立即熄灭,而是过一小会儿再熄灭),其呈现一个中等亮度,通过调控点亮、熄灭的时间比例,使LED呈现不同的亮度级别
电机调速也是类似的原理——让电机不断的通断电(以一个很快的频率),致使电机速度能维持在一个中等速度

PWM秘诀——天下武功,唯快不破
应用场景——惯性系统
使高低电平跳变的数字信号可以  =等效=  模拟量

使用特权

评论回复
5
4c1l|  楼主 | 2024-3-31 14:06 | 只看该作者
参数一  ——PWM频率
PWM频率越快,其等效的模拟信号越平稳,但同时性能开销也越大

一般而言PWM频率在几k—几十KHz

参数2  ——  占空比——决定PWM等效出来的模拟电压的大小
占空比越大,等效的模拟电压越趋近于高电平;占空比越小,趋向于低电平

使用特权

评论回复
6
4c1l|  楼主 | 2024-3-31 14:06 | 只看该作者
参数3  ——  分辨率——占空比变化的精细程度

使用特权

评论回复
7
4c1l|  楼主 | 2024-3-31 14:06 | 只看该作者
匹配时电平翻转——
function——输出一个频率可调,占空比始终为50%的PWM波形——假设你设置CCR = 0,那CNT每次更新清0时,就会产生CNT = CCR的事件——》导致输出电平翻转一次,即每更新两次,输出为一个周期,输出波形频率 = 更新频率 / 2

使用特权

评论回复
8
4c1l|  楼主 | 2024-3-31 14:07 | 只看该作者
编程PWM模块主体思想 ——打通上图所示的这些模块,实现PWM输出
1、RCC开启时钟,打开我们需要使用的TIM外设、GPIO外设的时钟

2、配置时基单元

3、配置输出比较单元——CCR的值、输出比较模式、极性选择、输出使能(结构体统一配置)

4、配置GPIO——把PWM对应的GPIO口,初始化为复用推挽输出

5、运行控制——启动CNT计数器

使用特权

评论回复
9
4c1l|  楼主 | 2024-3-31 14:07 | 只看该作者
先来理解外部电路 ,再来理解内部电路
死区生成与互补输出
两个互补的输出端口,
按理说,我们假设上管导通,下管需立即关断,但由于——器件不理想,上管还没完全断,下管就已经导通了,出现短暂上下管同时导通——电源短路——lead to ——功率损耗、器件发热
为了避免以上问题——死区生成电路:作用机理:在上管关闭时,延迟一段时间,再导通下管


使用特权

评论回复
10
4c1l|  楼主 | 2024-3-31 14:07 | 只看该作者
推挽电路——四种模式
上管导通,下管断开——高电平输出
下管导通,上管断开——低电平输出
上管导通,下管导通——电源短路,不允许
上管断开,下管断开——高阻态输出
推挽电路的实际应用
两个推挽电路——H桥电路——实现控制直流电机正反转
3个推挽电路———实现——驱动三相无刷电机

使用特权

评论回复
11
4c1l|  楼主 | 2024-3-31 14:08 | 只看该作者
实际控制——对于单片机STM32来控制的话需要两个控制极A/B,且A、B 两个控制极电平相反——互补

使用特权

评论回复
12
4c1l|  楼主 | 2024-3-31 14:08 | 只看该作者
LED呼吸灯
采用正极性接法,使实验现象更为直观——占空比越大,LED越亮;

介绍函数: (我仅仅记录了小部分)


配置输出比较 outout compare——用结构体初始化输出比较单元的(master)

四个初始化函数对应四个输出比较单元 / 通道,不同通道所对应的GPIO口也是不一样的

给输出比较结构体赋默认值

仅高级定时器使用,在使用高级定时器输出PWM时,需要调用此函数,使能主输出,否则PWM将不能正常输出

使用特权

评论回复
13
4c1l|  楼主 | 2024-3-31 14:09 | 只看该作者
运行时更改参数的函数



配置CCR的预装功能——影子寄存器——写入的值不会立即生效,而是在更新事件才会生效



单独更改输出极性

使用特权

评论回复
14
4c1l|  楼主 | 2024-3-31 14:09 | 只看该作者
单独修改输出使能参数

单独更改CCR寄存器值的函数 ——运行时,更改占空比(master)





使用特权

评论回复
15
4c1l|  楼主 | 2024-3-31 14:10 | 只看该作者
默认复用功能——片上外设端口与GPIO的连接关系

配置PA0/PA15

使用复用推挽输出

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   //使用复用推挽输出

使用特权

评论回复
16
4c1l|  楼主 | 2024-3-31 14:10 | 只看该作者


使用特权

评论回复
17
4c1l|  楼主 | 2024-3-31 14:11 | 只看该作者
普通开漏、推挽输出

引脚控制权来自于输出数据寄存器

复用推挽输出——定时器控制引脚,输出数据寄存器被断开,输出控制权转移给片上外设,对于此片上外设引脚连接的就是TIM2的CH1通道,只有将GPIO设置成复用推挽输出,才可以将引脚的输出控制权转移给片上外设,PWM的波形才能通过引脚输出

使用特权

评论回复
18
4c1l|  楼主 | 2024-3-31 14:11 | 只看该作者
程序的参数计算

        TIM_BaseInitStructure.TIM_Period = 10000 - 1;//周期——ARR自动重装器的值
        TIM_BaseInitStructure.TIM_Prescaler = 7200 - 1;//PSC预分频器的值
        TIM_OCInitStructure.TIM_Pulse = ;//设置CCR寄存器

使用特权

评论回复
19
4c1l|  楼主 | 2024-3-31 14:12 | 只看该作者


让LED呈现呼吸灯的效果——不断更改CCR的值

使用特权

评论回复
20
4c1l|  楼主 | 2024-3-31 14:12 | 只看该作者
引脚重映射 ——PA15——AFIO





引脚重映射配置

把PA0——》PA15,可使用部分重映像、完全重映像



使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

59

主题

600

帖子

2

粉丝