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

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

3天内不再提示

如何利用STM32G474芯片的高精度定时器实现两对互补输出

单片机 来源:茶话MC 作者:Miler 2021-08-23 11:55 次阅读

有人利用STM32G474芯片高精度定时器实现两对互补输出,即用到TIMA和TIMB两个定时单元分别输出两对互补信号

可是他发现两个定时器单元输出的同频PWM波形存在着明显的相位差,就像下面的截图一样。

0440eed8-02a4-11ec-9bcf-12bb97331649.png

但是他希望二者的输出完全同步且无相位差,那有没有办法做到呢?

这是可以的。我们让HRTIM的定时单元基于某个触发事件来同步启动。对于HRTIM来说,可以利用外部触发输入信号或通用定时器TIM1的触发输出信号来同步HRTIM各定时单元的启动。这里就如何使用TIM1的触发输出作为HRTIM的同步信号让HRTIM的定时器单元同步启动做下简单介绍。

HRTIM的各个单元间的同步操作是通过HRTIM里的Master TIMER进行管理的,所以要实现HRTIM各单元间的同步就必须启用Master TIMER,显然,除了启用TIMA/TIMB外,还得使能Master TIMER。

关于同步配置可以参考下面截图:

0471b360-02a4-11ec-9bcf-12bb97331649.png

这里对Master TIMER的配置主要是开启它,让它能工作,能管理同步事件即可。

经过上面的配置,再对TIMA/TIMB做“同步事件启动定时器的配置”后,二者就能做到同步启动了,加上二者配置了相同的PER周期值,这样就可以输出如下图所示的同步同相信号了。

04c8d3a2-02a4-11ec-9bcf-12bb97331649.png

如果说除了TIMA/TIMB的输出保持同步同相外,还希望中途不时修改周期及占空比且不破坏同相,那又怎么办呢? 即如何在输出频率和占空比可调的情况下仍然保持着两个定时器的输出同步呢?

我们可以开启TIMA或TIMB的更新中断,在其中任意一个定时器的更新中断服务程序里同时修改两个定时器的计数周期值和比较值,并开启预装功能,让参数在下一个溢出更新事件到来时生效,这样就可以做到既能调整定时器的周期值和比较值,又能保证二者的输出同步。

下面简单介绍下实现过程。

Master TIMER的配置没啥特别的,主要是让它工作起来,能让HRTIM的定时单元的同步起作用。TIMA和TIMB的配置这里基本一样,二者的配置差别主要体现在比较值不一样而已。

来看看TIMA的相关配置。重点留意下面截图中下划线标识的地方。主要配置内容包括设置PER、CMP1的参数,开启同步启动、使能预装功能、启用TIM更新中断,对TIMA-TA1/TA2的输出进行配置。

0504d032-02a4-11ec-9bcf-12bb97331649.png

上面是TIMA的基本配置,因为TIMB的配置跟TIMA的相比,除了CMP值不同外,其它基本一样,这里就不重复贴图了。

配置完成后,生成HAL类初始化代码。然后添加如下用户代码。

HAL_HRTIM_WaveformCountStart_IT(&hhrtim1,HRTIM_TIMERID_TIMER_A);//使能TIMA

HAL_HRTIM_WaveformOutputStart(&hhrtim1 , HRTIM_OUTPUT_TA1);

HAL_HRTIM_WaveformOutputStart(&hhrtim1 , HRTIM_OUTPUT_TA2);

HAL_HRTIM_WaveformCountStart_IT(&hhrtim1, HRTIM_TIMERID_TIMER_B); //使能TIMB

HAL_HRTIM_WaveformOutputStart(&hhrtim1 , HRTIM_OUTPUT_TB1);

HAL_HRTIM_WaveformOutputStart(&hhrtim1 , HRTIM_OUTPUT_TB2);

HAL_TIM_Base_Start(&htim1);//让TIM1产生同步触发信号

