HPM6E00:PWM V2使用指南

news2024/11/24 13:35:54

先楫推出的HPM6E00系列芯片,PWM功能升级到了V2版本。和V1版本不同的是,V2版本的每组PWM模块包含4个独立的PWM生成模块,每个PWM生成模块包含一个counter和4个比较器,可以生成4组频率不同的PWM波。每个PWM生成模块,对应生成两个PWM输出通道。不同于PWM V1的将多个比较器分配到一个PWM输出通道的方式。PWM V2的一个PWM生成模块,4个比较器通过设置比较器的值来控制2个PWM通道的值,可以单独控制,也可以成对控制。

PWM V2同样支持故障保护功能,通过输入IO来停止PWM的发波。最多支持16个IO,直接作为故障信号的触发源,这个mux在PWM内部。

下面通过PWM V2的例程,讲解PWM V2控制单通道PWM的原理。

以生成PWM 通道1为例:通过影子寄存器0来设置PWM周期,比较器0和比较器1控制PWM channel 0,比较器2和比较器3控制PWM channel 1。比较器2的值来自影子寄存器3,比较器3的值来自影子寄存器4。当PWM开始计数时,计数值达到比较器2和比较器3的值的时候,进行电平翻转。达到counter的值时重新进行计数,不会进行电平翻转。例程中,比较器3的值固定为reload,通过改变比较器2的值来改变占空比。

void generate_edge_aligned_waveform(void)
{
    uint32_t duty, duty_step;
    bool increase_duty_cycle = true;

    pwmv2_disable_counter(PWM, pwm_counter_0);
    pwmv2_reset_counter(PWM, pwm_counter_0);
    pwmv2_shadow_register_unlock(PWM);

    pwmv2_set_shadow_val(PWM, PWMV2_SHADOW_INDEX(0), reload, 0, false);
    pwmv2_set_shadow_val(PWM, PWMV2_SHADOW_INDEX(1), reload + 1, 0, false);
    pwmv2_set_shadow_val(PWM, PWMV2_SHADOW_INDEX(2), reload, 0, false);
    pwmv2_set_shadow_val(PWM, PWMV2_SHADOW_INDEX(3), reload >> 1, 0, false);
    pwmv2_set_shadow_val(PWM, PWMV2_SHADOW_INDEX(4), reload, 0, false);

    pwmv2_counter_select_data_offset_from_shadow_value(PWM, pwm_counter_0, PWMV2_SHADOW_INDEX(0));
    pwmv2_counter_burst_disable(PWM, pwm_counter_0);
    pwmv2_set_reload_update_time(PWM, pwm_counter_0, pwm_reload_update_on_reload);

    pwmv2_select_cmp_source(PWM, PWMV2_CMP_INDEX(0), cmp_value_from_shadow_val, PWMV2_SHADOW_INDEX(1));
    pwmv2_select_cmp_source(PWM, PWMV2_CMP_INDEX(1), cmp_value_from_shadow_val, PWMV2_SHADOW_INDEX(2));
    pwmv2_select_cmp_source(PWM, PWMV2_CMP_INDEX(2), cmp_value_from_shadow_val, PWMV2_SHADOW_INDEX(3));
    pwmv2_select_cmp_source(PWM, PWMV2_CMP_INDEX(3), cmp_value_from_shadow_val, PWMV2_SHADOW_INDEX(4));

    pwmv2_shadow_register_lock(PWM);
    //pwmv2_disable_four_cmp(PWM, BOARD_APP_PWM_OUT1);
    pwmv2_disable_four_cmp(PWM, BOARD_APP_PWM_OUT2);
    //pwmv2_channel_enable_output(PWM, BOARD_APP_PWM_OUT1);
    pwmv2_channel_enable_output(PWM, BOARD_APP_PWM_OUT2);
    pwmv2_enable_counter(PWM, pwm_counter_0);
    pwmv2_start_pwm_output(PWM, pwm_counter_0);

    //pwmv2_shadow_register_unlock(PWM);
    //pwmv2_set_shadow_val(PWM, PWMV2_SHADOW_INDEX(1), 0, 0, false);
    //pwmv2_shadow_register_lock(PWM);

    //pwmv2_shadow_register_unlock(PWM);
    //pwmv2_set_shadow_val(PWM, PWMV2_SHADOW_INDEX(4), 0, 0, false);
    //pwmv2_shadow_register_lock(PWM);

    //board_delay_ms(1000);

    // 占空比100%,PWM默认低电平,CMP2先翻转
    pwmv2_shadow_register_unlock(PWM);
    pwmv2_set_shadow_val(PWM, PWMV2_SHADOW_INDEX(3), 2, 0, false);
    pwmv2_shadow_register_lock(PWM);
    board_delay_ms(1000);

    // 占空比50%
    pwmv2_shadow_register_unlock(PWM);
    pwmv2_set_shadow_val(PWM, PWMV2_SHADOW_INDEX(3), reload/2, 0, false);
    pwmv2_shadow_register_lock(PWM);
    board_delay_ms(1000);

    // 占空比75%
    pwmv2_shadow_register_unlock(PWM);
    pwmv2_set_shadow_val(PWM, PWMV2_SHADOW_INDEX(3), reload/4, 0, false);
    pwmv2_shadow_register_lock(PWM);
    board_delay_ms(1000);

    pwmv2_disable_counter(PWM, pwm_counter_0);
    pwmv2_reset_counter(PWM, pwm_counter_0);
    pwmv2_shadow_register_unlock(PWM);


}

