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

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

3天内不再提示

看完这一篇,HPM6000系列PWM波尽在掌握(下)

先楫半导体HPMicro 2023-06-01 15:28 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

概 述

在进行电机类、电源类应用开发时,如何使用PWM定时器模块灵活、高效的实现所需 PWM波形的输出,是众多开发者关注的问题。在上篇文章里,我们介绍了PWM定时器模块内的一些概念,以及如何生成普通PWM的过程。本篇内容将继续介绍互补PWM、同步 PWM、错相 PWM以及PWM如何使用ACMP封波等内容。

互补PWM

关于相同的代码部分,此处不再重复讲解,请参考《上篇》的普通PWM的讲解。

efe2b496-ff48-11ed-ba01-dac502259ad0.jpgf00496b0-ff48-11ed-ba01-dac502259ad0.jpg

此处设置了 3 个比较器:cmp_config[0]与 cmp_config[1]用来生成中心对称 PWM,cmp_config[2]作为 PWM 影子寄存器的更新事件源,当 CNT 等于 cmp_config[2]时,影子寄存器写入寄存器内生效。

f02c3800-ff48-11ed-ba01-dac502259ad0.jpg

互补 PWM 对的配置,配置左死区宽度为 8000 个 half_clock,右死区宽度为 16000 个 half_clock。

f04f8530-ff48-11ed-ba01-dac502259ad0.jpg

设置 cmp_config[2]作为 PWM 影子寄存器的更新事件源,启动计数器。

f06d255e-ff48-11ed-ba01-dac502259ad0.jpg

通过修改 CMP0 与 CMP1 的值,每 100ms 更新一次互补 PWM 占空比。运行结果如下:

f0878cdc-ff48-11ed-ba01-dac502259ad0.jpg

互补PWM

同步PWM

本节实验设计:使用 PWM0 的比较器比较事件去做 PWM1、PWM2、PWM3 的同步事件。故输出波形上看,PWM1、PWM2、PWM3 应完全同步,PWM0 与其则不同步。代码如下:

f0ad19de-ff48-11ed-ba01-dac502259ad0.jpg

使能 4 个 PWM 定时器的 SYNCI 信号

f0c95400-ff48-11ed-ba01-dac502259ad0.jpg

设置 STA 与 RLD。

f0ef16cc-ff48-11ed-ba01-dac502259ad0.jpg

cmp_config[0]与 cmp_config[1]用来做中心对称 PWM 所需的比较器。

f11751fa-ff48-11ed-ba01-dac502259ad0.jpg

cmp_config[2]用来做使 PWM 影子寄存器生效的比较器。

f12f41e8-ff48-11ed-ba01-dac502259ad0.jpg

cmp_config[3]设置在 PWM0 CH8 上,用来产生比较事件,同步 PWM1、PWM2、PWM3。

f14c5f94-ff48-11ed-ba01-dac502259ad0.jpg

互补 PWM 的死区设置与输出设置。

f17e8780-ff48-11ed-ba01-dac502259ad0.jpg

设置 PWM0 CH0 CH1 互补输出,同时设置 PWM1 CH8 使用 CMP3 产生比较事件。

f1a996aa-ff48-11ed-ba01-dac502259ad0.jpg

设置 PWM1、PWM2、PWM3 互补输出。

f1d69312-ff48-11ed-ba01-dac502259ad0.jpg

启动计数器。

以下代码是对互联管理器的配置。配置 PWM0 CH8 的下降沿输出到TRGM0_OUTX0 上,同时 TRGM0_OUTX0 作为 TRGM1、TRGM2、TRGM3的输入,路由到 PWM1、PWM2、PWM3 的 SYNCI 信号上。

f1f47634-ff48-11ed-ba01-dac502259ad0.jpg

波形如下:

f21cb112-ff48-11ed-ba01-dac502259ad0.jpg

可见 PWM1、PWM2、PWM3 是完全同步的,PWM0 则与其有 20ns 的不同步。

同步PWM

错相 PWM

本节实验设计:使用 SYNT 实现 PWM0、PWM1、PWM2、PWM3 错相90°。代码如下:

f24f479e-ff48-11ed-ba01-dac502259ad0.jpgf28134ac-ff48-11ed-ba01-dac502259ad0.jpgf2a6f2be-ff48-11ed-ba01-dac502259ad0.jpgf2ca4aa2-ff48-11ed-ba01-dac502259ad0.jpgf2f85f82-ff48-11ed-ba01-dac502259ad0.jpg

以上代码请参考上文 “同步PWM” 章节的讲解,主要目的是生成 4 对互补PWM。

f318db72-ff48-11ed-ba01-dac502259ad0.jpg

配置 TRGM,将 SYNT CH0 的比较事件路由到 PWM0 的 SYNCI 信号上,将 SYNT CH1 的比较事件路由到 PWM1 的 SYNCI 信号上,将 SYNT CH2 的21 / 24先楫半导体比较事件路由到 PWM2 的 SYNCI 信号上,将 SYNT CH3 的比较事件路由到PWM3 的 SYNCI 信号上。

