芯教程|平头哥助力昊芯HX2000系列芯片EPWM_DC空窗滤波功能应用

描述

 

随着能源需求的日益短缺,科技的日趋智能化,高精度的模拟量准确采集,已日趋成为当今社会迅速发展的必然需求。昊芯顺应时代要求,推出适用于高精度工业自动化运动控制的新版HXS320F28034PNT数字信号处理器DSP,芯片EPWM模块DC以空窗滤波功能,滤除数字比较误动作事件,更加有效助力于工程师实现高精度信号采集,广泛应用于电动车、电动汽车、轨道交通、全电飞机、新能源发电、机器人等工业自动化高精度控制领域。

 

芯片

 

平头哥半导体有限公司剑池集成开发环境(简称“CDK”)支持HX2000系列芯片调试,本期将对EPWM_DC空窗滤波功能应用展开介绍。

 

HX2000系列EPWM_DC信号滤波可用于DC数字比较错误联防误动作事件滤除,过流误动作期间ADC采样潜在噪声滤除。实现方法如下:

 

芯片

 

通过DCFCTL[SRCSEL]选择,滤除数字比较DCAEVT1/2或DCBEVT1/2空运行事件噪声;配置DCBCTL[EVT1SRCSEL]对数字比较事件滤波;通过DCBCTL[EVT1FRCSYNCSEL]选择同/异步采样;通过DCFCTL[PULSESEL]位配置滤波起始偏移点为CTR=0或CTR=PRD,从而在CTR=0或CTR=PRD处,偏移DCFOFFSET位置,产生长度为DCFWINDOW个TBCLK的空窗滤波信号。空窗期间,被选择滤除的数字比较事件信号被屏蔽,导致其产生的SOC信号、同步、中断与强制信号均被屏蔽,空窗结束后,数字比较事件可以产生SOC信号、同步、中断与强制信号,因而可用于DC过流误动作信号滤除,以有效滤除空窗期间ADC启动转换前潜在噪声,从而实现更精确的模拟量信号采集,与PWM限流动作触发。

 

由此设计EPWM_DC模拟量过流信号滤波实例:EPWM2_SOCA触发ADCINA2采样,假设输入采样电流超越阈值,则比较器COMP1输出低电平给TZ3,再将TZ1引脚置高,将TZ1,TZ3输入给DC模块:由DCAH与DCAL产生数字比较事件DCAEVT2,触发EPWM2A置高;由DCBH与DCBL信号输入,产生数字比较事件DCBEVT1,触发EPWM2B置低;在EPWM2 CTR=0处,偏移500TBCLK处,产生200TBCLK长度空窗,对EPWM2_DCAEVT1信号滤波,以滤除过流误动作信号,防止PWM限流误动作触发。

 

芯片

 

因此,硬件连接为5V-ADCINA2,GPIO1-GPIO17,3.3V-TZ1(GPIO12)如上图所示。

基于CDK V2.12.1开发,代码包括:EPWM 及TZ GPIO、COMP1 GPIO与ADC模拟量采集AIO引脚配置,ADC初始化上电,EPWM2_SOCA事件功能配置,EPWM2_DC触发动作及空窗信号滤波配置、ADC单触发源顺序采集配置、COMP1比较器比较阈值检测功能配置,ADC模拟量采集转换结果存储,DC触发EPWM动作中断程序,主程序调用执行。
 

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

1.int main(void)2.{3.  /*初始化系统控制:PLL,WatchDog,使能外设时钟*/4.  InitSysCtrl();5.  /*初始化GPIO,复用为EPwm功能*/6.  InitEPwm2Gpio();7.  /*初始化TZ故障保护模块*/8.  InitTzGpio();9.  /*初始化Adc*/10.  InitAdc();11.  /*初始化GPIO,复用为comp功能*/12.  InitComp1Gpio();13.  /*初始化LED配置*/14.  InitLED();15.  /*关中断*/16.  InitPieCtrl();17.  /*清中断*/18.  IER = 0x0000;19.  IFR = 0x0000;20.  /*初始化PIE向量表*/21.  InitPieVectTable();22.  EALLOW;23.  /*执行带有空窗的DC事件触发EPWM2A,DC事件触发EPWM2B*/24.  PieVectTable.EPWM2_TZINT = &epwm2_tz_isr;25.  /*将adc_isr入口地址赋给ADCINT3,执行ADC采样*/26.  PieVectTable.ADCINT3 = &adc_isr;27.  EDIS;28.  EALLOW;29.  /*每个启用的ePWM模块中的TBCLK(时基时钟)均已停止。*/30.  SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;31.  EDIS;32.  /*初始化EPWM2*/33.  InitEpwm2_Example();34.  EALLOW;35.  /*所有使能的ePWM模块同步使用TBCLK*/36.  SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;37.  EDIS;38.  /*初始化ADC*/39.  ADC_Init();40.  /*初始化comp1*/41.  InitComp1();42.  /*使能相对应的中断*/43.  IER |= M_INT2 | M_INT10;44.  PieCtrlRegs.PIEIER2.bit.INTx2 = 1;45.  PieCtrlRegs.PIEIER10.bit.INTx3 = 1;46.  EINT;47.  while(1)48.  {}49.  return 0;50.}

 

CDK上开发信号滤波实例程序,编译结果为:

 

芯片

 

编译通过后,就可以开始调试了,调试后DC触发前后的EPWM输出如下:

 

芯片


 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 相关推荐
  • 热点推荐
  • 芯片

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分