TC275-11CCU6_PWM_Generation

news2024/11/28 19:02:39

基础知识

CCU6,Capture/Compare Unit 6捕获/比较单元,是一个专门用于电机控制而设计的16位捕获和比较单元。

CCU6包含多个定时器,将它们的计数值和参考值进行比较,来生成PWM信号。

定时器12(T12)配有三个比较器。通过同步它们,最多可以产生三个同步的PWM信号,这些信号可以是中心对齐的或边缘对齐的。

实验目标

使用CCU6产三个固定频率和不同占空比的中心对准脉冲宽调制(PWM)信号。

实验现象

使用三个示波器探头连到三各引脚。

可以观察到三个中心对齐的PWM信号,配置占空比,每个周期为50 us

三个频率为20 kHz和不同占空比(25%、50%和75%)的PWM信号。T12被配置为上下倒计时,这三个信号在中心对齐。

实验原理

一个图搞定

实验代码

禁用/初始化中断

在进行CCU6初始化时,第一步先禁用中断IfxCpu_disableInterrupts()

    boolean interruptState = IfxCpu_disableInterrupts();            /* Disable global interrupts                    */

这样可以避免还没有进行配置的外设抢占任务。

在初始化要结束的阶段别忘了重新启用中断:

    /* Restore interrupts to their initial state */
    IfxCpu_restoreInterrupts(interruptState);

CCU6的配置

先创建一个结构体IfxCcu6_TimerWithTrigger_Config,并使用IfxCcu6_TimerWithTrigger_initConfig()按默认配置进行初始化:

/* Timer configuration: timer used as counter */
IfxCcu6_TimerWithTrigger_Config timerConf;
IfxCcu6_TimerWithTrigger_initConfig(&timerConf, &MODULE_CCU60); /* Initialize the timer configuration with default values                               */

需要修改的参数有:

  • PWM信号的频率
  • 计数器模式,向上/向下

然后再次调用IfxCcu6_TimerWithTrigger_init()进行参数使能。

    /* User timer configuration */
    timerConf.base.frequency = PWM_FREQUENCY;                       /* Set the desired frequency for the PWM signal */
    timerConf.base.countDir = IfxStdIf_Timer_CountDir_upAndDown;    /* Configure the timer to count up and down, in
                                                                     * order to generate center-aligned PWM signals */
    /* Initialize the timer driver */
    IfxCcu6_TimerWithTrigger_init(&g_timer, &timerConf);

配置PWM的高低驱动程序

配置输出引脚和占空比,以及三个通道的比较模块。

首先也是配置一个结构体IfxCcu6_PwmHl_Config,使用IfxCcu6_PwmHl_initConfig()进行默认参数的初始化:

    /* PWM High/Low driver configuration */
    IfxCcu6_PwmHl_Config pwmHlConf;
    IfxCcu6_PwmHl_initConfig(&pwmHlConf);                           /* Initialize the PwmHl configuration with
                                                                     * default values                               */

指定使用的通道数量,然后再次进行初始化:

    /* User PWM High/Low driver configuration */
    pwmHlConf.timer = &g_timer;                                     /* Use the already configured timer             */
    pwmHlConf.base.channelCount = NUMBER_OF_CHANNELS;               /* Configure the driver to use use all three
                                                                     * compare modules available in T12             */
    /* Assign output pins */
    pwmHlConf.cc0 = &IfxCcu60_CC60_P02_0_OUT;
    pwmHlConf.cc1 = &IfxCcu60_CC61_P02_7_OUT;
    pwmHlConf.cc2 = &IfxCcu60_CC62_P02_4_OUT;
    pwmHlConf.cout0 = &IfxCcu60_COUT60_P02_1_OUT;
    pwmHlConf.cout1 = &IfxCcu60_COUT61_P02_3_OUT;
    pwmHlConf.cout2 = &IfxCcu60_COUT62_P02_5_OUT;

    /* Initialize the PwmHl driver */
    IfxCcu6_PwmHl_init(&g_driver, &pwmHlConf);

