STM32初学——TIM输出比较

 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,人耳可以听到 

由于声音太大,没能下载,只是编译。 

  • 30
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值