PWM故障保护:

void pwm_fault_async(void)
{
    pwmv2_async_fault_source_config_t fault_cfg;

    fault_cfg.async_signal_from_pad_index = BOARD_APP_PWM_FAULT_PIN;
    fault_cfg.fault_async_pad_level = pad_fault_active_high;
    pwmv2_config_async_fault_source(PWM, BOARD_APP_PWM_OUT1, &fault_cfg);
    pwmv2_config_async_fault_source(PWM, BOARD_APP_PWM_OUT2, &fault_cfg);
    pwmv2_set_fault_mode(PWM, BOARD_APP_PWM_OUT1, pwm_fault_output_0);
    pwmv2_set_fault_mode(PWM, BOARD_APP_PWM_OUT2, pwm_fault_output_0);
    pwmv2_enable_fault_from_pad(PWM, BOARD_APP_PWM_OUT1);
    pwmv2_enable_fault_from_pad(PWM, BOARD_APP_PWM_OUT2);
}
int main(void)
{
    uint32_t freq;
    board_init();
    init_pwm_pins(PWM);
    init_pwm_fault_pins();
    printf("pwm example\n");

    freq = clock_get_frequency(PWM_CLOCK_NAME);
    reload = freq / 10000 * PWM_PERIOD_IN_MS - 1;

    pwm_fault_async();
    printf("\n\n>> Test force PWM output on P%d and P%d\n", PWM_OUTPUT_PIN1, PWM_OUTPUT_PIN2);
    pwm_force_output();
    printf("\n\n>> Generate edge aligned waveform\n");
    printf("Two waveforms will be generated, PWM P%d is the target waveform\n", PWM_OUTPUT_PIN1);
    printf("whose duty cycle will be updated from 0 - 100 and back to 0; PWM P%d is a reference\n", PWM_OUTPUT_PIN2);
    generate_edge_aligned_waveform();

    printf("test done\n");
    while (1) {
        ;
    }
    return 0;
}

 程序测试结果:测试占空比

 

 

故障保护功能:给故障管脚输入高电平,PWM发波立即停止。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2129838.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

​​​​通过给定一个全屏的位置得到该位置处是哪一个控件、 遍历窗口中的每一个元素

通过给定一个全屏的位置得到该位置处是哪一个控件(以下方法) [static] QWidget *QApplication::widgetAt(const QPoint &point) 场景:通过位置获取该位置处的widget后,然后进行判断,是不是某个或某些控件&#x…

韩语中的多义词 (치다)柯桥学韩语到蓝天广场附近

치다 1. 表示用毛笔、铅笔等点点、划线或者绘图。 예: 밑줄을 치다. 划底线 중요한 부분에 동그라미를 쳤다. 在重要的部分画上圆圈。 2. 表示倾倒少量液体或者粉末之类的东西。 예: 싱거우니 소금을 쳐야겠다. 味道淡,得再撒点盐。 기계에 기름을 치다. 给机…

小众创新组合!LightGBM+BO-Transformer-LSTM多变量回归交通流量预测(Matlab)

小众创新组合!LightGBMBO-Transformer-LSTM多变量回归交通流量预测(Matlab) 目录 小众创新组合!LightGBMBO-Transformer-LSTM多变量回归交通流量预测(Matlab)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现LightGBMBO-Transformer-L…

陈坤2024行走的力量 走向山野感受距离自然更近的地方

近日,由陈坤发起的心灵建设类项目“行走的力量”在西藏林芝圆满完成,今年陈坤和行者们重返西藏,在海拔3500-4700的高原行走了6天5夜,从城市走向山间,感受自然里的生活,用行走的方式,让自己慢下来…

【C++ Primer Plus习题】15.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream> #include "sales.h"…

第二期: 第三节 裸机代码如何烧写

这个 过程其实 需要在 编写了 驱动之后&#xff0c; 再进行。 因为 要烧写 代码&#xff0c; 你必须 要有一份&#xff0c; 可以烧写的代码。 这里比较重要的是 secureCRT 的安装流程。 这里忘记怎么安装的了。 大致就是 &#xff0c; 先安装 secureCRT , 然后 在破解。不破…

博弈论专题一(NIM游戏)