选择对齐方式IfxCcu6_PwmHl_setMode():

    /* Instruct the driver to generate center aligned PWM signals */
    IfxCcu6_PwmHl_setMode(&g_driver, Ifx_Pwm_Mode_centerAligned);

设置三个通道的占空比,并更新数据

    /* Instruct the driver to generate center aligned PWM signals */
    IfxCcu6_PwmHl_setMode(&g_driver, Ifx_Pwm_Mode_centerAligned);

    /* Set the duty cycles for the three channels */
    Ifx_TimerValue cmpValues[NUMBER_OF_CHANNELS];
    cmpValues[0] = CHANNEL1_COMPARE_VALUE;                          /* Set the compare value for channel 1          */
    cmpValues[1] = CHANNEL2_COMPARE_VALUE;                          /* Set the compare value for channel 2          */
    cmpValues[2] = CHANNEL3_COMPARE_VALUE;                          /* Set the compare value for channel 3          */

    g_driver.update(&g_driver, cmpValues);                          /* Apply the compare values                     */

最后RUN:

    IfxCcu6_TimerWithTrigger_run(&g_timer);

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

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

相关文章

Java并发编程(三)

临界区 临界资源:一次仅允许一个进程使用的资源成为临界资源 临界区:访问临界资源的代码块 竞态条件:多个线程在临界区内执行,由于代码的执行序列不同而导致结果无法预测,称之为发生了竞态条件 一个程序运行多个线…

日志框架之TLog讲解分析

文章目录1 TLog1.1 引言1.2 简介1.3 TLog操作1.3.1 pom.xml1.3.2 替换logback配置项1.3.3 测试1.4 TLog接入方式1.5 TLog的基本原理1.5.1 日志标签1.5.2 TLogContext1.5.3 TLogRPCHandler1.6 第三方框架的适配1.6.1 异步线程1.6.1.1 一般异步线程1.6.1.2 线程池1.6.2 对RPC框架…

应用程序性能瓶颈中的CPU缓存优化

1.前言 在应用程序中会有大量的对变量的操作,在一般情况下不会导致问题,但在多线程操作共享变量时,不当的操作会产生大量的冗余操作,造成性能的浪费。这篇文章主要从编码方式与逻辑策略对变量从CPU寄存器,CPU缓存&…

Redis面试题整理

认识Redis 什么是Redis? 一种基于内存的数据库;在内存中完成对数据的读写操作;读写速度非常快;常用于缓存,消息队列,分布式锁等场景 Redis和Memcached有什么区别? 共同点 都是基于内存的数据库&#x…

PaddleNLP系列课程二:RocketQA、SKEP(属性级情感分析)、通用信息抽取技术UIE

文章目录一、使用RocketQA搭建端到端的问答系统1.1 问答系统介绍1.2 RocketQA1.2.1 检索式QA VS预训练时代QA1.2.2 RocketQA简介1.3 使用RocketQA搭建问答系统1.3.1 安装1.3.2 使用预置模型完成预测1.3.3 搭建问答系统1.3.3.1 使用Faiss搭建自己的问答系统1.3.3.2 使用Jina搭建…

Leecode---141、142环形链表