f342ccc0-ff48-11ed-ba01-dac502259ad0.jpg

配置 SYNT,分别设置 SYNT CH0 比较器比较值为 0,SYNT CH1 比较器比较值为 reload/4,SYNT CH2 比较器比较值为 reload/2,SYNT CH4 比较器比较值为 reload*3/4。

波形如下:

f3651b4a-ff48-11ed-ba01-dac502259ad0.jpg

错相PWM

PWM+ACMP 封波

本节实验设计:使用两个片上 ACMP 对目标模拟电压进行监控,当电压超过 1.65V 时停止 PWM 输出。其基本思路为,将 ACMP 的输出信号通过互联管理器 TRGM 路由到 PWM 的内部 Fault 信号上,当 Fault 信号有效时 PWM波停止输出(故障保护功能)。

代码如下:

f385e2d0-ff48-11ed-ba01-dac502259ad0.jpg

初始化 PWM 引脚,初始化 DAC 时钟与引脚(使用 DAC 输出模拟电压到ACMP 上模拟过压)。

f3a57424-ff48-11ed-ba01-dac502259ad0.jpg

输出互补 PWM 波。

f3cabd1a-ff48-11ed-ba01-dac502259ad0.jpg

设置 Fault 信号高电平有效;使能 FaultI0 与 FaultI1 有效(PWM 共 4 内2 外 fault 信号,哪些信号生效可选)。

f3e5af8a-ff48-11ed-ba01-dac502259ad0.jpg

设置 DAC 输出为直接模式,12bit DAC 输出范围 0~4095,4030 约为3.247V。该部分代码请直接参考 DAC 例程。

f40fbee2-ff48-11ed-ba01-dac502259ad0.jpg

配置 ACMP,使能 ACMP2 与 ACMP3。

f4350e5e-ff48-11ed-ba01-dac502259ad0.jpg

配置互联管理器,将 ACMP2 与 ACMP3 的输出信号路由到 PWM 的FaultI0 与 FaultI1 上去。

f4563994-ff48-11ed-ba01-dac502259ad0.jpg

acmp_config 函数源码如下:

f47764de-ff48-11ed-ba01-dac502259ad0.jpg

代码中将 ACMP 的正极输入选择为 IO 引脚,负极输入选择为 ACMP 内部专用 DAC,参考电压设置为 0x80,即 1.65V。

当 IO 引脚电压 3.247V 时(来自于外设 DAC 输出),ACMP 正极电压超过负极电压 1.65V,ACMP 输出有效,为高电平;经过互联管理器路由到PWM 的 Fault 信号上;由于 PWM 模块内配置了 Fault 信号为高电平有效,因此此时 Fault 信号有效,PWM 波形停止输出。

当 IO 引脚电压 0V 时(将引脚与 GND 短接),ACMP 正极电压未超过负极电压 1.65V,ACMP 输出无效,PWM 波形正常输出。

PWM+ACMP

小 结

本文首先介绍了 PWM 定时器内各模块的基本概念与功能,而后对 PWM的使用由浅入深依次以代码实例进行讲解。可以看到,PWM 的使用只要配置好 STA、RLD、CMPx、影子寄存器等即可实现输出;如果有同步需求或与其它外设协同使用需求,则主要通过互联管理器 TRGM 的配置进行实现。


