ePWM同步触发差分AD

  • 为什么要使用同步触发
    • ePWM(ET)配置
    • 差分ADC配置
    • 实验验证
    • 结束语
    • 参考资料目录

为什么要使用同步触发

介绍使用ePWM周期触发16位的差分AD采样,保证每次采样在控制周期的起始位置。因与ePWM的内在联系,可以在谐波的固定位置采样,有利于采样的稳定性,使数字控制系统更标准,利于传函应用,避免影响到与时间密切相关的一些数字滤波器。

ePWM(ET)配置

重点放于ET上,基础的PWM发波不再赘述。事件触发子模块管理时基模块、计数比较模块和数字比较模块生成的事件,以在发生选定事件时向CPU生成中断,或向ADC生成转换脉冲的开始。计数比较模块共有四个:CMPA、CMPB、CMPC、CMPD。前两者通常用于控制PWM的占空比,TBPRD的数值控制PWM的周期,那么可以通过设置ETSEL、ETPS两个寄存器,使能并选择在何时产生触发事件。可以选择触发条件为TBCTR=0或者TBCTR=TBPRD,产生ADC的同步触发信号。当TBCTR为在增减计数模式时,即生成PWM为中心对称模式,则可以理解为,可以在每个PWM周期开始或者中间,可以进行AD同步转换。再进一步,可以选定在差分输入电压信号的波峰或者波谷进行采样,避免一会儿在纹波的波峰采样,一会儿在波谷,引起数值不稳。
建立在数据手册、技术参考手册和官方例程理解的基础上,阐明ePWM子模块ET的使用配置流程:
① 设置时基模块工作模式。配置时基周期,计数模式,分频系数等,时基周期为电机控制周期。
② 选择产生SOCx中断的条件。SOCxSEL共八种模式,不同的模式可以选择不同的触发条件。
③ 设置触发事件分频系数。ETPS可以设置三种方式,1.中断条件满足即触发(不分频);2.中断条件满足两次后触发(二分频);3.中断条件满足三次后触发(三分频)。
④使能SOCx中断。SOCxEN=1,当上周所讲ADC也配置好之后,开启中断。

void InitEPwm1(void)
{//A相驱动-EPWM1InitEPwm1Gpio();                                //初始化PWMx的GPIO//时基模块工作模式EPwm1Regs.TBPRD = EPWM_PRD;                      // 设置三角载波周期EPwm1Regs.TBPHS.bit.TBPHS = 0x0000;             // Phase is 0EPwm1Regs.TBCTR = 0x0000;                       // Clear counterEPwm1Regs.TBCTL.bit.CTRMODE = 0x2;              // 递增递减双向模式EPwm1Regs.TBCTL.bit.PHSEN = 0x0;                // Disable phase loadingEPwm1Regs.TBCTL.bit.HSPCLKDIV = 0x0;            // Clock ratio to SYSCLKOUTEPwm1Regs.TBCTL.bit.CLKDIV = 0x0;               // Slow just to observe on the scope// 计数比较模块CMPA初始值(可删)EPwm1Regs.CMPA.bit.CMPA = EPWM_PRD;// 影子寄存器设置EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0;EPwm1Regs.CMPCTL.bit.LOADAMODE = 0;             // 计数器为0时,载入比较值// 动作模块,高电平有效EPwm1Regs.AQCTLA.bit.CAU = 2;            // Set PWMxA on 1EPwm1Regs.AQCTLA.bit.CAD = 1;            // Set PWMxA on 0// 死区产生模块EPwm1Regs.DBCTL.bit.OUT_MODE = 0x3; //死区输出模式,RED和FED都使能EPwm1Regs.DBCTL.bit.POLSEL = 0x2;   //死区设置在B路PWM上EPwm1Regs.DBCTL.bit.IN_MODE = 0x0;  //死区输入模式控制EPwm1Regs.DBRED.bit.DBRED = DB_TIME;    //上升沿死区EPwm1Regs.DBFED.bit.DBFED = DB_TIME;    //下降沿死区// PWM中断设置//EPwm1Regs.ETSEL.bit.INTSEL = 0x1;   //设置EPWM产生中断的条件,当前设置为TB等于0时产生中断//EPwm1Regs.ETPS.bit.INTPRD = 0x1;    //Generate INT on 1st eventEPwm1Regs.ETSEL.bit.SOCAEN  = 0;     // Disable SOC on A groupEPwm1Regs.ETSEL.bit.SOCASEL = 1;     // Enable event time-base counter equal to 0 (TBCTR =0)EPwm1Regs.ETPS.bit.SOCAPRD  = 1;     // Generate pulse on 1st event//EPwm1Regs.ETSEL.bit.SOCAEN  = 1;    // enable SOC on A group//EPwm1Regs.ETSEL.bit.INTEN = 1;      //打开EPWM中断使能
}

差分ADC配置

