你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用 TIMER 输出比较模式输出相移信号

[复制链接]
STMCU小助手 发布时间:2022-9-16 15:22
1、前言
客户想要使用 STM32L031 产生两个特定的 PWM 波,这两个波形频率相同,占空比相同,但相位不同。经过验证,使用定时器的输出比较模式可以产生这种带相移的 PWM 波形。
下面以 STM32L031 的 TIM2 为例来介绍使用产生相移信号的方法。
, V3 Z, j4 ^$ f: q0 b2 @
2、概述
在未使能预装载寄存器时(OCxPE=0),使用输出比较模式,可以随时通过软件更新
TIM_CCRx 寄存器的值,以控制输出波形。
DMA 的循环模式,可以在最后一次数据传输完成后,自动重新加载初始编程值,内部地址寄存器会重新加载基址值,进入下一个循环。
使用输出比较模式配合 DMA 的循环模式可以不断更新 TIMx_CCR 寄存器的值,从而输出可控的波形。
下面以 NUCLEO-L031 为例介绍产生相移信号的方法。

) t+ P) Z1 \4 L% j. s5 m7 `3 a# h4 x; p# a  V
3、目标波形
为了便于观察,令 PWM 波的周期为 100ms,占空比为 20%。以 TIM2_CH1 输出的波形的为基准,其为 0 度相移。
  ➢ TIM2_CH1: 相移 0 度,占空比为 20%
  ➢ TIM2_CH2: 相移 90 度,占空比为 20%
  ➢ TIM2_CH3: 相移 180 度,占空比为 20%
  ➢ TIM2_CH4: 相移 270 度,占空比为 20%

' E( c5 L( y0 m/ Y# K* }  a( }* Z) t" w2 ^
4. 使用 STM32CubeMX 进行配置
使用 STM32CubeMX 进行基础参数的配置。
这里配置时钟为 32MHz,如图 1 所示。

& B. K4 I7 u0 q* j# v
微信图片_20220916152040.png

; g, S& S1 Q+ a+ x$ P) q* }" i* O9 T
配置时钟源为内部时钟,因为 TIM2_CH1 为基准信号,直接配置为 PWM 输出即可。
TIM2_CH2、TIM2_CH3 和 TIM2_CH4 配置为输出比较模式,如图 2 所示。
微信图片_20220916152032.png
2 I! }& f, W0 O/ e3 }& I( o& |

3 P$ G) X! Q# H- Y0 v7 }8 S( T
配置 TIM2 的预分频值与计数周期,配置计数周期为 100,计数模式配置为"Up"。配置channel1 的模式为"PWM mode 1",因为占空比为 20%,计数周期为 100,所以 CCR1 寄存器配置为 20(也即 Channel1 的 Pulse 配置为"20"),极性配置为"High"。Channel2、Channel3 和 Channel4 的模式都配置为"Toggle on match"(匹配时翻转电平),极性配置为"low",CCR 不需要配置,因为会通过 DMA 自动写入。具体配置如图 3 所示。
微信图片_20220916151943.png
* g5 ]- |* `2 q/ d' b+ I

& ^" \+ U, q9 i
添加 TIM2_CH2、TIM2_CH3 和 TIM2_CH4 的 DMA,并进行配置,配置的内容都相同,配置如下:
  ➢ Direction: Memory To Peripheral
  ➢ Mode: Circular
  ➢ Data Width: Word
具体配置如图 4 所示
微信图片_20220916151933.png
5 }' [- Z0 b- p! f+ C0 n
$ W# R6 ^, t" q6 P2 C* @
5. 修改代码
由 STM32CubeMX 生成代码之后,需要在生成的代码中添加一些处理。
首先需要计算 channel2、channel3 和 channel4 的 CCR 值。以 channel2 为例:配置的计数周期为 100,初始极性为 low,当 CNT 计数值与 CCR 寄存器匹配的时候,输出电平发生翻转,所以为了实现与 channel1 占空比相同的波形,需要翻转两次电平。
第一次翻转的 CCR 可以通过相位差进行计算,第二次翻转的 CCR 值可以通过占空比和第一次翻转的 CCR 值这两个条件进行计算。Channel2 第一次翻转的 CCR 值为: "100 x (90°/360°) = 25";第二次翻转的 CCR 值为:"25 + (20% x 100) = 45"
3 H9 A/ J5 Q. z; p7 Z
表 1 由上面计算方式同理可得:
8 b, `0 r5 A& u  w1 L3 f
微信图片_20220916151928.png

% V$ b3 [1 c6 I6 u
在 main.c 文件中需要建立三个数组,将 channel2~4 的两次 CCR 值存入这三个数组中,具体如下所示:
微信图片_20220916151912.png
微信图片_20220916151924.png

7 q& k, k: G  h" e; h# S" S
然后在 mian 函数中添加如下代码。使 channel1 输出 PWM 波,配置 channel2~4 在 DMA 模式下使用输出比较模式进行输出。
微信图片_20220916151909.png
1 \3 x9 H5 x6 R$ Z% g
( \4 J3 S, [5 W4 @' f8 M( [
6. 测试结果
测试结果如下图所示,4 个 channel 产生的 PWM 波的周期都为 100ms,占空比都为20%,测试出来的 channel2~4 的相移与设计目标波形一致。
微信图片_20220916151906.png

3 ]% w% q( a# R" ^" a1 ~  x
7 X3 k3 D4 G0 y; [
7、小结
使用定时器的输出比较模式与 DMA 进行搭配,可以比较灵活的生成波形。

# P: `, l6 \& Z& k' U& y
收藏 评论0 发布时间:2022-9-16 15:22

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版