比较经典的例程还包括使用 PWM 触发 ADC 采样,先楫半导体 SDK 中已经有完整的实例与代码,各位开发者可以到官网下载研究,并欢迎大家多多交流。

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

    关注

    185

    文章

    18710

    浏览量

    261417
  • PWM
    PWM
    +关注

    关注

    116

    文章

    5847

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    HPM monitor studio 只能在 hpm芯片+hpm_sdk 的组合才能用吗?

    使用 hpm6200evk开发板,但未使用hpm_sdk。 然后编译的固件elf无法在hpm monitor studio解析成功。所以说必须要使用hpm_sdk 才可以使用
    发表于 08-28 09:36

    科普|看懂毫米雷达,这一就够啦!

    今天这篇文章,我们来聊聊最近很火的个概念——“毫米”。█什么是毫米?毫米(mmWave),是种频率在30GHz至300GHz之间的
    的头像 发表于 07-26 04:06 1449次阅读
    科普|看懂毫米<b class='flag-5'>波</b>雷达,<b class='flag-5'>这一</b><b class='flag-5'>篇</b>就够啦!

    hpm6364内部flash使用时的openocd配置问题.

    xpi0 hpm_xpi 0x80000000 0x2000000 1 1 $_TARGET0 0xF3040000 0x7 0x1000 这样改是不是flash大小设置为32MB了,但hpm6364的内部flash是4MB的.还有最后两个参数是什么意思?有大佬讲解
    发表于 07-12 19:48

    看懂毫米雷达,这一就够啦!

    今天这篇文章,我们来聊聊最近很火的个概念——“毫米”。█什么是毫米?毫米(mmWave),是种频率在30GHz至300GHz之间的
    的头像 发表于 07-09 19:02 1755次阅读
    看懂毫米<b class='flag-5'>波</b>雷达,<b class='flag-5'>这一</b><b class='flag-5'>篇</b>就够啦!

    重磅更新 | HPM_SDK v1.10.0 发布

    版本更新概况[New]增加HPM5E00系列MCU以及HPM5E00EVK支持增加flash_xip_hybrid构建,在该模式AXI_SRAM被用作FLASH前256KB的缓存,位
    的头像 发表于 07-02 15:07 1117次阅读
    重磅更新 | <b class='flag-5'>HPM</b>_SDK v1.10.0 发布

    支持HPM6P00/HPM5E00系列!HPMicro Manufacturing Tool v0.6.0发布

    HPM6P00、HPM5E00系列SoC的烧写及其它操作,新增HPM6E00、HPM5E00固件;新增verify-checksum及que
    的头像 发表于 06-04 08:28 1184次阅读
    支持<b class='flag-5'>HPM</b>6P00/<b class='flag-5'>HPM</b>5E00<b class='flag-5'>系列</b>!HPMicro Manufacturing Tool v0.6.0发布

    零死角玩转STM32——中级

    (EEPROM) 6、SPI(2M-Flash) 7、PWM(软件仿真) 8、CAN(Looback) 纯分享贴,有需要可以直接下载附件获取完整资料! (如果内容有帮助可以关注、点赞、评论支持一下哦~)
    发表于 05-21 13:56

    路灯单灯控制器:让每盏路灯装上智慧的大脑尽在掌控

    路灯单灯控制器:让每盏路灯装上智慧的大脑尽在掌控
    的头像 发表于 05-19 08:26 831次阅读
    路灯单灯控制器:让每<b class='flag-5'>一</b>盏路灯装上智慧的大脑<b class='flag-5'>尽在</b>掌控

    【强势上新】HPM5E00:EtherCAT运动控制MCU,先楫半导体再拓工业总线产品新版图

    2025年5月6日上海|高性能微控制器及嵌入式解决方案提供商“上海先楫半导体科技有限公司”(先楫半导体,HPMicro)正式发布新代EtherCAT运动控制MCU——HPM5E00系列。该
    的头像 发表于 05-06 11:09 979次阅读
    【强势上新】<b class='flag-5'>HPM</b>5E00:EtherCAT运动控制MCU,先楫半导体再拓工业总线产品新版图

    LTC3886输出PWM异常的原因?

    尝试过按照datasheet第50页的建议,去修改电阻来控制抖动,但是没有任何效果,现在因为OUT0PWM不稳的问题导致这一路输出的噪声很大,请问各位大佬还有什么办法可以让OUT0这一
    发表于 04-17 06:59

    重磅更新 | 先楫半导体HPM_SDK v1.9.0 发布

    版本更新概况[New]增加HPM6P00系列MCU以及hpm6p00evk支持[New]增加了开发板已知问题说明[Update]将全系列开发板VCore电压调节至1.275V,
    的头像 发表于 04-02 08:31 827次阅读
    重磅更新 | 先楫半导体<b class='flag-5'>HPM</b>_SDK v1.9.0 发布

    hpm_apps v1.8.0上线:HPM6200四轴伺服驱控方案重磅发布!

    hpm_apps v1.8.0上线:HPM6200四轴伺服驱控方案重磅发布!
    的头像 发表于 02-12 08:04 1229次阅读
    <b class='flag-5'>hpm</b>_apps v1.8.0上线:<b class='flag-5'>HPM</b>6200四轴伺服驱控方案重磅发布!

    基于HPM_SDK_ENV开发应用程序的升级处理

    基于HPM_SDK_ENV开发应用程序的方式HPM_SDK_ENV是先楫半导体MCU的Windows集成开发环境,其包含HPM_SDK,工具链,依赖工具(cmake,ninja,openocd等
    的头像 发表于 02-08 13:38 1447次阅读
    基于<b class='flag-5'>HPM</b>_SDK_ENV开发应用程序的升级处理

    先楫半导体发布高性能HPM6E8Y系列MCU

    近日,上海先楫半导体科技有限公司,国内领先的高性能微控制器及嵌入式解决方案提供商,推出了专为机器人运动与控制设计的高性能MCU产品——HPM6E8Y系列这一创新产品为当前蓬勃发展的机器人市场带来了全新的活力。
    的头像 发表于 01-23 15:40 1170次阅读

    精准驱动,尽在掌握 —— 探索伺服编码器的无限可能

    ,让自动化生产线的每步操作都尽在掌握之中。 伺服编码器,顾名思义,是与伺服系统紧密结合的编码器。它通过将机械位移转换为电信号,实现对伺服电机位置、速度、加速度等参数的精确测量与反馈。在伺服系统中,编码器如
    的头像 发表于 01-06 08:36 655次阅读