cubmx+定时器(单脉冲+PWM模式)学习3

1PWM模式

1.1基本概念

1.1.1PWM模式的简介

  • PWM(Pulse Width Modulation)脉冲宽度调制,在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速等领域.
  • PWM参数:

频率 = 1 / TS:是指1秒钟内信号从高电平到低电平再回到高电平的次数(一个周期);也就是说一秒钟PWM有多少个周期

占空比 = TON / TS :是一个脉冲周期内,高电平的时间与整个周期时间的比例

周期TS如果频率为50Hz ,也就是说一个周期是20ms 那么一秒钟就有 50次PWM周期

  •  PWM 输出就是对外输出脉宽(即占空比)可调的方波信号,PWM波周期或频率由TIM_ARRx寄存器的值决定,占空比由比较寄存器TIM_CCRx寄存器的值决定。
  • PWM模式设置:通过向TIMx_CCMRx寄存器中的OCxM位写入110 (PWM 模式 1)或111 (PWM 模式 2),可以独立选择各通道 (每个 OCx输出对应一个 PWM)的PWM 模式。
  • 预寄存器的装载: 必须通过将TIMx_CCMRx 寄存器中的 OCxPE 位置 1 使能相应预装载寄存器,最后通过将 TIMx_CR1寄存器中的 ARPE 位置 1 使能自动重载预装载寄存器(在递增计数或中心对齐模式下)。 由于只有在发生更新事件时预装载寄存器才会传送到影子寄存器, 因此启动计数器之前,必须通过将 TIMx_EGR 寄存器中的 UG 位置 1 来初始化所有寄存器
  • OCx 极性设置: 可使用TIMx_CCER寄存器的CCxP位来编程。既可以设为高电平有效,也可
    以设为低电平有效。通过CCxE、CCxNE、MOE、OSSI和OSSR 位(TIMx_CCER和
    TIMx_BDTR寄存器)的组合使能OCx输出。有关详细信息,请参见TIMx_CCER寄存器
    说明。
1.1.2计数模式的选择
  • 根据TIMx_CR1 寄存器中的CMS位状态,定时器能够产生边沿对齐模式或中心对齐模式的 PWM 信号

  • 在递增计数模式下,计数器从0计数到自动重载值(TIMx_ARR 寄存器的内容),然后重新从 0 开始计数并生成计数器上溢事件
  • 当TIMx_CR1寄存器中的DIR位为低时执行递增计数。以 PWM 模式1为例。只要 TIMx_CNT < TIMx_CCRx,PWM参考信号 OCxREF便为高电平,否则为低电平。如果TIMx_CCRx中的比较值大于自动重载值(TIMx_ARR中),则 OCxREF保持为“1”。如果比较值为0,则 OCxRef 保持为“0
  • 递减模式下:在PWM 模式1下,只要TIMx_CNT > TIMx_CCRx,参考信号 OCxRef 即为低电平, 否则其为高电平。如果TIMx_CCRx中的比较值大于 TIMx_ARR中的自动重载值,则
    OCxREF保持为“1”。此模式下不可能产生0%的PWM 波形

  • 在中心对齐模式下,计数器CNT是工作做递增/递减模式下。开始的时候,计数器CNT从0 开始计数到自动重载值减 1(ARR-1),生成计数器上溢事件;然后从自动重载值开始向下计数到1并生成计数器下溢事件。之后从0开始重新计数。
  • PWM1模式的中心对齐波形,ARR=8,CCR=4。第一阶段计数器CNT工作在递增模式下从0开始计数,当CNT<CCR的值时,OCxREF为有效的高电平,当 CCR=<CNT<=ARR时, OCxREF 为无效的低电平。第二阶段计数器CNT工作在递减模式,从 ARR 的值开始递减,当CNT>CCR时,OCxREF为无效的低电平,当 CCR=>CNT>=1 时,OCxREF为有效的高电平
  • 中心对齐模式又分为中心对齐模式1/2/3三种,具体由寄存器CR1位CMS[1:0] 配置。具体的区别就是比较中断中断标志位 CCxIF 在何时置 1:中心模式1在CNT递减计数的时候置1,中心对齐模式2在CNT递增计数时置1,中心模式3在CNT递增和递减计数时都置1
 1.1.3死区的简介
  • 无效电平:当REF引脚处于无效电平时,它不会提供任何参考电平。这意味着与REF引脚相关的模拟电路将无法正常工作,因为没有参考电平可供使用。通常情况下,REF引脚被配置为输入模式或禁用状态时,处于无效电平
  • 有效电平:当REF引脚处于有效电平时,它提供一个稳定的参考电平。这个参考电平可以是内部产生的固定电压,也可以是外部提供的参考电压。有效电平使得与REF引脚相关的模拟电路能够正常工作,并且可以进行准确的模数数模转换操作

  • 高级控制定时器(TIM1 和 TIM8)可以输出两路互补信号,并管理输出的关断与接通瞬间。 这段时间通常称为死区。每路输出可以独立选择输出极性(主输出 OCx 或互补输出OCxN)。可通过对TIMx_CCER寄存器中的CCxP和CCxNP位执行写操作来完成极性选择
  • CCxE CCxNE 位同时置 1 并且 MOE 位置 1 (如果存在断路)时,将使能死区插入TIMx_BDTR寄存器中的 DTG[7:0] 位用于控制所有通道的死区生成。将基于参考波形OCxREF 生成 2 个输出 OCx OCxN 如果OCx和OCxN为高电平有效:
    ● 输出信号OCx与参考信号相同,只是其上升沿相对参考上升沿存在延迟。
    ● 输出信号OCxN与参考信号相反,并且其上升沿相对参考下降沿存在延迟。
  • 如果延迟时间大于有效输出( OCx OCxN )的宽度,则不会产生相应的脉冲。