上面的黄色代码行,基本功能就是开启TIM1,它的TRGO输出信号作为HRTIM-TIMA/TIMB的同步启动信号。如果没有这行代码,此时的TIMA/TIMB是不会工作的。

我在TIMA的更新中断服务程序里修改TIMA/TIMB的PER/CMP的值,查看输出结果。

extern uint16_t Interrupt_Count;

#define HRTIMReg (HRTIM1-》sTimerxRegs)

void HRTIM1_TIMA_IRQHandler(void)

{

/*USER CODE BEGIN HRTIM1_TIMA_IRQn 0 */

/*USER CODE END HRTIM1_TIMA_IRQn 0 */

HAL_HRTIM_IRQHandler(&hhrtim1,HRTIM_TIMERINDEX_TIMER_A);

/*USER CODE BEGIN HRTIM1_TIMA_IRQn 1 */

Interrupt_Count++;

if(Interrupt_Count 《 20000)

{

HRTIMReg[HRTIM_TIMERINDEX_TIMER_A].PERxR= 0xa000;

HRTIMReg[HRTIM_TIMERINDEX_TIMER_A].CMP1xR= 0x2000;

HRTIMReg[HRTIM_TIMERINDEX_TIMER_B].PERxR= 0xa000;

HRTIMReg[HRTIM_TIMERINDEX_TIMER_B].CMP1xR= 0x3000;

}

else if(Interrupt_Count 《 40000)

{

HRTIMReg[HRTIM_TIMERINDEX_TIMER_A].PERxR= 0x9000;

HRTIMReg[HRTIM_TIMERINDEX_TIMER_A].CMP1xR= 0x4000;

HRTIMReg[HRTIM_TIMERINDEX_TIMER_B].PERxR= 0x9000;

HRTIMReg[HRTIM_TIMERINDEX_TIMER_B].CMP1xR= 0x5000;

}

else

{

HRTIMReg[HRTIM_TIMERINDEX_TIMER_A].PERxR= 0x7000;

HRTIMReg[HRTIM_TIMERINDEX_TIMER_A].CMP1xR= 0x2000;

HRTIMReg[HRTIM_TIMERINDEX_TIMER_B].PERxR= 0x7000;

HRTIMReg[HRTIM_TIMERINDEX_TIMER_B].CMP1xR= 0x5000;

}

}

经过测试,即使修改了两个定时器单元的计时周期和占空比,二者的同步一直都可以保持得很好。关于这个话题就交流到这里,分享以上内容供有需要的人士参考,祝君好运!

编辑:jq

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

    关注

    23

    文章

    3146

    浏览量

    112034
  • CMP
    CMP
    +关注

    关注

    6

    文章

    136

    浏览量

    25663
  • Tim
    Tim
    +关注

    关注

    0

    文章

    76

    浏览量

    17710

原文标题:STM32高精度定时器定时单元间的同步问题

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

