首页 > 其他分享 >DSP学习笔记

DSP学习笔记

时间:2024-04-28 15:37:33浏览次数:14  
标签:EPwm2Regs 笔记 学习 计数 DSP 模块 寄存器 bit PWM

DSP学习笔记之EPWM

EPWM模块介绍

F28335最多有18路PWM输出,其中有6个ePWM模块由两路ePWM输出组成,分为ePWMxA和ePWMxB,这一对 PWM输出,可以配置成两路独立的单边沿 PWM 输出,或者两路独立的但互相相对称的双边沿 PWM 输出,或者一对双边沿非对称的 PWM 输出,因为每对 PWM 模块中的两个 PWM 输出均可以单独使用,所以也可以认为有12 路单路 ePWM,除此之外还有 6 个 APWM,这 6 个 APWM 通过 CAP 模块扩展配置,可以独立使用。每一组 ePWM 模块都包含以下 7 个模块:时基模块 TB、计数比较模块 CC、动作模块 AQ、死区产生模块DB、PWM 斩波模块 PC、错误联防模块 TZ、时间触发模块 ET。

在这里插入图片描述

子模块介绍

微信图片_20240428084853

简单说一下PWM的生成原理,其中需要有三个寄存器:周期计算器TPR(下文也称为PRD)、计数器寄存器TCNT(下文也称为CTR)和比较寄存器CMPR。TPR决定了一个周期计数的最大值,也就决定了PWM的周期。TCNT按照时钟信号来计数,图中为增减计数模式,即从0增计数到TPR,然后再从TPR减到0,不断重复。当TCNT的值与CMPR的值相等时,PWM的电平发生变化,从而产生PWM波。改变TPR可以改变PWM的周期或者频率,改变CMPR可以改变PWM的占空比。

时基模块TB

  • 功能:确定TBCLK,即与载波的周期有关(计数器为CTR)

  • 工作模式:增,减,增减

  • 产生事件:CTR=PRD;CTR=0

  • 计数时钟:\(TBCLK = \frac{SYSCLKOUT}{2x\times2^{y}}\);其中寄存器HSPCLKDIV的值为x,分配系数为\(2x\);寄存器CLKDIV的值为y​,分配系数为\(2^y\)​​​。

    对于F28335而言,SYSCLKOUT为150MHz,如果HSPCLKDIV = 0,CLKDIV = 2,则TBCLK = 37.5MHz。

  • 计数模式:

    • 增计数:TBCTR从0每次加1,到达TBPRD时变为0。(PWM周期 = (TBPRD+1)*TBCLK的周期)

    • 减计数:TBCTR从TBPRD每次减1,到达0时变为TBPRD。(同上)

    • 增减计数:TBCTR先从0增加到TBPRD,再从TBPRF减到0。(PWM周期 = 2*TBPRD*TBCLK的周期)

比较功能模块CC

  • 输入为TB模块的值,将其与CMPA和CMPB比较,主要是影子寄存器和活动寄存器的使用。一种是直接加载,一种是CTR=PRD,CTR=ZERO加载。

  • 比较寄存器CMPA和CMPB都有相应的映射寄存器,CMPA是否启用映射寄存器是由CMPCTL[SHADOWAMODE],CMP是否启用映射寄存器是由CMPCTL[SHADOWBMODE]决定,如果启用映射寄存器,可以通过通过以上寄存器选择何时将映射寄存器中的内容装在进当前寄存器。通过CMPCTL[LOADAMODE]和CMPCTL[LOADBMODE]选择何时将映射寄存器中的内容装入当前寄存器中。

动作限定模块AQ

  • 关键寄存器:

    寄存器名 功能
    AQCTLA ePWMA动作模块控制寄存器
    AQCTLB ePWMB动作模块控制寄存器
    AQSFRC 动作模块软件强制寄存器
    AQCSFRC 动作模块软件模拟持续
  • 动作限定模块事件优先级

    image-20240428151820157

死区控制模块 DB

PWM 斩波模块 PC

错误联防模块 TZ

代码分析

代码配置

//1.关时基时钟(配置前一定要这么做)
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; 
//2.初始化GPIO引脚(选择EPWM的输出IO口)
InitEPwm2Gpio();
//3.设置同步输入脉冲触发条件(为了做后续的移相pwm控制)
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; //在Epwm2的计数器到0的时候就发一次时基同步脉冲
//4.初始化相位寄存器
EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE;//Epwm2相位寄存器失能
EPwm2Regs.TBPHS.half.TBPHS = 0;
EPwm2Regs.TBCTR = 0x0000;                  // Clear counter
EPwm2Regs.TBPRD = tbprd;
//5.选择计数模式(此处选择向上计数模式)
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;    // Count up向上计数模式
//6.设定时基时钟
EPwm2Regs.TBCTL.bit.HSPCLKDIV=TB_DIV1;//0x00
EPwm2Regs.TBCTL.bit.CLKDIV=TB_DIV2;//0x01
// 7.设置寄存器操作模式(缓冲模式)
EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
//8.设置比较点(A和B都是在零点进行比较)
EPwm2Regs.CMPA.half.CMPA = 0;    // Set compare A value
EPwm2Regs.CMPB = 0;              // Set Compare B value
//9.动作模块使用
EPwm2Regs.AQCTLA.bit.ZRO = AQ_CLEAR;            // Set PWM1A on Zero
EPwm2Regs.AQCTLA.bit.CAU = AQ_SET;          // Clear PWM1A on event A, up count
EPwm2Regs.AQCTLB.bit.ZRO = AQ_SET;            // Set PWM1B on Zero
EPwm2Regs.AQCTLB.bit.CBU = AQ_CLEAR;          // Clear PWM1B on event B, up count
//10.最后不要忘记,把时钟再打开!!!
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;         // Start all the timers synced

