STMCU小助手
发布时间:2022-7-5 21:52
一、基本介绍/ d+ b$ ~4 t t4 Z& O! v2 p, c* f( K
高级定时器是TIM1和TIM8,拥有4个16位的高精度的捕捉比较通道 可编程设定通道的方向:输入/输出5 e, |8 @2 G; b, a9 O1 X 1.输入捕捉、 PWM输入捕捉 2.输出比较 p* D& ]% z4 E( V0 m1 j6 H 3.脉冲调制宽度PWM 4.单脉冲模式 独立的IRQ/DMA请求生成器 更新事件 :计数器上溢/下溢、计数器初始化(通过软件或内部/外部触发) 触发事件(计数器启动、停止、初始化或通过内部/外部触发计数) 输入捕获; g9 ]. Z* c% M5 ]- | 输出比较 刹车信号输入 计数方式:和基本定时器一样的,有三种计数器# i% K. { r! j+ \7 M
中心对齐模式常用于PWM生成% \; T: H( I' N% E5 [! T+ a 2 V3 V$ P7 \' ~) D* Y+ w 中心对齐模式分为3种子模式: 模式1:下溢事件产生更新事件 模式2:上溢事件产生更新事件# Y/ H" X7 ]8 s# B! } 模式3:上溢和下溢都产生更新事件6 o& X# l; j% u/ k [ : u+ J9 P3 X# c% x# v, @ 整体结构& t6 J4 \) ~% w" B, W1 |
是不是在高级定时器的结构里面看到了基本计数器的结构啊?从系统时钟的来源到计数寄存器这里前面基本是一样的,高级定时器这里如果要产生更新,必须还要设置重复次数寄存器,在满足一定的条件下才会产生更新,在这里只会产生事件。 ( t3 P }, B. {. b( C 时钟源:高级定时器的时钟来源主要有三种,APB时钟,外部时钟, 其他定时器输出的触发信号。1 X' \( {; M8 E0 j& F4 A
但是在我们写程序的时候只会使用APB线时钟线,该线下的定时器工作原理
, P5 s2 R. @' }( m 系统时钟经过控制器,可以通过触发发出一个信号可用于给其他定时器或者ADC/DAC,然后经过分频得到tim_cnt_ck,然后每来一次,计数器里面的数值就加1,若溢出会产生溢出事件,注意不是和基本定时器一样的。若想要产生更新,要重复次数寄存器RCR写数据,当溢出次数达到设定值+1产生更新事件,可设置为0,溢出等于更新 外部时钟作为时钟源:+ ~* l* R# D5 q- y9 v
外部时钟输入有模式1和模式2" v, M: [$ y! c1 c 模式1由定时器的通道1和通道2产生,然后经过输入滤波器和边沿检测产生tim_ti1fp1和tim_ti1fp2,常用于编码器模式输入3 P% Z$ D. ]6 i8 H5 N) D ) j1 P0 _3 y% z" x8 n- H 注:当输入的信号存在高频干扰的时候,需要对输入信号进行滤波,即进行重新采样,根据采样定律,采样的频率必须大于等于两倍的输入信号输入滤波器,边沿检测,上升沿/下降沿有效,f表示经过滤波器,p表示边沿检测 , E4 z( B( E6 d$ j 模式2由ETR产生,经过极性选择,边沿检测 : 高电平/上升沿有效或者低电平/下降沿有效,分频 系数:1 /2 /4 /8 要求:输出频率小于time_ker_ck的1/4,滤波器 可以设置采样时间,多少个输入频率采样一次,有降频的效果,然后可以通过触发器,也可以通过从模式控制器,这个控制器主要是接收信号。 定时器从模式控制器用于接收除了内部时钟外的信号,该信号用于完成如下控制: 1.复位Reset模式:使用内部时钟作为时钟源,TI1/2外部有效信号复位计数器。CH1触发输入上升沿有效时,计数器复位到默认值0 6 I* u" B0 K8 D7 G1 I6 v f 2.门控Enable模式:使用内部时钟作为时钟源,根据TI1/2外部电平情况运行计数器。当CH1输入为高电平时候,定时器正常计数;当CH1输入为低电平时,停止计数 3.触发Enable模式:使用内部时钟作为时钟源, TI1/2外部触发启动计数器。CH1触发输入上升沿时,定时器启动运行- Z' ]' T" L. j1 \! c+ ` 4.外部时钟模式2+触发模式:使用外部ETR作为时钟源,配合其他(1,2,3)的触发启动模式( { i I5 Z* J- l, A8 q( l 3 ^, p: B+ q2 l' I, R8 D; { v 其他定时器输出的发出信号作为时钟源. D6 b% @& S( Q" j7 p 定时器同步,一个定时器作为主模式控制器,另一个作为从模式控制器,6 Q) F0 B. E8 ^8 |3 I7 b3 k " G6 Y+ k4 a Q- n% O3 m 1.使用一个定时器作为另一个定时器的预分频器
( s2 f4 s# u3 } 2.使用一个定时器使能另一个定时器:例如,使用定时器1的触发信号控制定时器2是否计数- p! W9 }) T( u6 O2 x1 R) G7 Q, a0 z
/ k) H. V2 ^3 q3 V. w 3.使用一个定时器去启动另一个定时器:例如,使用定时器1的更新事件使能定时器2是否计数
4.使用一个外部触发同步地启动2个定时器:例如,当定时器1产生TI1产生触发时,定时器1和定时器2同时启动/ v# H1 Y8 u9 Z Z7 N2 K; b- ` ) ]4 |' C; m$ F) B
二、输入捕获通道原理 输入捕获可以对输入的信号的上升沿,下降沿或者双边沿进行捕获,常用的有测量输入信号的脉宽和测量 PWM 输入信号的频率和占空比这两种 C# x( @# z, W: o3 `) ^ 输入捕获分为普通输入捕获模式和PWM输入模式! b) K! G/ h& l; j/ e
注:同一时刻,某一个引脚只能作为输入/输出,一旦一个引脚是输入/输出,该定时器所有引脚都是输入/输出; V1 c- d( B+ D+ r$ V' h. ]. h- V8 e % I/ M: D& l" `6 Y 1.普通输入捕获' `" `! b5 K& d6 r3 V& v- X# } 当捕获到信号的跳变沿的时候,把计数器 CNT 的值锁存到捕获寄存器 CCR 中,这就是普通输入捕获模式$ O/ C% s5 Q. C 3 {4 r5 \# O6 j1 i% ] 测量脉宽或者频率:" y7 T2 M' p3 M 4 i7 x$ g j$ ?5 r
$ O Y/ p1 l$ t& }/ U) a 测量周期:当捕获通道 TIx 上出现上升沿时,发生第一次捕获,计数器 CNT 的值会被锁存到捕获寄存器 CCR 中,而且还会进入捕获中断,在中断服务程序中记录一次捕获(可以用一个标志变量来记录),并把捕获寄存器中的值读取到 value1 中。当出现第二次上升沿时,发生第二次捕获,计数器 CNT 的值会再次被锁存到捕获寄存器 CCR 中,并再次进入捕获中断,在捕获中断中,把捕获寄存器的值读取到 value3 中,并清除捕获记录标志。利用 value3 和value1 的差值我们就可以算出信号的周期(频率)。 ' p9 Q& `- D u! Y J5 i; t' w 测量脉宽:当捕获通道 TIx 上出现上升沿时,发生第一次捕获,计数器 CNT 的值会被锁存到捕获寄存器 CCR 中,而且还会进入捕获中断,在中断服务程序中记录一次捕获(可以用一个标志变量来记录),并把捕获寄存器中的值读取到 value1 中。然后把捕获边沿改变为下降沿捕获,目的是捕获后面的下降沿。当下降沿到来的时候,发生第二次捕获,计数器 CNT 的值会再次被锁存到捕获寄存器 CCR 中,并再次进入捕获中断,在捕获中断中,把捕获寄存器的值读取到 value2中,并清除捕获记录标志。然后把捕获边沿设置为上升沿捕获7 P+ a# T" s; l: z 在测量脉宽过程中需要来回的切换捕获边沿的极性,如果测量的脉宽时间比较长,定时器就会发生溢出,溢出的时候会产生更新中断,可以在中断里面对溢出进行记录处理 0 U6 E2 t7 ?) n7 T+ M' f 2.PWM模式# p8 v9 h% ^1 h. m! g 测量脉宽和频率还有一个更简便的方法就是使用 PWM 输入模式,该模式是输入捕获的特例,只能使用通道 1 和通道 2, 通道 3 和通道 4 使用不了。与上面那种只使用一个捕获寄存器测量脉宽和频率的方法相比, PWM 输入模式需要占用两个捕获寄存器+ D! y' a4 ]0 ~- i; O1 P 2 N! g' L, G( W* @$ L
$ w- m: ] C `! b! B' @ 当使用 PWM 输入模式的时候,因为一个输入通道(TIx)会占用两个捕获通道(ICx),所以一个定时器在使用 PWM 输入的时候最多只能使用两个输入通道(TIx) PWM 信号由输入通道 TI1 进入,因为是 PWM 输入模式的缘故,信号会被分为两路,一路是 TI1FP1,另外一路是 TI2FP2。 " K( [4 c- Z: Q- B7 L& i 其中一路是周期,另一路是占空比,具体哪一路信号对应周期还是占空比,得从程序上设置哪一路信号作为触发输入,作为触发输入的哪一路信号对应的就是周期,另一路就是对应占空比。' I" N5 |' \9 y p : |- B, l% W+ Y; f& {+ A, x 作为触发输入的那一路信号还需要设置极性,是上升沿还是下降沿捕获,一旦设置好触发输入的极性,另外一路硬件就会自动配置为相反的极性捕获,无需软件配置6 @$ D. `0 C4 A! J i* T 一句话概括就是:选定输入通道,确定触发信号,然后设置触发信号的极性即可,因为是 PWM 输入的缘故,另一路信号则由硬件配置,无需软件配置. M& D9 B2 D$ O! k* N & ~# I1 p% ^; W3 | 注:在上图中,两个ICx信号被映射至同一个TIx输入,这2个ICx信号为边沿有效,但是极性相反) w( A8 o. E( a9 e6 p 6 t2 G* M/ f- m0 p PWM输入模式时序图% W6 l+ N, q U* Z ; n2 I6 F, w0 K: B# x
. Z- f. @' d( o/ G7 ]2 K7 J L 测周期原理:/ \3 P& H ^' E0 j 1.PWM信号由TI1进入,配置TI1FP1为触发信号,上升沿捕获7 V1 ~0 N( k' |+ G/ N8 D 2.当上升沿的时候IC1和IC2同时捕获,计数器CNT清零 $ L/ I& Q9 ~7 U( K! a) A _! Z: Y; Q 3.到了下降沿的时候,IC2捕获,此时计数器CNT的值被锁存到捕获寄存器CCR2中+ b. Q8 L* {2 E: G: B 8 J- X: ]+ S. E- u! z: G9 z 4.到了下一个上升沿的时候,IC1捕获,计数器CNT的值被锁存到捕获寄存器CCR1中7 z2 i0 g C; _6 b+ A3 ~1 g 2 x$ l6 r. c2 s 5.其中CCR2测量的是脉宽,CCR1测量的是周期。- Q+ [9 v4 Q9 G9 x4 \8 M& S: L5 T 输入通道与捕获通道' J1 b5 ]% s4 T% t2 d" r 输入通道:需要被测量的信号从定时器的外部引脚 TIMx_CH1/2/3/4 进入,通常叫 TI1/2/3/4,在后面的捕获讲解中对于要被测量的信号我们都以 TIx 为标准叫法' Y! `, O3 }& H 捕获通道:捕获通道就是图中的 IC1/2/3/4,每个捕获通道都有相对应的捕获寄存器 CCR1/2/3/4,当发生捕获的时候,计数器 CNT 的值就会被锁存到捕获寄存器中 . d# ` Y* t# G, J4 [/ _+ T 输入通道是用来输入信号的,捕获通道是用来捕获输入信号的通道,一个输入通道的信号可以同时输入给两个捕获通道。 比如输入通道 TI1 的信号经过滤波边沿检测器之后的 TI1FP1 和 TI1FP2 可以进入到捕获通道IC1 和 IC2,其实这就是 PWM 输入捕获,只有一路输入信号(TI1)却占用了两个捕获通道(IC1 和 IC2)。当只需要测量输入信号的脉宽时候,用一个捕获通道即可。输入通道和捕获通道的映射关系具体由寄存器 CCMRx 的位 CCxS[1:0]配置" e( @+ s! q& {2 i& C* k3 v 小结:从软件上来说,用 PWM 输入模式测量脉宽和周期更容易,付出的代价是需要占用两个捕获寄存器" a! a4 }: w% h5 d! ~ 7 j, `* h- ?+ c n* ~* I1 C: a- h j 三、输出比较通道原理$ r- c( y( ^- n/ ^ 输出比较功能框图/ e( ], s, n* E- ]6 b
=输出比较就是通过定时器的外部引脚对外输出控制信号,有冻结、将通道 X(x=1,2,3,4)设置为匹配时输出有效电平、将通道 X 设置为匹配时输出无效电平、翻转、强制变为无效电平、强制变为有效电平、 PWM1 和 PWM2 这八种模式1 g* g7 P5 k& I3 V! k* C 模式:, G5 l) V& M6 N& [ 1: (冻结模式)冻结模式。定时器作为普通定时器使用,不使用输出比较功能。 2/3:(比较输出模式1)匹配时输出有效/无效电平模式。如递增计数器,比较寄存器内部数值提前设定好,当计数器相等或者大于比较值时,匹配,产生/不产生有效信号输出。当计数器值小于比较值时,不产生/产生有效信号输出。3 H! L8 i* W0 i6 k, ? 4: (比较输出模式2)电平翻转模式。当匹配时,引脚状态翻转。步进电机控制常用的模式。 5/6:(强制输出模式)强置为无效/有效电平模式。不管比较寄存器和计数器数值,强制设置比较寄存器的输出。: v9 ~5 E$ T$ [; W. B. p3 _ 7/8:(PWM模式) PWM1和PWM2模式。 PWM 输出模式! r: R) _5 @4 f! | M PWM(脉冲宽度调制)模式可以产生一个由TIMx_ARR寄存器确定频率(周期)、由TIMx_CCRx寄存器确定占空比的PWM信号 + G7 S* L9 [6 o% { PWM1 和PWM2 模式区别 ( M# D& X8 d7 G% Z
以 PWM1 模式来讲解,以计数器 CNT 计数的方向不同还分为边沿对齐模式和中心对齐模式。 PWM 信号主要都是用来控制电机,一般的电机控制用的都是边沿对齐模式, FOC 电机一般用中心对齐模式9 D9 @. P9 D& O5 F% `. t PWM 边沿对齐模式1 ^) I0 c) w: x3 b3 b5 q/ H 在递增计数模式下,计数器从 0 计数到自动重载值( TIMx_ARR 寄存器的内容),然后重新从 0 开始计数并生成计数器上溢事件: C4 U2 }3 \7 P) }$ |* z$ ] * X) O) c3 D2 @4 [& T
2 L$ H7 s- Z) l" ]6 `. v 边沿对齐模式下,计数器 CNT 只工作在一种模式,递增或者递减模式。这里我们以CNT 工作在递增模式为例,在中, ARR=8, CCR=4, CNT 从 0 开始计数,当 CNT<CCR 的值 时 , OCxREF 为 有 效的 高 电平 ,于 此同 时, 比 较中 断寄 存器 CCxIF 置 位 。 当CCR=<CNT<=ARR 时, OCxREF 为无效的低电平。然后 CNT 又从 0 开始计数并生成计数器上溢事件,以此循环往复) v& O! \( Z2 K K3 Z) F, i { PWM 中心对齐模式9 {9 V* g, l9 H" j3 ^# [
第一阶段计数器 CNT 工作在递增模式下,从 0 开始计数,当 CNT<CCR 的值时, OCxREF 为有效的高电平,当CCR=<CNT<<ARR 时, OCxREF 为无效的低电平。第二阶段计数器 CNT 工作在递减模式,从 ARR 的值开始递减,当 CNT>CCR 时, OCxREF 为无效的低电平,当 CCR=>CNT>=1时, OCxREF 为有效的高电平 M! ~( t0 |6 d) B* U6 r! \: L 在波形图上我们把波形分为两个阶段,第一个阶段是计数器 CNT 工作在递增模式的波形,这个阶段我们又分为①和②两个阶段,第二个阶段是计数器 CNT 工作在递减模式的波形,这个阶段我们又分为③和④两个阶段" R/ {3 T, R: H% L1 S # q+ K" G, y0 z 中心对齐模式下的波形特征:①和③阶段的时间相等,②和④阶段的时间相等 % U/ a" Z( y: U' A 中心对齐模式又分为中心对齐模式 1/2/3 三种,具体由寄存器 CR1 位 CMS[1:0]配置。具体的区别就是比较中断中断标志位 CCxIF 在何时置 1:中心模式 1 在 CNT 递减计数的时候置 1,中心对齐模式 2 在 CNT 递增计数时置 1,中心模式 3 在 CNT 递增和递减计数时都置 1 输出信号过程 (1)产生参考电平,就是前面说的两种 ; P' j l/ f, I) X, x( x (2)产生死区和最终的输出- R5 x; h4 m' q' z0 a# _
% O4 V+ d/ ~, t p
# D- H5 {0 m } 比如在控制电机正反转时:2 K+ g% ]8 x* O: h) G* @9 w3 W + u& r9 M, X- l# I
3 P- n# }- V& R, M$ W 每个桥的上半桥臂和下半桥臂是是绝对不能同时导通的,但高速的PWM驱动信号在达到功率元件的控制极时,往往会由于各种各样的原因产生延迟的效果,造成某个半桥元件在应该关断时没有及时关断,造成功率元件烧毁" ?- B/ ^2 G4 m1 H6 W9 c 死区就是在上半桥关断后,延迟一段时间再打开下半桥或在下半桥关断后,延迟一段时间再打开上半桥,从而避免功率元件烧毁。这段延迟时间就是死区。! \! C3 R9 r( T1 H. p% k/ @' R |
经验分享 | 基于STM32G4芯片TIM+SPI+DMA应用示例
STM32G47x 双 Bank 模式下在线升级
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
【经验分享】STM32G4之基本定时器
NUCLEO-G474RE 扩展 LSM6DSO 传感器数据融合实操演示全解析
经验分享 | STM32G474 高精度定时器同步功能全解析 从内部互联到多芯片协同的实现方案
经验分享 | STM32G4双BANK启动应用演示
STM32G4 LPTIM+DMAMUX 实现并行输出应用示例
实战经验 | LAT1578 SAU对NSC分区的影响
经验分享 | 利用TIMER定时和捕获功能实现编解码演示
微信公众号
手机版