片上的ADC支持12位和16位采样精度,12位仅为单端转换使用,16位仅为差分转换使用。ADC模块支持多重触发源,包括定时器0/1/2、ePWM等。
建立在数据手册、技术参考手册和官方例程理解的基础上,阐明ADC模块的使用配置流程:
①配置ADCCLK时钟。DSP28379D共有4个ADC模块,使用时需要分别配置4个模块的时钟。ADC的采样保持电路由系统时钟SYSCLK计时,而ADC的转换过程由ADCCLK计时。
②配置采样精度和模式。12位精度对应单端模式,16位精度对应差分模式。这其中存在一个重新注入trim值的过程,与TI出厂时ADC的标定有关,例程只给出12位精度时的线性修剪校正,16位精度尚未明确,可能不需要做线性修剪校正。
③配置中断脉冲发生位置(ADCINT flag)。存在两种位置:1.在采样保持结束时刻;2.在转换结束时刻。通常使用2位置,将ADCINT flag置位,此时转换结果已存入结果寄存器中。
④ADC加电。给一定的时间让ADC加电运行。
⑤配置ePWM模块。将ePWM的SOCx、CMPx、TBPRD、TBCTL等寄存器,按照需要赋值,产生ADC的SOCx单元的同步触发信号。需要理解事件触发子模块。
⑥配置ADC的SOC。 根据硬件设计的实际引脚情况,设置采样保持窗口时间,选择与步骤⑤对应的触发方式,使能相应的标志位功能,并复位。
⑦中断服务程序中读取ADC结果寄存器中的数据。控制程序可以放在ADC中断中。
ADC同步采样的关键在于:
①尽量保证每个ADC的SOC配置相同(设置相同的采样保持时间与触发源)。
②由于硬件设计不一定保证每个ADC下的SOC数量相同,故触发源触发时间间隔,应大于拥有SOC数量最多的ADC完成转换的总时长。
③若存在不同采样精度,应并行处理。同一时刻保证不同的ADC是相同的采样精度。

//  ADCA//write configurationsAdcaRegs.ADCCTL2.bit.PRESCALE = 6; //set ADCCLK divider to /4AdcSetMode(ADC_ADCA, ADC_RESOLUTION_16BIT, ADC_SIGNALMODE_DIFFERENTIAL);//Set pulse positions to lateAdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;//power up the ADCsAdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;//delay for 1ms to allow ADC time to power upDELAY_US(1000);...
//  ADCAAdcaRegs.ADCSOC14CTL.bit.CHSEL = 2;     AdcaRegs.ADCSOC15CTL.bit.CHSEL = 4;    AdcaRegs.ADCSOC14CTL.bit.ACQPS = 139;    //sample window is 140 SYSCLK cyclesAdcaRegs.ADCSOC15CTL.bit.ACQPS = 139;   //sample window is 140 SYSCLK cyclesAdcaRegs.ADCSOC14CTL.bit.TRIGSEL = 5;    //trigger on ePWM1 SOCAAdcaRegs.ADCSOC15CTL.bit.TRIGSEL = 5;    //trigger on ePWM1 SOCAAdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 15; //End of SOC15 will set INT1 flagAdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;    //Enable ADCINT1AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;  //make sure INT1 flag is cleared...interrupt void ADCA1_ISR(void){AdcaResults[0] = AdcaResultRegs.ADCRESULT14;AdcaResults[1] = AdcaResultRegs.ADCRESULT15;sample[0] = ( __divf32((int32)AdcaResults[0] * 2 , 65536 ) - 1 ) * 3;sample[1] = ( __divf32((int32)AdcaResults[1] * 2 , 65536 ) - 1 ) * 3;//// Check if overflow has occurred//if(1 == AdcaRegs.ADCINTOVF.bit.ADCINT1){AdcaRegs.ADCINTOVFCLR.bit.ADCINT1 = 1; //clear INT1 overflow flagAdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //clear INT1 flag}PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;}

实验验证

受限于条件,疫情期间家里蹲。使用12位的DAC输出(0~3V),16位的ADC进行采样,触发条件为ePWM的载波计数为0。如下图所示,简单地换算一下,我们可以看到,功能实现完毕。


结束语

TI的C2000Ware是非常值得参考的,虽然不能面面俱到,但是给出思路,有迹可循。再者,技术参考手册和数据手册需要配合使用,才能不遗漏一点,都是些比较细节的东西,配置难度不高,关键是看用户是否真正想要使用好数字控制。如有不缜密的地方,欢迎大佬指点。

参考资料目录

《TMS320F2837xD Dual-Core Microcontrollers Technical Reference Manual》ADC、ePWM、DAC章节
《TMS320F2837xD Dual-Core Microcontrollers Datasheet》模拟外设章节
《LAUNCHXL-F28379D Overview》
C2000Ware有关ADC的所有例程

