以NUCLEO-L031为例介绍产生相移信号的方法

发布者:leader5最新更新时间:2024-03-19 来源: elecfans关键字:STM32L031 手机看文章 扫描二维码
随时随地手机看文章

1、前言

客户想要使用 STM32L031 产生两个特定的 PWM 波,这两个波形频率相同,占空比相同,但相位不同。经过验证,使用定时器的输出比较模式可以产生这种带相移的 PWM 波形。


下面以 STM32L031 的 TIM2 为例来介绍使用产生相移信号的方法。


2、概述

在未使能预装载寄存器时(OCxPE=0),使用输出比较模式,可以随时通过软件更新

TIM_CCRx 寄存器的值,以控制输出波形。

DMA 的循环模式,可以在最后一次数据传输完成后,自动重新加载初始编程值,内部地址寄存器会重新加载基址值,进入下一个循环。

使用输出比较模式配合 DMA 的循环模式可以不断更新 TIMx_CCR 寄存器的值,从而输出可控的波形。

下面以 NUCLEO-L031 为例介绍产生相移信号的方法。

3、目标波形

为了便于观察,令 PWM 波的周期为 100ms,占空比为 20%。以 TIM2_CH1 输出的波形的为基准,其为 0 度相移。

➢ TIM2_CH1: 相移 0 度,占空比为 20%

➢ TIM2_CH2: 相移 90 度,占空比为 20%

➢ TIM2_CH3: 相移 180 度,占空比为 20%

➢ TIM2_CH4: 相移 270 度,占空比为 20%

4. 使用 STM32CubeMX 进行配置

使用 STM32CubeMX 进行基础参数的配置。

这里配置时钟为 32MHz,如图 1 所示。

02316108-26f8-11ed-ba43-dac502259ad0.png

配置时钟源为内部时钟,因为 TIM2_CH1 为基准信号,直接配置为 PWM 输出即可。

TIM2_CH2、TIM2_CH3 和 TIM2_CH4 配置为输出比较模式,如图 2 所示。

025dcdb0-26f8-11ed-ba43-dac502259ad0.png

配置 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 所示。

027766d0-26f8-11ed-ba43-dac502259ad0.png

添加 TIM2_CH2、TIM2_CH3 和 TIM2_CH4 的 DMA,并进行配置,配置的内容都相同,配置如下:

➢ Direction: Memory To Peripheral

➢ Mode: Circular

➢ Data Width: Word

具体配置如图 4 所示

02aa49ec-26f8-11ed-ba43-dac502259ad0.png

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'

表 1 由上面计算方式同理可得:

02ca7b2c-26f8-11ed-ba43-dac502259ad0.png

在 main.c 文件中需要建立三个数组,将 channel2~4 的两次 CCR 值存入这三个数组中,具体如下所示:

02d5b32a-26f8-11ed-ba43-dac502259ad0.png

02edc550-26f8-11ed-ba43-dac502259ad0.png

然后在 mian 函数中添加如下代码。使 channel1 输出 PWM 波,配置 channel2~4 在 DMA 模式下使用输出比较模式进行输出。

030152b4-26f8-11ed-ba43-dac502259ad0.png

6. 测试结果

测试结果如下图所示,4 个 channel 产生的 PWM 波的周期都为 100ms,占空比都为20%,测试出来的 channel2~4 的相移与设计目标波形一致。

031d6d0a-26f8-11ed-ba43-dac502259ad0.png

7、小结

使用定时器的输出比较模式与 DMA 进行搭配,可以比较灵活的生成波形。


关键字:STM32L031 引用地址:以NUCLEO-L031为例介绍产生相移信号的方法

上一篇:基于意法半导体Arm Cortex-M7 MCU STM32H743 的语音辨识解决方案
下一篇:BOOT1和BOOT0引脚的状态

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved