完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我们知道,STM32定时器除了基本计数定时功能外,还对外拓展了输入、输出通道,从而可以实现输入捕捉、比较输出功能。比较输出【Compare Output】功能:定时器通过对预设的比较值与计数器的值做匹配比较之后,并依据相应的输出模式从而实现各类输出。如PWM输出、电平翻转、单脉冲输出、强制输出等。一般来讲,STM32的通用定时器和高级定时器都具有比较捕获功能,不同的定时器可能通道数量上有差异。
或者,我们可以使用比较输出功能来感知或提示某个时间段已经过去了。这个不难理解,因为比较输出的基本特征是计数器CNT的值与比较寄存器CCR的值做比较,计数器数据变化意味着时间的流逝,当计数器记到跟比较值相等或相匹配时,也就表示相应时间段的过去。具体到STM32定时器,在比较输出模式下,当捕获比较单元监测到计数器CNT的值与CCR寄存器的数字匹配时,将根据相应的比较输出模式实现相应输出。比较输出功能主要靠捕捉比较单元实现,同时定时器输出单元与时基单元协同配合。 捕捉比较单元有个重要的寄存器,捕捉比较寄存器CCR,它由影子寄存器/预装载寄存器组成。用户访问时访问预装寄存器。预装载功能可开启或关闭。由OCxPE@TIMx_CCER控制。至于什么时候需要开、什么时候需要关闭前面多次提到过。总之需要用户修改的预装数据立即生效时将预装功能关闭,希望用户修改的数据不影响当前周期的计数或波形输出时,我们就打开其预装功能。 比较输出的大致流程以及几个术语【OCxREF 、OCx 、输出极性】 当定时器的比较输出单元检测到计数器CNT的值与捕捉比较寄存器CCR的值发生匹配事件时,定时器的比较输出单元会根据比较输出模式输出相应的信号,该信号我们称之为中间参考信号,即OcxREF信号。 该OCxREF源于输出模式控制器,并硬件约定高电平为有效信号,即有效状态所对应的信号。它经过极性选择后,再经过输出控制电路输出到管脚。当极性选择位CCxP=0时,高电平作为Ocx的有效输出信号,当CCxP=1时,低电平作为Ocx的有效输出。 也就是说,OCXref信号只是个中间参考信号,并非最终输出信号。最终输出端OCX的active state【有效状态】/inactive state【无效状态】所对应的电平取决于极性选择控制位CCxP/CCxNP。 比方我们以通道1为例: 任一时刻计数器的值与CCR的比较结果,结合相应的比较输出模式决定了中间参考信号OC1REF的电平,而最终输出端OC1的输出电平取决于极性选择CC1P位的配置。即对于非互补输出时 Ocx =OCxREF + 极性 【+ 表示结合的意思】 当然,如果是高级定时器的互补输出,最后的输出电平除了与极性选择有关外,输出波形还跟插入的死区有关。即对于互补输出时 Ocx =OCxREF + 极性 + 死区 比较输出相关事件
另外,对于 CCRx 影子寄存器的预装载功能可以软件开启或关闭 (OCxPE@TIMx_CCMR)也应该清楚,以便我们在定时器的应用中根据具体应用来打开或关闭CCRx寄存器的预装功能,前面有做个相关应用案例的分享。 输出比较模式概览 总的来讲,这几个比较输出模式,我们有必要对它们的各自输出特征做基本了解,它是我们做比较输出应用时的基础。比方不同比较输出模式,结合不同的计数模式,相应的输出特征是什么。 边沿对齐PWM输出波形示例【Up Counting + PWM mode1】 中心对齐PWM输出波形示例【Center aligned Mode + PWM1】 PWM输出频率的计算 定时器比较输出最常见的应用就是PWM输出,即脉宽调制输出。这里简单介绍下PWM输出波形参数的计算。 以计数器向上计数、PWM1为例:
原理:计数器启动后,在下一个更新事件来临之前的时间段内实现固定个数的脉冲输出。当下一个更新事件来临时计数器停止计数。输出的脉冲个数可以一个或几个。如果是通用计数器就是1个,如果是高级定时器,脉冲个数与RCR数值和计数模式有关。 实现方式:使用OC比较输出或PWM输出模式。 计数器的启动可以通过自身软件使能启动,也可以将定时器配置在触发从模式经过触发启动。 高级定时器的互补输出及死区的插入: 这里所说的互补输出,特指高级定时器TIM1或 TIM8通过其专门的互补通道输出互补信号。即每一对互补通道,共用相同的输出模式和同一通道比较寄存器CCR来输出互补信号。 这里要提醒的是,这对互补信号的每一路都可以独立做输出极性配置,在极性选择前二者一定是互补的,但经过极性选择后是否还是互补波形取决于二者的极性选择情况。如果极性选择一致,即都选择高电平做为有效信号或者都选择低电平做为有效信号,这时互补通道的最终输出【OCX/OCXN】就是互补信号。如果二者的极性选择不一致,最终的互补输出波形则是同相的,而不是互补信号。对于我们用户来讲,具体做怎样的极性选择,取决于实际应用需求。 我们常常使用互补输出信号来驱动电机桥臂。电机的各个桥臂由功率器件组成,比如IGBT。实际应用中,每一相的上下两个桥臂不可以同时导通,否则电源会通过上下两个桥臂产生短路情况。一般来讲,每组桥臂的上下臂呈互开关驱动系,即上臂导通,下臂截止,反之亦然。但由于那些晶体管的开、关动作本身会有时延问题,而且不同晶体管开关动作的延时也有差异。鉴于此,为了避免上下臂同时导通的隐患,在输出控制信号中额外插入一个时段,保证让上下臂都呈截止状态,这个时段就是死区。对于高级定时器的互补输出通道,可以通过相关寄存器配置即可实现死区控制。不难看出,死区的插入是以牺牲有效输出为代价来保障电机驱动电路的安全性,所以该参数的设置除了考虑安全性外,也要考虑合理性。 比较输出应用时的几个注意点 【实际应用或芯片软硬件移植过程中经常遇到的情形】 1. 高级定时器相比通用定时器,它增加了主输出使能控制位,【MOE@timx_bdtr】,如果该位置零的话,此时OCx端没有波形输出; 2. 高级定时器相比通用定时器,它增加了刹车控制机制,BKE@timx_bdtr】,如果使能了刹车控制并触发有效刹车电平,此时OCx端没有波形输出; 3. 高级定时器相比通用定时器,使用互补输出时增加了死区插入机制,【DTG@timx_bdtr】,若插入的死区时间过大,当超过有效输出电平宽度时,会导致OCx/OCxN一端或两端没有变化的波形输出; 4. 高级定时器的互补输出在OCxREF出来后、在极性选择之前,二者是互补的,经过极性选择后是否互补取决于两互补通道的极性选择。极性的选择最终由实际驱动电路需求决定的。 5. 定时器的所有输出通道可以独立自由设置,如禁用/开启、输出模式选择、极性安排等。但高级定时器的做互补输出时,他们共用相同输出模式和CCR值。 6. 对于通用定时器的Ocx通道,当使能该通道时,Ocx输出=OCxREF+极性;当禁用该通道时,Ocx的输出=0。 7. 对于高级定时器Ocx/OCxN互补通道,没法同时实现实现有效输出。注意区分有效电平、无效电平与最终输出端的高、低电平。 8. 对于高级定时器来说,Ocx/OCxN的输出除了跟输出使能位有关外,跟其它多个控制位【MOE/OSSI/OSSR/CCxP/CCxNP】有关。各个系列的STM32参考手册中有个Ocx/OcxN互补通道输出控制表格可以查看。 整体上讲,关于定时器的比较输出,基本原理并不复杂,但实际应用起来就非常灵活,尤其当多种比较输出模式,结合定时器的主从应用时,STM32定时器的强大功能可以因此而得到充分展现。 |
|
|
|
只有小组成员才能发言,加入小组>>
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
2433 浏览 0 评论
3341 浏览 9 评论
3021 浏览 16 评论
3514 浏览 1 评论
9118 浏览 16 评论
1242浏览 3评论
636浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
627浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2373浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1936浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-23 11:19 , Processed in 0.875505 second(s), Total 49, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号