标签:EPwm2Regs,笔记,学习,计数,DSP,模块,寄存器,bit,PWM
From: https://www.cnblogs.com/filosefer/p/18163808

相关文章

  • 算法学习笔记(14):区间最值操作和历史最值问题
    区间最值操作,历史最值问题来源吉老师2016集训队论文,oiwiki,网络上各种博客。概述区间最值操作指的是:将所有的$i\in$\((l,r)\),\(a_i=min或max(a_i,k)\)。历史最值问题指的是:新定义一个数组\(b[]\),\(b[i]=max或min(b[i],a[i])\)。还有一种是历史版本和,即\(......
  • Docker安装笔记
    1、配置yum仓库(系统为Centos7)创建Centos基础镜像仓库,到阿里云镜像站https://developer.aliyun.com/mirror/找到Centos可以找到对应系统的镜像仓库。wget-O/etc/yum.repos.d/CentOS-Base.repohttps://mirrors.aliyun.com/repo/Centos-7.repo2、配置docker仓库创建Docker镜......
  • 无需重新学习,使用 Kibana 查询/可视化 SLS 数据
    作者:荆磊场景现在通过SLS的ES兼容能力,可以很方便地实现用Kibana来查询和可视化SLS的数据。对于从ES迁移到SLS的用户可以继续保留原来的Kibana使用习惯。下面来演示如何通过Kibana来访问SLS。使用方法部署架构这里蓝色部分是需要客户端部署的组件。Kibana......
  • 开源相机管理库Aravis学习——PixelFormat编码规则
    目录前言前置知识PixelFormatBpp编码规则源码分析分类标准补充ARV_PIXEL_FORMAT_BIT_PER_PIXEL参考文章前言在学习Aravis官方例程的时候,有这么一个函数:arv_camera_get_pixel_format,它的返回类型是ArvPixelFormat(本质是个32位无符号整数)。这意味着对于每个图像数据格式,都有自己......
  • Java学习之Jackson
    介绍两种Java主流的转化工具Jackson和FastJson,一般项目中建议只选其中一种。Jackson1.将JSON字符串转成Java对象:readvalue方法第一个参数是Json字符串,第二个参数是将要转化类的类型ObjectMapperobjectMapper=newObjectMapper();MatchMatch=objectMapper.readValue(jsonStr......
  • 开源相机管理库Aravis例程学习(五)——camera-api
    目录简介例程代码函数说明arv_camera_get_regionarv_camera_get_pixel_format_as_stringarv_camera_get_pixel_formatARV_PIXEL_FORMAT_BIT_PER_PIXEL简介本文针对官方例程中的:03-camera-api做简单的讲解。并介绍其中调用的arv_camera_get_region,arv_camera_get_pixel_format_as......
  • AI模型 Llama 3体验笔记
    4月19日Meta重磅推出了最新大型开源人工智能(AI)模型——Llama3,模型分为两种规模:8B和70B参数,旨在让个人、创作者、研究人员和各种规模的企业能够负责任地试验、创新和扩展他们的想法。  已经可以很方便的在本地部署、体验。Linux系统下安装脚本:curl-fsSLhttps://oll......
  • 程序员William的英语学习之旅:从零到流利,我的八年心路历程
    作者:程序员William原文链接先发在CSDN:https://blog.csdn.net/CoderWilliam/article/details/138261612本文如需转载需征得作者本人同意,谢谢。大家好,我是程序员William。作为一名程序员,英语很长时间都是我的软肋。在国内互联网圈里打拼8年,日益感受到英语重要性。无数次翻译软件......
  • APP 移动应用自动化 Appium 2.0 使用笔记(一)
    APP移动应用自动化Appium2.0使用笔记(一)为什么要升级到Appium2.0?最主要的原因就是:自2022年1月1日起,Appium团队不再维护或支持Appium1。所有官方支持的平台驱动程序仅与Appium2兼容。目录安装Appium2.0启动Appium2.0安装注意,你如果已经安装了原Appium1......
  • virsh命令学习(一)
    一:kvm工具栈kvm主要的工具栈,从大的类别可以分为libvirt和qemu这2大类,其中libvirt中分为virtualmachinemanager和virsh,virtualmachinemanager中的virt-manager是基于图形化界面的管理,其他的都是可以在命令直接使用命令来管理虚拟机,virsh是基于图形化界面的管理,2者都是通过li......