DSP28379D_ePWM同步触发差分AD相关推荐

  1. 采样率150KSPS同步触发多板卡同步2路RS485D的3U PXIE采集卡

            动态采集一般要求结构在动作运行过程中采集数据,而采集点一般静态测试数值较大的位置和比较关键的部位.PXIE302是北京青翼科技的一款基于PXI Express总线架构的高性能16通道高 ...

  2. 【AAD Connect】03:使用AAD Connect同步到Office365时的同步规则(AD账号同步到O365)

    前言 配置并启动AAD Connect之后,同步程序将会自动进行同步,根据测试结果,同步规则如下 [AAD Connect]01:AAD Connect把本地AD账户同步到Office365(AD域账 ...

  3. Domino与AD帐户同步并且与AD域实现SSO

    介绍 当客户环境中已存在Microsoft Active Directory(简称AD),而且依赖于AD已有许多应用.客户要求使用AD现有用户登录至Domino中. 从AD中通过Domino ADSY ...

  4. 基于 JESD204B 协议ARM+FPGA+AD多板卡多通道同步采集实现方法

    0 引言 随着数字化信号处理技术的不断进步,对数字信号 的处理已经成为当前大多数工程应用的基本方法.由于 模拟信号才是现实生活中的原始信号,为了工程研究实 现的可能,需将模拟信号转换为数字信号才能在工 ...

  5. ad域管理与维护_U-Mail邮件系统LDAP/AD同步极大提升办公效率

    每一位办公族,可能都遇到过这样的问题: 1.随着信息化高速发展和企业"互联网+"的深入,越来越多的办公平台和软件被开发出来,正如移动互联网端APP应用层出不穷一样,给人们带来了极大 ...

  6. 【AAD Connect】01:AAD Connect把本地AD账户同步到Office365(AD域账户迁移)

    前言 现在很多企业都会遇到把本地AD账号同步到Office365上,接下来就和大家一起了解一下,如果通过AAD Connect来进行同步操作 [AAD Connect]01:AAD Connect把本 ...

  7. 【AAD Connect】05:通过AAD Connect疑难解答检查同步问题,以及根据提示如何解决问题(AD账户迁移到O365)

    前言 使用aad connect把本地AD用户同步到Office 365时候,如果同步过程中有同步不成功的问题,可以通过AAD Connect疑难解答工具进行问题的自查,具体操作如下 [AAD Con ...

  8. MOSS同步AD账户(三)

    假如您的公司新入职了员工,部门经理或管理员向AD中加入了新员工的信息,那么怎么把新员工的账户同步到MOSS中呢?方法有2种,第一种方法是直接用代码开发实现,这种方法对于了解MOSS SDK的程序员来说 ...

  9. 本地AD账户同步到Office 365(21V)Azure AD

    本地我的AD域位corp.cn,而我对外的域名访问时basehome.com.cn,我申请了一个试用版的Office 365的账号,管理员账号为zhangjs@basehome.partner.onm ...

最新文章

  1. INLINE HOOK过驱动保护的理论知识和大概思路
  2. 如何腾出计算机内存,win7系统(取消)删除虚拟内存让硬盘空间轻松腾出来
  3. 保护导师,从我做起;爱护博导,人人有责
  4. c语言数字排列和算法思路,冒泡排序、快速排序算法理解及C程序实现
  5. 有了它,从此走上炫酷的编码之路!
  6. centos桌面系统使用记录
  7. gnome2 恢复默认 panel
  8. TCP and UDP
  9. HTML5响应式手机模板:MUI手机app前端页面开发框架模板HTML+CSS+JavaScript
  10. phpdesigner 的配置
  11. java的封装 继承 多态_java继承多态是什么意思?java封装继承多态的例子
  12. 2021年危险化学品经营单位安全管理人员考试报名及危险化学品经营单位安全管理人员证考试
  13. LVGL开发|lv_lib_100ask之lvgl中文输入(lv_100ask_pinyin_ime )-LVGL中文输入
  14. 构建gcc交叉编译工具链
  15. xilinx用户手册
  16. Android病毒查杀原理
  17. 山东交通学院linux期末考试题,山东交通学院《桥梁工程》期末考试试题(B).doc
  18. 同济计算机学硕考研,同济大学研究生有多难考
  19. 多乐影视电影网站开发——HTML+CSS+JavaScript+PHP
  20. 两种时间选择器的三种使用场景(带效果图)

热门文章

  1. 还在PS里手动描边?AI自动抠图只需5秒
  2. 10 Three.js使用orbit controls插件(轨道控制)来控制模型交互动作
  3. Rabbitmq小书
  4. xml文件的注释展示
  5. 航天器/控制器飞行能够实现自主控制么?
  6. Java农历(阴历)工具类
  7. TTL转RS485电路(自动收发)---分享原理图及参考资料
  8. java 代码覆盖率
  9. 电商商品详情如何快速高效获取,api来帮你!
  10. filter(matlab2C)