0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

STM32单片机 来源:STM32单片机 作者:STM32单片机 2022-08-29 09:53 次阅读

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 进行搭配,可以比较灵活的生成波形。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PWM
    PWM
    +关注

    关注

    114

    文章

    5181

    浏览量

    213802
  • 定时器
    +关注

    关注

    23

    文章

    3246

    浏览量

    114720
  • stm32l031
    +关注

    关注

    0

    文章

    2

    浏览量

    2261

原文标题:工程师笔记|使用 TIMER 输出比较模式输出相移信号

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    为什么用THS6012搭建的电路会产生相移呢?

    为什么我用THS6012搭建的电路会产生相移呢?频率越高相移越严重,应该怎么解决呢?
    发表于 09-19 07:38

    转:HRTIMER产生多相相移信号

    HRTIMER产生多相相移信号 前言STM32F334内部集成了高精度Timer,最高主频4.6GHz,灵活的控制用于产生数字电源等产品的PWM控制
    发表于 07-12 15:15

    请问运算放大器信号放大后会产生相移是什么原因

    各位大虾好,最近本人在做一个微弱信号放大的设计,设计要求如下:①有两路需要放大的信号频率3Hz以下,幅度2~3mV,放大后幅值1.5V左右(多级放大)。②按照设计需求,两路
    发表于 08-19 06:04

    函数/任意波形发生器的带限噪声信号产生方法介绍

    /任意波形发生器利用其配套的任意波形编辑软件就可以直接实现满足不同需求的各种带限噪声信号的输出,真实模拟通信系统内部和实际信道中的干扰环境,极大地方便了对系统进行有效、可靠的分析。  本文着重RIGOL DG系列函数/任意波形发生器
    发表于 07-22 07:12

    RFID读写器系统介绍MDO4000的跨域调试应用

    如何测量系统中时间相关的时域和频域信号RFID读写器系统介绍MDO4000的跨域调试应用
    发表于 04-09 06:18

    DAC介绍AMS-Design数模混合电路仿真的方法是什么?

    DAC介绍AMS-Design数模混合电路仿真的方法是什么?混合电路仿真有哪几种方法?分
    发表于 06-22 07:00

    L298N介绍电机驱动模块的使用方法

    电机驱动模块在电子制作中会经常使用到,下面L298N型号的模块介绍其使用方法。 模块引脚说
    发表于 12-30 07:47

    STM32 Nucleo的相关资料分享

    在实验室找到一块 STM32 的开发板,型号是STM32 Nucleo-L031K6。趁着十一假期,入门一下,顺便随便记点东西。NUCLEO-L031K6 | Mbedhttps
    发表于 02-11 06:05

    求助,能否获得指向NUCLEO-L031K6的正确pdf原理图的链接

    NUCLEO-L031K6 文档页面上,有一个包含 ST Nucleo 原理图的压缩文件。不幸的是,这些原理图适用于不同的 Nucleo 板。我能否获得指向 NUCLEO-L031
    发表于 01-12 08:09

    NUCLEO-L031K6 ST-link未被识别是何原因?

    我最近购买了一块 NUCLEO-L031K6 开发板,当通过 USB ST-Link 连接时无法识别。我还有另外 2 个 st-link,它们工作起来很有魅力,所以有驱动程序
    发表于 01-29 08:08

    求助,关于运算放大器信号放大后会产生相移的问题

    相移误差越小越好,因为最终要求的数据就是两路信号的相位差。 ③两束信号放大都产生相移后,如果两路信号相位差的误差能够小于1/50000能
    发表于 11-20 06:54

    STM32_Nucleo-32_boards_UM1956_User_manual

    The STM32 Nucleo-32 board (NUCLEO-F031K6, NUCLEO-F042K6, NUCLEO-F303K8, NU
    发表于 03-17 17:59 24次下载

    HRTIMER产生多相相移信号

    HRTIMER产生多相相移信号
    发表于 03-20 10:11 8次下载

    基于NUCLEO-L031K6微控制器的参考设计

    View the reference design for NUCLEO-L031K6. http://www.elecfans.com/soft/ has thousands of reference designs to help bring your project to life.
    发表于 08-31 10:58 1次下载
    基于<b class='flag-5'>NUCLEO-L031</b>K6微控制器的参考设计

    ADC对连续外部信号进行采样的概念和用法-M031/M032

    ADC对连续外部信号进行采样的概念和用法-M031/M032
    的头像 发表于 08-10 16:21 970次阅读
    ADC对连续外部<b class='flag-5'>信号</b>进行采样的概念和用法-<b class='flag-5'>以</b>M<b class='flag-5'>031</b>/M032<b class='flag-5'>为</b><b class='flag-5'>例</b>