5、英飞凌-AURIX-TC3X7: PWM实验之使用 GTM -TOM 实现

news2024/11/27 14:48:45

目录

    • 5、英飞凌-AURIX-TC3X7: PWM实验之使用 GTM -TOM 实现
      • 1、GTM -TOM简介
      • 2、TOM框图
      • 3、TOM全局通道控制--TGC0, TGC1
      • 4、实验简介
        • 4.1、实验目的
        • 4.2、TC3X7 GTM 简介
        • 4.3、具体配置流程
      • 5、具体实现
        • 5.1、Cpu0_Main.c
        • 5.2、TOM_PWM.C
        • 5.3、TOM_PWM.h

5、英飞凌-AURIX-TC3X7: PWM实验之使用 GTM -TOM 实现

1、GTM -TOM简介

定时器输出模块(TOM)提供最多16个独立的通道(索引x),以在每个输出引脚TOM[i]_CH[x]_OUT上生成简单的PWM信号。

此外,在TOM输出TOM[i]_CH15_OUT处,可以产生一个脉冲计数调制信号。

2、TOM框图

在这里插入图片描述

TGC0TGC1这两个子模块是全局信道控制单元,它们控制信道及其输出的启用/禁用,以及其周期和占空比寄存器的更新。

模块TOM接收两个(三)个时间戳值TBU_TS0、TBU_TS1和TBU_TS2,以实现代表一个公共时间基的同步输出行为。

5个专用时钟线输入CMU_FXCLK提供可选择为输出针时钟的分割时钟。

TOM实例i的触发器信号TOM_TRIG_{i-1]来自于前面的实例i-1,触发器TOM_TRIG_[i]被路由到后续的实例i+1。注意,TOM0连接到它自己的输出TOM_TRIG_0,即TOM实例0的最后一个通道可以触发TOM实例0的第一个通道(该路径被注册,这意味着延迟了一个SYS_CLK周期)。

3、TOM全局通道控制–TGC0, TGC1

存在两个全局信道控制单元(TGC0TGC1),可以通过外部或内部事件同步驱动多个单独的TOM信道。

每个TGC[y]最多可以驱动8个TOM通道,其中TGC0控制TOM通道0到7,TGC1控制TOM通道8到15。

TOM模块支持四种不同类型的信令机制:

①、具有控制寄存器TOM[i]_TGC[y]_ENDIS_CTRL和状态寄存器TOM[i]_ TGC[y]_ENDIS_STAT的每个TOM通道的全局启用/禁用机制;

②、具有控制寄存器TOM[i]_TGC[y]_OUTEN_CTRL和状态寄存器TOM[i]_TGC[y]_OUTEN_STAT的每个TOM通道的全局输出启用机制;

③、具有控制寄存器TOM_TGC和_FUPD_CTRL的每个TOM通道的全局力更新机制;

④、使用TOM[i]_TGC[y]_GLB_CTRL的控制位字段UPEN_CTRL[z]更新每个TOM通道的寄存器CM0、CM1和CLK_SRC

4、实验简介

4.1、实验目的

通过AURIX TC3X7 通过定时器模块(GTM) 产生 PWM,并调节不同的占空比及脉冲频率。

4.2、TC3X7 GTM 简介

通用计时器模块(GTM)是一个模块化计时器单元,设计以适应许多计时器应用程序;

GTM 有一个内置的定时器输出模块(TOM),可以提供多达16个独立的通道来产生输出信号。