收藏 人收藏

    评论

    相关推荐

    STM32G474除以0会进错误中断,为什么?

    我的编译环境为STM32CubeIDE,芯片STM32G474,我发现程序中如果有除以0的操作时,会跑到错误中断中。请问能不能通过设置,可以让程序不要跑进错误中断,直接等于当前变量类型的最大值
    发表于 04-01 06:32

    STM32G030定时器16 17和1同步输出如何实现

    STM32G030系列中只有定时器1 16和17三个定时器可以输出带死区时间互补pwm,我想实现
    发表于 03-27 06:45

    STM32G4如何利用ADC-DMA对全桥电路实现闭环控制?

    开始接触STM32G474,用于对一个全桥电路实现闭环控制,里面包括PI控制,准PR控制,和一个相位环;在学习完输出pwm和ADC-DMA个模块后无法将
    发表于 03-22 06:40

    STM32G474的DAC4无输出怎么解决?

    STM32G474 的DAC4采用定时器4触发dma,OUT1连接到比较5,测试下来 DAC4没输出,是配置哪里有问题吗 定时器4的配置:
    发表于 03-08 07:08

    STM32如何使用定时器实现微秒(us)级延时?

    如何使用定时器实现微秒级延时的步骤: 步骤 1:配置定时器 首先,需要选择一个适合的定时器。大多数STM32微控制器都配备了多个
    的头像 发表于 11-06 11:05 3011次阅读

    基于ST STM32G474的500W全桥移相零电压切换直流-直流转换器数字电源方案

    基于ST STM32G474的500W全桥移相零电压切换直流-直流转换器数字电源方案
    的头像 发表于 10-27 09:47 1600次阅读
    基于ST <b class='flag-5'>STM32G474</b>的500W全桥移相零电压切换直流-直流转换器数字电源方案

    STM32G474 逐波限流保护的实现

    STM32G474 逐波限流保护的实现
    的头像 发表于 10-26 18:16 1628次阅读
    <b class='flag-5'>STM32G474</b> 逐波限流保护的<b class='flag-5'>实现</b>

    STM32H7芯片系列中定时器同步启动并输出PWM波形的实现方法

    本文主要研究了STM32H7芯片系列中定时器同步启动并输出PWM波形的实现方法。
    的头像 发表于 10-24 14:56 682次阅读
    <b class='flag-5'>STM32</b>H7<b class='flag-5'>芯片</b>系列中<b class='flag-5'>定时器</b>同步启动并<b class='flag-5'>输出</b>PWM波形的<b class='flag-5'>实现</b>方法

    高精度定时器与高级控制定时器 PWM 封波后再恢复的区别

    高精度定时器与高级控制定时器 PWM 封波后再恢复的区别
    的头像 发表于 10-17 16:52 318次阅读
    <b class='flag-5'>高精度</b><b class='flag-5'>定时器</b>与高级控制<b class='flag-5'>定时器</b> PWM 封波后再恢复的区别

    STM32 HRTIM Burst输出模式应用演示

    有人使用STM32G474芯片的片上高精度定时器HRTIM,他想使用其输出功能的Burst Mode。但不知如何使用,想找找参考例程。我这里
    的头像 发表于 10-13 09:07 2281次阅读
    <b class='flag-5'>STM32</b> HRTIM Burst<b class='flag-5'>输出</b>模式应用演示

    高精度定时器Push_Pull模式输出逻辑

    电子发烧友网站提供《高精度定时器Push_Pull模式输出逻辑.pdf》资料免费下载
    发表于 09-19 15:00 0次下载
    <b class='flag-5'>高精度</b><b class='flag-5'>定时器</b>Push_Pull模式<b class='flag-5'>输出</b>逻辑

    高精度定时器的同步功能

    电子发烧友网站提供《高精度定时器的同步功能.pdf》资料免费下载
    发表于 09-19 14:17 0次下载
    <b class='flag-5'>高精度</b><b class='flag-5'>定时器</b>的同步功能

    应用笔记 | 高精度定时器中single-shot计数模式不工作

    关键字:高精度定时器,Single-shot 计数模式 目录预览 1 问题提出  2 问题分析 3 解决办法 4 小结 1. 问题提出 客户使用STM32G474高精度
    的头像 发表于 08-09 17:45 422次阅读
    应用笔记 | <b class='flag-5'>高精度</b><b class='flag-5'>定时器</b>中single-shot计数模式不工作

    Stm32G474,DMA传输全部完毕后如何产生中断并调运回调函数?

    Stm32G474,DMA传输全部完毕后,需要产生中断并调运回调函数完成相关操作。请问我如何处理?没有看到常规的回调函数
    发表于 08-04 12:49

    基于STM32芯片三路互补PWM输出的设计实现

    目的:使用Stm32高级定时器TIM1。配置中心对齐模式输出三路互补PWM。
    的头像 发表于 07-21 16:26 5089次阅读
    基于<b class='flag-5'>STM32</b><b class='flag-5'>芯片</b>三路<b class='flag-5'>互补</b>PWM<b class='flag-5'>输出</b>的设计<b class='flag-5'>实现</b>