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

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

3天内不再提示

工程师笔记 | 使用 TIMER 输出比较模式输出相移信号

jf_pJlTbmA9 来源:STM32单片机 作者:STM32单片机 2023-09-18 10:58 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

wKgaomUD3vWAduTwAAJYZw8L61I475.png

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

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

wKgZomUD3vaAQJImAACa2i7L31w082.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 所示。

wKgaomUD3vqAYqVPAAI56OYLxrk948.png

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

➢ Direction: Memory To Peripheral

➢ Mode: Circular

➢ Data Width: Word

具体配置如图 4 所示

wKgZomUD3vuAWmh_AAFMbn5Ltr4081.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 由上面计算方式同理可得:

wKgZomUD3v2AQoQIAABcapiq70M129.png

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

wKgaomUD3v6AEGUcAAA-5VaifZk887.png


wKgaomUD3v-AMqKnAAAPmnjWj8U237.png

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

wKgZomUD3wGAWvphAAB5aYLz3E0901.png

6. 测试结果

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

wKgZomUD3wKAbsBuAACxpYAjSYc554.png

7、小结

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

来源:STM32单片机
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理


审核编辑 黄宇

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

    关注

    31

    文章

    5588

    浏览量

    129051
  • PWM
    PWM
    +关注

    关注

    116

    文章

    5847

    浏览量

    223783
  • 定时器
    +关注

    关注

    23

    文章

    3360

    浏览量

    121728
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    硬件工程师面试必会:10个核心考点#硬件设计 #硬件工程师 #电路设计 #电路设计

    硬件工程师
    安泰小课堂
    发布于 :2025年09月23日 18:00:33

    做了电子工程师之后,最好拍的视频出现了#硬件设计 #电子DIY #电子工程师

    电子工程师
    安泰小课堂
    发布于 :2025年06月24日 17:45:57

    (仰天长啸)为什么受伤的总是硬件工程师...#MDD#MDD辰达半导体 #电子工程师

    电子工程师
    MDD辰达半导体
    发布于 :2025年04月27日 18:21:47

    问,成为硬件工程师需要几只手?#硬件工程师 #YXC晶振 #扬兴科技 #搞笑

    硬件工程师
    扬兴科技
    发布于 :2025年04月25日 17:15:37

    硬件工程师:回答我!#回答我 #硬件工程师 #YXC晶振 #扬兴科技

    硬件工程师
    扬兴科技
    发布于 :2025年03月25日 18:46:59

    一招拿捏电子工程师#被AI拿捏了 #电子工程师 #电子电工

    电子工程师
    安泰小课堂
    发布于 :2025年03月25日 17:30:51

    电流输出 vs 电压输出:两种传感器输出模式有什么区别?

    在工业自动化和数据采集领域,传感器扮演着至关重要的角色,它们将各种物理量(如温度、压力、流量等)转换为可被测量和分析的电信号。而传感器的输出信号主要分为两种模式:电流
    的头像 发表于 02-08 18:21 2060次阅读
    电流<b class='flag-5'>输出</b> vs 电压<b class='flag-5'>输出</b>:两种传感器<b class='flag-5'>输出</b><b class='flag-5'>模式</b>有什么区别?

    电子工程师的经验分享

    电子工程师在实际工作中积累了丰富的经验,这些经验对于新手工程师和电子专业的学生具有重要的参考价值。 一、电路设计经验 电路设计核心思想 电路设计的核心在于理解电路的基本原理和功能需求。在设计电路
    的头像 发表于 01-14 10:14 1061次阅读

    有将SDI单端输入信号转成差分信号输出的芯片吗?

    如题,请教各位工程师,有将SDI单端输入信号转成差分信号输出的芯片可以推荐吗?感谢!
    发表于 01-07 07:46

    TFP401APZP为什么没有HSYNC输出

    笔记本电脑作为HDMI信号源时,TFP401APZP没有HSYNC信号输出,VSYNC,ODCK输出正常。 将
    发表于 12-23 07:57

    ADS1299内部测试信号调试OK,正常测试信号信号输出全为7FFFFF,为什么?

    错,但内部测试信号可正常显示,而正常输入不行? 4、寄存器配置方面比较EVM与自己配置的寄存器表,配置相一致,因此排除以上因素,还是未能解决问题,希望TI的工程师与论坛的各位朋友们能够帮忙解答,万分感谢!
    发表于 12-19 06:12