时钟管理单元(CMU)负责GTM的时钟生成。固定时钟生成(FXU)是它的子单元之一,它为GTM模块提供了5个预定义的不可配置的时钟,包括TOM;(TC377有5个时钟源,TC397有8个时钟源:TIM、TBU、MON和ATOM

4.3、具体配置流程

①、初始化 TOM

TOM的配置是通过调用初始化函数initGtmTomPwm()来完成的,具体包括以下步骤:

①、通过调用函数IfxGtm_enable()来启用GTM;

②、通过调用函数IfxGtm_Cmu_enableClocks()来启用FXU时钟。

函数IfxGtm_Tom_Pwm_initConfig()用初始化结构IfxGtm_Tom_Pwm_Config;通过修改IfxGtm_Tom_Pwm_Config 结构体,设置以下参数来初始化模块:

tom:选择正在计数的TOM;

tomChannel:选择驱动GPIO的通道;

period:将PWM信号的周期设置为期望的值;

pin.outputPin:选择 GPIO 作为输出引脚;

synchronousUpdateEnable:启用计时器的同步更新。

配置完成后,函数IfxGtm_Tom_Pwm_init()通过用户配置初始化并激活TOM

②、启动 PWM

使用函数IfxGtm_Tom_Pwm_start()启动PWM。

s暗、设置占空比

占空比的设置是通过调用函数集dutyCycle()来完成的,它包含以下步骤:

①、设置配置结构的双数循环参数,将PWM信号的占空比设置为所需值;

②、调用函数IfxGtm_Tom_Pwm_init(),用占空比的新值重新配置TOM。

5、具体实现

5.1、Cpu0_Main.c

#include "Ifx_Types.h"
#include "IfxCpu.h"
#include "IfxScuWdt.h"
#include "TOM_PWM.h"
#include "Bsp.h"


#define WAIT_TIME   10              // Number of milliseconds to wait between each duty cycle change

IFX_ALIGN(4) IfxCpu_syncEvent g_cpuSyncEvent = 0;

void core0_main(void)
{
    IfxCpu_enableInterrupts();
    
    /* !!WATCHDOG0 AND SAFETY WATCHDOG ARE DISABLED HERE!!
     * Enable the watchdogs and service them periodically if it is required
     */
    IfxScuWdt_disableCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());
    IfxScuWdt_disableSafetyWatchdog(IfxScuWdt_getSafetyWatchdogPassword());
    

    /* Wait for CPU sync event */
    IfxCpu_emitEvent(&g_cpuSyncEvent);
    IfxCpu_waitEvent(&g_cpuSyncEvent, 1);
    
    /* Initialize a time variable */
    Ifx_TickTime ticksFor10ms = IfxStm_getTicksFromMilliseconds(BSP_DEFAULT_TIMER, WAIT_TIME);

    /* Initialize GTM TOM module */
    initGtmTomPwm();

    while(1)
    {
        fadeLED();                  /* Change the intensity of the LED  */
        waitTime(ticksFor10ms);     /* Delay of 10ms                    */
    }
}

5.2、TOM_PWM.C

/*
 * TOM_PWM.c
 *
 *  Created on: 2022年12月12日
 *      Author: xstoolbox
 */

#include "TOM_PWM.h"
#include "Ifx_Types.h"
#include "IfxGtm_Tom_Pwm.h"


#define ISR_PRIORITY_TOM    20                                      /* Interrupt priority number                    */
#define LED                 IfxGtm_TOM0_2N_TOUT5_P02_5_OUT          /* LED which will be driven by the PWM          */
#define LED1                IfxGtm_TOM0_7_TOUT6_P02_6_OUT          /* LED which will be driven by the PWM          */
#define PWM_PERIOD          50000                                   /* PWM period for the TOM                       */
#define FADE_STEP           PWM_PERIOD / 100                        /* PWM duty cycle for the TOM                   */


IfxGtm_Tom_Pwm_Config g_tomConfig;                                  /* Timer configuration structure                */
IfxGtm_Tom_Pwm_Config g_tomConfig1;                                  /* Timer configuration structure                */
IfxGtm_Tom_Pwm_Driver g_tomDriver;                                  /* Timer Driver structure                       */
uint32 g_fadeValue = 0;                                             /* Fade value, starting from 0                  */
sint8 g_fadeDir = 1;                                                /* Fade direction variable                      */


void setDutyCycle(uint32 dutyCycle);                                /* Function to set the duty cycle of the PWM    */




