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——捕获/比较寄存器
输入捕获和输出比较共用
当使用IC时,是捕获寄存器;当使用OC时,比较寄存器——电路比较CCR与CNT的值,CNT计数自增,CCR是我们给定的值
由上图可以读到:有四个输出比较的通道,可以同时输出四路PWM波形,这四个通道有各自的CCR寄存器,但是它们共用一个CNT计数器
基本定时器最为简单,无输出比较和输入捕获功能
PWM波形——数字输出信号,由高低电平组成,连续变化电平信号
function:在数字系统等效实现一个模拟信号的输出
- 最开始提出的问题:数字输出端口控制的LED,按理来说,只有高低电平——完全亮灭两种状态,如何实现呼吸灯???
- 回答ANSWER:让LED不断亮灭,其点亮、熄灭的频率足够大时,LED不会闪烁(起码人眼识别不到——余晖、人眼的视觉暂留现象,LED不会立即熄灭,而是过一小会儿再熄灭),其呈现一个中等亮度,通过调控点亮、熄灭的时间比例,使LED呈现不同的亮度级别
电机调速也是类似的原理——让电机不断的通断电(以一个很快的频率),致使电机速度能维持在一个中等速度
- PWM秘诀——天下武功,唯快不破
- 应用场景——惯性系统
- 使高低电平跳变的数字信号可以 =等效= 模拟量
参数一 ——PWM频率
PWM频率越快,其等效的模拟信号越平稳,但同时性能开销也越大
一般而言PWM频率在几k—几十KHz
参数2 —— 占空比——决定PWM等效出来的模拟电压的大小
占空比越大,等效的模拟电压越趋近于高电平;占空比越小,趋向于低电平。
参数3 —— 分辨率——占空比变化的精细程度
匹配时电平翻转——
- function——输出一个频率可调,占空比始终为50%的PWM波形——假设你设置CCR = 0,那CNT每次更新清0时,就会产生CNT = CCR的事件——》导致输出电平翻转一次,即每更新两次,输出为一个周期,输出波形频率 = 更新频率 / 2
编程PWM模块主体思想 ——打通上图所示的这些模块,实现PWM输出
1、RCC开启时钟,打开我们需要使用的TIM外设、GPIO外设的时钟
2、配置时基单元
3、配置输出比较单元——CCR的值、输出比较模式、极性选择、输出使能(结构体统一配置)
4、配置GPIO——把PWM对应的GPIO口,初始化为复用推挽输出
5、运行控制——启动CNT计数器
先来理解外部电路 ,再来理解内部电路
死区生成与互补输出
- 两个互补的输出端口,
- 按理说,我们假设上管导通,下管需立即关断,但由于——器件不理想,上管还没完全断,下管就已经导通了,出现短暂上下管同时导通——电源短路——lead to ——功率损耗、器件发热
- 为了避免以上问题——死区生成电路:作用机理:在上管关闭时,延迟一段时间,再导通下管
推挽电路——四种模式
- 上管导通,下管断开——高电平输出
- 下管导通,上管断开——低电平输出
- 上管导通,下管导通——电源短路,不允许
- 上管断开,下管断开——高阻态输出
推挽电路的实际应用
- 两个推挽电路——H桥电路——实现控制直流电机正反转
- 3个推挽电路———实现——驱动三相无刷电机
实际控制——对于单片机STM32来控制的话需要两个控制极A/B,且A、B 两个控制极电平相反——互补
涉及知识点:
6-3 LED呼吸灯
采用正极性接法,使实验现象更为直观——占空比越大,LED越亮;
介绍函数: (我仅仅记录了小部分)
配置输出比较 outout compare——用结构体初始化输出比较单元的(master)
四个初始化函数对应四个输出比较单元 / 通道,不同通道所对应的GPIO口也是不一样的
给输出比较结构体赋默认值
仅高级定时器使用,在使用高级定时器输出PWM时,需要调用此函数,使能主输出,否则PWM将不能正常输出
运行时更改参数的函数
配置CCR的预装功能——影子寄存器——写入的值不会立即生效,而是在更新事件才会生效
单独更改输出极性
单独修改输出使能参数
单独更改CCR寄存器值的函数 ——运行时,更改占空比(master)
默认复用功能——片上外设端口与GPIO的连接关系
配置PA0/PA15
使用复用推挽输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //使用复用推挽输出
普通开漏、推挽输出
引脚控制权来自于输出数据寄存器
复用推挽输出——定时器控制引脚,输出数据寄存器被断开,输出控制权转移给片上外设,对于此片上外设引脚连接的就是TIM2的CH1通道,只有将GPIO设置成复用推挽输出,才可以将引脚的输出控制权转移给片上外设,PWM的波形才能通过引脚输出
程序的参数计算
TIM_BaseInitStructure.TIM_Period = 10000 - 1;//周期——ARR自动重装器的值
TIM_BaseInitStructure.TIM_Prescaler = 7200 - 1;//PSC预分频器的值
TIM_OCInitStructure.TIM_Pulse = ;//设置CCR寄存器
让LED呈现呼吸灯的效果——不断更改CCR的值
引脚重映射 ——PA15——AFIO
引脚重映射配置
把PA0——》PA15,可使用部分重映像、完全重映像
解决调试端口的复用
SWJ——SWD/JTAG两种调试方式
调试端口
使用
PB4变成普通IO口
PA15、PB3、PB4变回普通IO口
五个引脚全部变为普通GPIO,没有调试功能,千万小心使用
如果你重映射的引脚正好是调试端口,三步走
- //打开AFIO时钟
- //重映射引脚
- //解除调试端口
6-2 PWM驱动舵机
同一个定时器不同通道输出PWM的特点:
- 对于同一个定时器的不同通道输出的PWM,共用一个CNT计数器;所以他们的频率必须一样,
- 他们的占空比由各自的CCR决定,所以占空比可以各自设定;
- 他们的相位,由于计数器更新,所有的PWM同时跳变,所以相位是同步的
错误——
错误——2.情况:SWJ功能在代码中被关闭了
这种情况的特点往往是:之前烧录都好好的,某次烧录后突然就不行。并且当你一直按着开发板的reset键时,你会发现又能识别设备了(根据这个现象,网上有给出先按住reset键,在点烧录按钮后立刻松开reset的笨办法,这个方法看手速和人品,有概率解决)。
————————————————
版权声明:本文为CSDN博主「冯凤阳」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/vskjrv/article/details/122416836
存疑
中定义了PB1、PB11两个GPIO,但是在PB1接入一个按键的基础上,再在PB11上接一个按键,这个PB11上的按键相当于RESET复位按键,为什么呢???
6-5 PWM驱动直流电机
PA2对应与——TIM2的通道三
发现问题:电机会发出像蜂鸣器一样的响声——因为电机里面也是线圈和磁铁,如何避免此问题?
- A:加大PWM频率,当其频率足够大时,超出人耳范围时,就听不到了,人耳听到声音的频率是20Hz—20KHz,
我们目前给的是1KHz,人耳可以听到