STM32CubeMX 定时器非对称PWM模式+中心对齐计数

定时器PWM输出有一种非对称PWM模式的输出形式,搭配中心对称计数方式可实现单个定时器输出两路相位差180°的PWM,而如果与其他定时器的PWM搭配,则相对其他定时器的PWM可以做出单路PWM 0-180°移相。

这里涉及到(Asymmetric PWM mode)的用法,在STM32的芯片手册中有介绍到。

通过上述说明可知,要想输出一个非对称PWM就需要用到两个PWM通道,且同一个定时器最多输出两个非对称PWM。而且需要用到中心对齐的计数方式,即定时器分别完成一次向上计数和一次向下计数才算作完成一次计数周期,这样称为中心对齐的计数方式。

通道1和通道2共同控制一个非对称PWM,通道3和通道4共同控制一个非对称PWM。在两个非对称PWM极性相同的情况下,CCR1和CCR3控制工作电平在向上计数时的起始点,CCR2和CCR4控制工作电平在向下计数时的结束点。

上述原理可知,由于使用到中心对称,占空比必定会大于等于50%。而且当占空比超过一定值时,移相角度无法固定,所以如果同一个定时器想要输出固定移向角度的PWM,那么其移向角度/360° + 占空比需要小于等于100%。

实现示例:

①在CubeMX中做出如下配置:

然后生成代码。

②在代码初始化中添加代码:

上述代码最终呈现的结果是输出两对相位差90°的50%占空比的互补PWM。

### STM32定时器中央对齐计数模式工作原理 在STM32微控制器中,定时器支持多种计数模式,其中包括中心对齐计数模式。此模式适用于需要更精细控制脉宽调制(PWM)信号的应用场景,在该模式下,计数方向会在每次达到自动重装载值(ARR)后反转。 具体来说,在中心对齐模式下,计数器先向上计数至最大值(即ARR),再向下计数回到0。这一过程使得每个完整的计数周期内的上下沿位置相对于周期中部是对称的[^1]。 #### 不同类型的中心对齐模式 存在三种不同类型的中心对齐模式: - **模式1**:计数器从0增加到ARR,然后减少回0。 - **模式2**:计数器从0增加到ARR减一,接着减少回1。 - **模式3**:计数器从1增加到ARR,随后减少回0。 这些差异影响着比较匹配事件的发生时机及其频率。 ### 配置教程 为了设置STM32定时器为中央对align计数模式并启动它,以下是具体的步骤说明及相应的代码片段: ```c #include "stm32f1xx_hal.h" // 假定已经初始化了TIM_HandleTypeDef句柄htim1 void TIM_ConfigCenterAlignedMode(TIM_HandleTypeDef *htim){ // 设置为中心对齐模式 htim->Instance->CR1 &= ~TIM_CR1_DIR; // 清除DIR位,确保初始状态为上数 __HAL_TIM_SET_COUNTER(htim, 0); // 将当前计数值设为零 uint32_t tmpsmcr = htim->Instance->SMCR; MODIFY_REG(tmpsmcr, TIM_SMCR_SMS, // 修改SMS字段以选择合适的编码方式 (uint32_t)(TIM_encoder_mode << POSITION_VAL(TIM_SMCR_SMS))); htim->Instance->EGR |= TIM_EGR_UG; // 更新请求寄存器写入UG位来刷新影子寄存器的内容 /* 配置特定的中心对齐模式 */ switch(center_aligned_mode){ case CENTER_ALIGNED_MODE1: htim->Instance->CR1 |= TIM_CR1_CMS_0 | TIM_CR1_ARPE; break; case CENTER_ALIGNED_MODE2: htim->Instance->CR1 |= TIM_CR1_CMS_1 | TIM_CR1_ARPE; break; case CENTER_ALIGNED_MODE3: htim->Instance->CR1 |= TIM_CR1_CMS_1 | TIM_CR1_CMS_0 | TIM_CR1_ARPE; break; default: Error_Handler(); } HAL_TIM_Base_Start_IT(htim); } ``` 上述函数`TIM_ConfigCenterAlignedMode()`接收一个指向`TIM_HandleTypeDef`结构体指针作为参数,并根据传入的不同模式选项配置指定的中心对齐计数模式。注意这里的伪码仅用于示意目的;实际应用时需依据具体情况调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暮梧寒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值