void initGtmTomPwm(void)
{
    IfxGtm_enable(&MODULE_GTM);                                     /* Enable GTM                                   */

    IfxGtm_Cmu_enableClocks(&MODULE_GTM, IFXGTM_CMU_CLKEN_FXCLK);   /* Enable the FXU clock                         */

    /* Initialize the configuration structure with default parameters */
    IfxGtm_Tom_Pwm_initConfig(&g_tomConfig, &MODULE_GTM);
    IfxGtm_Tom_Pwm_initConfig(&g_tomConfig1, &MODULE_GTM);


    g_tomConfig.tom = LED.tom;                                      /* Select the TOM depending on the LED          */
    g_tomConfig.tomChannel = LED.channel;                           /* Select the channel depending on the LED      */
    g_tomConfig.period = PWM_PERIOD;                                /* Set the timer period                         */
    g_tomConfig.pin.outputPin = &LED;                               /* Set the LED port pin as output               */
    g_tomConfig.synchronousUpdateEnabled = TRUE;                    /* Enable synchronous update                    */

    g_tomConfig1.tom = LED1.tom;                                      /* Select the TOM depending on the LED          */
    g_tomConfig1.tomChannel = LED1.channel;                           /* Select the channel depending on the LED      */
    g_tomConfig1.period = PWM_PERIOD;                                /* Set the timer period                         */
    g_tomConfig1.pin.outputPin = &LED1;                               /* Set the LED port pin as output               */
    g_tomConfig1.synchronousUpdateEnabled = TRUE;                    /* Enable synchronous update                    */

    IfxGtm_Tom_Pwm_init(&g_tomDriver, &g_tomConfig);                /* Initialize the GTM TOM                       */
    IfxGtm_Tom_Pwm_init(&g_tomDriver, &g_tomConfig1);                /* Initialize the GTM TOM                       */
    IfxGtm_Tom_Pwm_start(&g_tomDriver, TRUE);                       /* Start the PWM                                */
}



void fadeLED(void)
{
setDutyCycle(25000);                                      /* Set the duty cycle of the PWM  */
}

/* This function sets the duty cycle of the PWM */
void setDutyCycle(uint32 dutyCycle)
{
    g_tomConfig.dutyCycle = dutyCycle;                              /* Change the value of the duty cycle  */
    g_tomConfig1.dutyCycle = dutyCycle;                              /* Change the value of the duty  cycle  */
    IfxGtm_Tom_Pwm_init(&g_tomDriver, &g_tomConfig);                /* Re-initialize the PWM */
    IfxGtm_Tom_Pwm_init(&g_tomDriver, &g_tomConfig1);                /* Re-initialize the PWM */
}

5.3、TOM_PWM.h

/*
 * TOM_PWM.h
 *
 *  Created on: 2022年12月12日
 *      Author: xstoolbox
 */

#ifndef TOM_PWM_H_
#define TOM_PWM_H_

void initGtmTomPwm(void);
void fadeLED(void);



#endif /* TOM_PWM_H_ */

实验结果

生成一个频率为:4KHzs 占空比为50% 的PWM波。

在这里插入图片描述

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

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

相关文章

StyleGAN系列

1. Progressive Growing of GANs for Improved Quality, Stability, and Variation (PGGAN) 作者: Tero Karras Timo Aila Samuli Laine Jaakko Lehtinen 基于一个理论,高分辨率的图像相对于较小分辨率的图像,是更难train的,…

List<T>, IQueryable, IEnumerable 关系和区别

最近在修项目的历史代码,发现搞混了很多拓展方法,写一篇博客澄清一下。 概念需要:iqueryable不应该和ienumerable比而应该和ilist比,ienumerable是这两者的父接口。 问题:IQueryable, IEnumerable的? &…

Linux vi/vim

vi/vim 的使用 基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是: 命令模…

数据分析可视化-FineReport 图表排序接口

1. 概述 1.1 应用场景 图表数据展示的顺序是由图表绑定的数据顺序决定的,一般建议在 SQL 中排好序再用图表实现。 但总有些场景不支持提前在 SQL 中排好序,或需要图表实现动态排序,此时可参考本文方法使用排序接口实现。 1.2 功能简介 Fi…

文本转语音免费 微软Azure官网

使用跨 140 种语言和变体的 400 种神经网络语音吸引全球受众。使用极具表现力和类似人类的声音,使文本阅读器和已启用语音的助理等方案栩栩如生。神经网络文本转语音支持多种朗读风格,包括新闻广播、客户服务、呼喊、耳语以及高兴、悲伤等情感。 地址 文…

数据结构---二叉堆

二叉堆二叉堆自我调整插入节点(上浮)删除节点(下沉)构建二叉堆(所有非叶子节点依次“下沉”)二叉堆本质上是一种完全二叉树,它分为两个类型。最大堆最小堆 最大堆的任何一个父节点的值,都大于或等于它左、右孩子\节点的值 最小堆…

【实测】windows安装部署go实录(超详细)

之前我的课程中,关于go语言的安装是主要展示了mac的,windows的就一笔带过了。 结果被我说着了(可能在第一步直接被劝退),好多用windows的小伙伴部署go语言环境各种问题各种坑,网上教程看了个一知半解。没办…