141 难度 : easy 个人主要思路是, 循环遍历每个节点, 判断该节点此前是否被访问过。 方法一: 时间8ms , 内存 6.8M , func hasCycle(head *ListNode) bool {var val map[*ListNode]*ListNode{}if head nil {return …

l2逐笔接口数据传输延时高吗?

l2逐笔接口数据传输延时高吗?信息服务商的机器部署在交易所机房内,并通过接口直接向用户转发。按照交易所的规定,每个接收用户均需支付成本十几万,使用l2逐笔接口数据做量化是需要一定门槛。但用户端SDK直连的方式,能最…

C++学习 Day.9(宏和模板简介)

好久没更了,摆还是爽 遗留问题: (16条消息) int&作为函数返回类型-编程语言-CSDN问答(已解决) 宏: 预处理器编译指令都以#打头 #define(宏常量)使得预处理器进行文本替换,而不…

Acwing---795.前缀和

前缀和1.题目2.基本思想3.代码实现4.总结1.题目 输入一个长度为n的整数序列。 接下来再输入m个询问,每个询问输入一对l,r。 对于每个询问,输出原序列中从第l个数到第 r 个数的和。 输入格式 第一行包含两个整数n和m。 第二行包含n个整数&am…

一种简洁又不失优雅的工作流:极狐 flow

本文来自: 万金 极狐(GitLab)解决方案专家 杨周 极狐(GitLab) 高级解决方案架构师 极狐(GitLab) 市场部内容团队 我们提到的 Workflow 是指什么? 我们在日常开发工作中提到的 Workflow 通常是指通过 Git(版本控制工具)实现的分布式…

JavaSE学习day1_03, Java的发展

5. Java语言的扩展知识,重点 5.1 Java语言的发展 java语言前身是oka语言. JDK5:第一个大版本号更新 JDK8:企业中最常用的版本 JDK17:课程中学习的版本 特点:兼容性。 用jdk8编写的代码,用17可以运行 用jdk17编写…

定位bug

1、bug定位常用工具   Firefox——firebug、web developer、 live http headers、http fox IE插件——httpwatch 第三方工具——fiddler 慢速网模拟工具——firefox throttle 1.该选择框使用来选择资源的,当网页被加载的时候向服务器端请求出来的文件包括.htm…

二维码识别率优化实践

本文字数:5939字预计阅读时间:15 分钟概述长按图片识别二维码在移动端是很常见的操作,长按后需要对图片进行识别,并且将二维码中所包含的数据解码出来。在我们的业务场景中,是通过点击图片进入大图预览页面。长按大图预…

项目管理工具dhtmlxGantt甘特图入门教程(六):dhtmlxGantt的扩展完整列表

dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表,可满足项目管理控件应用程序的所有需求,是最完善的甘特图图表库。 这篇文章给大家讲解dhtmlxGantt的扩展完整列表。 DhtmlxGantt正版试用下载(qun:764148812&…

【NI Multisim 14.0原理图环境设置——电路总体设计流程】

目录 序言 🍊知识点 一、电路板总体设计流程 🍉 1.创建电路文件 🍉2.规划电路界面 🍉3.放置元器件 🍉4.连接线路和放置节点 🍉5.连接仪器仪表 🍉6. 运行仿真并检查错误 🍉7…

Dropzone4 for MAC 文件拖拽增强工具

前言 ​​Dropzone for mac是一款文件拖拽操作增强工具,可以让我们把大部分工作都通过拖拽来完成,只需将文件拖拽到菜单栏上的窗口即可。比如保存文本、发送邮件、FTP上传、打开应用等等。提高了用户的工作效率。 下载 Dropzone4 特征 -打开应用程序…

连接格式优化,支持自定义

12月, eKuiper 团队继续专注于 1.8.0 版本新功能的开发。我们重构了外部连接(source/sink) 的格式机制,更加清晰地分离了连接、格式和 Schema,同时支持了格式的自定义;受益于新的格式机制,我们大幅完善了文…

echarts中formatter修改鼠标悬浮事件信息操作、echarts地图块、散点区分触发点击事件 只触发散点问题详解

这里写目录标题1、实例2、案例详解1、实例 这次我拿echarts中 地图组合散点图的实例 !!!实现效果:滑到散点显示不同于地图块的信息 及 formatter 提示窗自定义!!! 这个显示项目名称为"文昌…

千锋教育+计算机四级网络-计算机网络学习-01

目录 课程链接 最早的广域网 计算机网络发展阶段 计算机网络的定义与要点 英文单词网络术语与解释 计算机网络分类 广域网技术 城域网 局域网 个人局域网 五种基本的网络拓扑结构​ 误码率 电路交换网特点 分组交换 交换方式 TCP/IP协议族 IP协议介绍 TCP协议介绍 …

OpenCV的solvePnP函数和Dlib估计头部姿势

一、姿势估计概述1、概述在许多应用中,我们需要知道头部是如何相对于相机倾斜的。例如,在虚拟现实应用程序中,可以使用头部的姿势来渲染场景的右视图。在驾驶员辅助系统中,在车辆中观察驾驶员面部的摄像头可以使用头部姿势估计来查…