Nim游戏 重点结论&#xff1a;对于一个Nim游戏的局面(a1,a2,...,an)&#xff0c;它是P-position当且仅当a1^a2^...^an0&#xff0c;其中^表示位异或(xor)运算。 (本篇只做简单的结论描述,详细证明过程请看这篇博客) Nim和 堆物品&#xff0c;每堆 ai 个&#xff0c;两个玩家…

Linux系统:chown命令

1、命令详解&#xff1a; chown命令用于设置文件所有者和文件关联组的命令&#xff0c;全称为change directory。在Linux当中默认文件均有拥有者&#xff0c;可以利用 chown 将指定文件的拥有者改为指定的用户或组&#xff0c;输入参数时用户可以是用户名或者用户 ID&#xff0…

零基础如何学会Appium自动化测试?

前言 appium是一款移动自动化测试工具&#xff0c;经常被用于实现UI自动化测试&#xff0c;其可支持安卓和IOS两大平台&#xff0c;还支持多种编程&#xff0c;因而得到了广泛的应用。此处便是立足于安卓平台&#xff0c;借助appium工具&#xff0c;使用python语言实现简单的自…

GUI编程09:鼠标监听事件、模拟画图工具

视频链接&#xff1a;11、鼠标监听事件、模拟画图工具_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1DJ411B75F?p11&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 模拟画图工具的实现逻辑图&#xff1a; 实现代码&#xff1a; package com.yundait.lesson03;impo…

大模型分离架构学习记录

GPU Direct GPU 网络的情况已经发生了很大变化。每个 GPU 都有自己的内部互联&#xff0c;例如 NVIDIA 的 A100 或 H800&#xff0c;它们内部的 NVLink 互联可以达到 600GB 甚至 900GB。这种内部互联与外部以太网网络集群设计之间存在耦合关系。GPU 是单机多网卡的&#xff0c…

Mini打印机复刻过程(外设绘制)

充电管理 充电管理模块采用ME4054BM5G-N 典型应用电路 ME4054B-N的典型应用电路中&#xff0c;输入为4.5V-6.5V&#xff0c;用于给4.2V的锂电池充电。关键元件包括&#xff1a; LED指示灯&#xff1a;通过1kΩ电阻限流&#xff0c;显示充电状态。2kΩ电阻&#xff08;PROG引脚…

视频孪生市场有望达千亿级

近日&#xff0c;中国互联网协会数字孪生技术工委会副主任委员、智汇云舟创始人兼总裁周舟对数字孪生技术的市场潜力与发展前景进行了深度剖析。她表示&#xff0c;在国家政策与全球数字化转型的双重推动下&#xff0c;数字孪生技术发展迅速&#xff0c;市场潜力巨大&#xff0…

如何将任何文本语料转换为知识图谱?

转自&#xff1a;吴建明利驰软件 几个月前&#xff0c;基于知识的问答系统&#xff08;Knowledge Base Question Answering&#xff0c;KBQA&#xff09;还是个新概念。 现在&#xff0c;随着大型语言模型&#xff08;LLMs&#xff09;的发展&#xff0c;带有检索增强生成&am…

实用类工具!目前5款很火的AI写论文网站测评

在当今科技飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;技术已经深入到各个领域&#xff0c;包括学术研究和论文写作。AI论文写作工具的出现极大地提高了写作效率&#xff0c;帮助学者们快速生成高质量的论文内容。以下是五款非常受欢迎且功能强大的AI论文写…

MySQL零基础入门教程-8.1 表的连接\增删数据、表结构的增删改、字段约束(非空、唯一性、主键、外键、检查约束),基础+实战

教程来源&#xff1a;B站视频BV1Vy4y1z7EX 001-数据库概述_哔哩哔哩_bilibili 我听课收集整理的课程的完整笔记&#xff0c;供大家学习交流下载&#xff1a;夸克网盘分享 本文内容为完整笔记的第八篇的第一部分 目录 1、表怎么进行连接的 2、insert语句可以一次插入多条记…

深入探索 Ubuntu:从基础到高级应用

本文深入探讨了 Ubuntu 操作系统&#xff0c;涵盖了其起源与发展、安装与配置、软件管理、系统优化、网络配置、安全防护以及在不同领域的应用等多个方面。 在起源与发展部分&#xff0c;介绍了 Ubuntu 于 2004 年创立的背景以及其版本的演进。安装与配置环节详细阐述了系统安…

SprinBoot+Vue药房管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

R语言论文插图模板第10期—正负柱状图

在之前的文章中&#xff0c;分享了R语言各式柱状图的绘制模板&#xff1a; 进一步&#xff0c;再来分享一种特殊的柱状图&#xff1a;正负柱状图。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自行下载。…

改进三极管搭建的简易电流源特性

目录 一、用三极管搭建简易电流源的缺点二、改进电流源特性 一、用三极管搭建简易电流源的缺点 此前文章《用三极管搭建电流源》的电路是存在缺陷的&#xff0c;温度变化和Early效应会影响电路的性能和稳定性。主要表现如下&#xff1a; 基极-发射极之间的压降会随着温度的变化…