网络工程毕业设计 SSM药品管理系统(源码+论文)

文章目录1 项目简介2 实现效果2.1 界面展示3 设计方案3.1 概述3.2 系统流程3.2.1 添加信息流程3.2.2 操作流程3.2.3删除信息流程3.3 系统结构设计4 项目获取1 项目简介 Hi,各位同学好呀,这里是M学姐! 今天向大家分享一个今年(2022)最新完成…

域0day-(CVE-2022-33679)容易利用吗

前言 最近twitter上关于CVE应该CVE-2022-33679比较火了,但是资料也是比较少,下面来唠唠吧。 kerberos认证原理 先了解几个概念 认证服务(Authentication server):简称AS,认证客户端身份提供认证服务。 域控服务器(Domain Control&#x…

ubuntu 安装 MySql 【亲测有效】

目录 一:ubuntu安装mysql 二:mysql 中文乱码 解决 三:Mysql数据库 远程连接授权 四:卸载Mysql并重新安装 五:Mysql 远程连接测试 一:ubuntu安装mysql 首先来到opt(安装)目录下,开启终端&am…

压缩包密码如何解除?

压缩包设置了加密,需要输入压缩包密码才能够顺利解压文件出来。但是有些时候,一些文件只需要一段时间内要加密,之后文件不需要加密了,每次解压文件的时候还是需要输入压缩包密码才行,就很麻烦,那么RAR压缩包…

分布式状态机共识协议 Copilot

目录 前言 定义 slowdown 为什么现有的共识协议无法容忍 slowdown Copilot 如何处理 slowdown 设计 模型 排序 Client 同时发送指令至 pilot 与 copilot Pilot 提议指令与其初始依赖 节点回复 FastAccept Pilot 尝试通过 fast path 来 commit 该指令 Pilot 在 Acc…

C++11标准模板(STL)- 算法(std::min)

定义于头文件 <algorithm> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 返回各给定值中的较小者 …

基于Java实现(PC)职员工作量管理系统【100010042】

工作量统计系统 一、概述 ​ 在本次专业课实践中我选取到的题目为员工工作量统计系统。该系统分为三个模块&#xff0c;一是实现员工的登录&#xff0c;二是进入到员工的个人界面&#xff0c;并显示&#xff0c;输出员工的个人信息&#xff0c;同时还可以进行输入。第三个模块…

div对角线来回浮动显示

animation-timing-function linear 动画从头到尾的速度是相同的。 ease 默认。动画以低速开始&#xff0c;然后加快&#xff0c;在结束前变慢 ease-in 动画以低速开始 ease-out 动画以低速结束 ease-in-out 动画以低速开始和结束 steps(int,start|end) 指定了时间函数中的间隔…

公司对外投资和担保

一、公司对外投资和担保规范 公司对外投资和外他人提供担保&#xff0c;需承担相应的责任 公司可以对外投资和提供担保 二、公司提供担保的方式 保证 抵押 质押 三、公司提供担保的规定 公司对外承担的规定 公司向其他企业投资或者为他人提供担保&#xff0c;依照公司章程的规…

seata-server-1.4.2的环境搭建

修改seata-server-1.4.2/conf目录下的file.conf和registry.conf file.conf 将store下mode修改为db&#xff0c;找到db模块修改 driverClassName、url、user、password mysql 5.使用 driverClassName "com.mysql.jdbc.Driver" mysql 8 使用 driverClassName "…

Docker入门之docker-compose

一&#xff0c;Docker-compose简介 1&#xff0c;Docker-compose简介 Docker-Compose项目是Docker官方的开源项目&#xff0c;负责实现对Docker容器集群的快速编排。 Docker-Compose将所管理的容器分为三层&#xff0c;分别是工程&#xff08;project&#xff09;&#xff0c…

【MATLAB教程案例62】使用matlab实现基于PointNet++网络的点云数据分类仿真分析

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 目录 1.软件版本 2.PointNet++网络理论概述

通过java代码实现ES中的常用搜索

目录 测试环境准备 在指定索引下搜索全部&#xff08;可以指定字段&#xff09; 通过ids进行搜索 对搜索结果进行分页 match分词搜索 不分词模糊搜索&#xff1a;wildcardQuery与matchPhraseQuery term 搜索&#xff08;精确匹配&#xff09; multi_match搜索 bool搜索…