1.2cubmx配置和HAL库

1.2.1cubmx配置

  • 这里面的参数已经在前面介绍了,这里就不说了。(Run Mode和Idle Mode其实就是OSSI和OSSR)
  • Fast mode是快速比较输出使能。即勾选时快速输出引脚的电平和提高PWM信号的更新速度和精度。
1.2.2HAL库API功能函数

(1)打开选定通道的PWM功能 (查询方式)

HAL_StatusTypeDef HAL_TIM_PWM_Start (TIM_HandleTypeDef *htim, uint32_t Channel)
htim:TIM_HandleTypeDef (定时器控制结构体)
Channel:选定的通道
TIM_CHANNEL_1
TIM_CHANNEL_2
TIM_CHANNEL_3
TIM_CHANNEL_4
返回值:HAL_OK
(2)打开选定通道的互补通道的PWM功能(查询方式)(仅高级定时器具有此功能)
HAL_StatusTypeDef HAL_TIMEx_PWMN_Start (TIM_HandleTypeDef *htim, uint32_t Channel)
互补通道没有通道 TIM_CHANNEL_4
(3)关闭选定通道的PWM功能(查询方式)
HAL_StatusTypeDef HAL_TIM_PWM_Stop (TIM_HandleTypeDef *htim, uint32_t Channel
(4)关闭选定通道的互补通道的PWM功能(查询方式)(仅高级定时器具有此功能)
HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop (TIM_HandleTypeDef *htim, uint32_t Channel)
(5)PWM中断函数的开启
HAL_StatusTypeDef HAL_TIM_PWM_Start_IT (TIM_HandleTypeDef *htim, uint32_t Channel) 打开选定通道的PWM功能 (中断方式)
HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT (TIM_HandleTypeDef *htim, uint32_t Channel) 打开选定通道的互补通道的PWM功能(中断方式)(仅高级定时器具有此功能)
(6)PWM中断函数的关断
HAL_StatusTypeDef HAL_TIM_PWM_Stop_IT (TIM_HandleTypeDef *htim, uint32_t Channel) 关闭选定通道的PWM功能 (中断方式)
HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT (TIM_HandleTypeDef *htim, uint32_t Channel) 关闭选定通道的互补通道的PWM功能(中断方式)(仅高级定时器具有此功能)
(7) PWM的DMA函数的开启
HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA (TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) 打开选定通道的PWM (DMA方式)
pData: 指向改变比较值数据的缓冲 区的指针
Length: 传输次数
返回值: HAL_OK、 HAL_BUSY、 HAL_ERROR
HAL_StatusTypeDef HAL_TIM_PWMN_Start_DMA (TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length)
(8)PWM的DMA函数的关断
HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA (TIM_HandleTypeDef *htim, uint32_t Channel)
返回值:仅拥有HAL_OK
HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA (TIM_HandleTypeDef *htim, uint32_t Channel)
(9)PWM的中断回调函数
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
Pulsd Finish函数的触发是产生于计数器比较完成时,也就是PWM模式1(向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平)下,高电平结束的时候。这是PWM下的溢出,不同模式下调用的情况不同,而Period Elapsed是更新事件下的回调函数,即ARR溢出。

2.单脉冲模式

2.1基本概念

2.1.1单脉冲模式的简介
例如,用户希望达到这样的效果:在TI2输入引脚检测到正沿时,经过tDELAY的延迟,在OC1上产生一个长度为tPULSE的正脉冲

  • 单脉冲模式 (OPM) 是上述模式的一个特例。在这种模式下,计数器可以在一个激励信号的
    触发下启动,并可在一段可编程的延时后产生一个脉宽可编程的脉冲。
  • 可以通过从模式控制器启动计数器。可以在输出比较模式或PWM模式下生成波形。 将 TIMx_CR1寄存器中的OPM位置1,即可选择单脉冲模式。这样,发生下一更新事件UEV 时,计数器将自动停止
  • 只有当比较值与计数器初始值不同时,才能正确产生一个脉冲
  • t_{DELAY}由写入TIMx_CCR1寄存器的值定义。 t_{PULSE}由自动重载值与比较值 (TIMx_ARR - TIMx_CCR1) 之差来定义。
  • 由于仅需要1个脉冲(单脉冲模式),因此应向TIMx_CR1寄存器的 OPM 位写入“1”, 以便在发生下一更新事件(计数器从自动重载值返回到 0)时使计数器停止计数。TIMx_CR1寄存器中的 OPM位置“0”时,即选择重复模式。
  • 在单脉冲模式下,TIx输入的边沿检测会将CEN位置1,表示使能计数器。然后,在计数器值与比较值之间发生比较时,将切换输出。但是,完成这些操作需要多个时钟周期,这会限制可能的最小延迟(t_{DELAY}最小值) ​​​
  • 如果要输出延迟时间最短的波形,可以将TIMx_CCMRx寄存器中的OCxFE位置 1。这样会强制OCxRef(和 OCx)对激励信号做出响应,而不再考虑比较的结果。其新电平与发生比较匹配时相同。仅当通道配置为PWM1或PWM2模式时,OCxFE才会起作用。
​​​​​​​2.1.2.RCR和单脉冲触发模式的使用

  • RCR=2,意味着发生RCR+1次益出时产生更新事件,计数器停止计数,后续不再输出PWM波形。最后输出的电平为低电平。
  • 当计数器在第3个周期计到ARR时发生溢出,产生更新事件,计数器不再计数。但计数器溢出后重装还是照例执行,此时计数器被重装为0,因为计数器被停止,所以该0值保持不变。这样的话,后续的比较结果总是CNT<CCR值,按照PWM模式2的输出特性,输出自然应该是低电平并保持

2.2HAL库

2.2.1单脉冲模式的HAL库的功能函数

(1)开启/关断单脉冲功能 (轮询方式)

HAL_StatusTypeDef HAL_TIM_OnePulse_Start (TIM_HandleTypeDef *htim, uint32_t OutputChannel)
HAL_StatusTypeDef HAL_TIM_OnePulse_Stop (TIM_HandleTypeDef *htim, uint32_t OutputChannel)
(2)开启/关断选定通道互补通道单脉冲功能(轮询方式)(仅高级定时器具备此功能)
HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start (TIM_HandleTypeDef *htim, uint32_t OutputChannel)
HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop (TIM_HandleTypeDef *htim, uint32_t OutputChannel)
(3)开启/关断 单脉冲功能(中断方式)
HAL_StatusTypeDef HAL_TIM_OnePulse_Start_IT (TIM_HandleTypeDef *htim, uint32_t OutputChannel)
HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT (TIM_HandleTypeDef *htim, uint32_t OutputChannel)
(4)开启/关断选定通道互补通道单脉冲功能(中断方式)(仅高级定时器具备此功能)​​​​​​​
HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT (TIM_HandleTypeDef *htim, uint32_t OutputChannel)
HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT (TIM_HandleTypeDef *htim, uint32_t OutputChannel)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值