7866|15

2856

帖子

260

TA的资源

五彩晶圆(高级)

楼主
 

【C2000 LaunchPad】单相交流电压+电流表__捕获篇(测频率) [复制链接]

28027 EcapCAP1CAP2CAP3CAP4具有捕获边沿信号的功能。将CAPx设置为上升沿捕获或下降沿捕获,当外部信号和当前CAPx设置一致时,并将当前TSCTR值赋给CAPx寄存器。根据CAPx之间的差值计算捕获的方波信号周期和占空比。TSCTR的变化模式取决于ECap1Regs.ECCTL1.bit.CTRRSTx的设置,如果为‘0’,则动作匹配时,不复位TSCTR,将一直往上增加,直至溢出;如果为‘1’,则动作匹配时,复位TSCTR。
举例:在计算一个方波的周期时,只需要CAP1CAP2即可:
CPA1:上升沿,ECap1Regs.ECCTL1.bit.CTRRST1=1(复位CTSTR)
CPA2:上升沿,设置CEVT2中断

第一上升沿时,CPA1动作,复位TSCTR。当第二个上降沿时,CPA2动作,并且产生CEVT2事件。同时将TSCTR数加载到CPA2中。这时可以利用CAP2里面的值计算出方波的周期。
如果计算方波的占空比,大家根据计算周期的方法想想就能找到方法。
28027ECAP计算方波周期为例。
第一步:初始化ECAP引脚(28027GPIO5GPIO19均可配置为ECAP口,本例中将GPIO19配置为ECAP引脚。可参见F2802x_ECap.c中的InitECap1Gpio函数)
void InitECap1Gpio(void)
{
   EALLOW;
// GpioCtrlRegs.GPAPUD.bit.GPIO5=0;  //Enable pull-up on GPIO5 (CAP1)
   GpioCtrlRegs.GPAPUD.bit.GPIO19=0; // Enable pull-up on GPIO19 (CAP1)
// GpioCtrlRegs.GPAQSEL1.bit.GPIO5=0; // Synch to SYSCLKOUT GPIO5 (CAP1)
   GpioCtrlRegs.GPAQSEL2.bit.GPIO19=0;//Synch to SYSCLKOUT GPIO19(CAP1)
// GpioCtrlRegs.GPAMUX1.bit.GPIO5=3; // Configure GPIO5 as CAP1
   GpioCtrlRegs.GPAMUX2.bit.GPIO19=3; // Configure GPIO19 as CAP1
   EDIS;
}
第二步:设置ECap寄存器:
void InitECapture()
{
   ECap1Regs.ECEINT.all = 0x0000; // Disable all capture interrupts
   ECap1Regs.ECCLR.all = 0xFFFF;  // Clear all CAP interrupt flags
   ECap1Regs.ECCTL1.bit.CAPLDEN = 0; // Disable CAP1-CAP4 register loads
   ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0; // Make sure the counter is stopped
   // Configure peripheral registers
   ECap1Regs.ECCTL2.bit.CAP_APWM = 0;  //CAP mode
   ECap1Regs.ECCTL2.bit.CONT_ONESHT = 0; // continuous mode   ECap1Regs.ECCTL2.bit.STOP_WRAP = 1;   // Stop at 2 events
   ECap1Regs.ECCTL1.bit.PRESCALE = 0;    // Divide by 1
   ECap1Regs.ECCTL1.bit.CAP1POL = 0;          // Rising edge
   ECap1Regs.ECCTL1.bit.CAP2POL = 0;          // Rising edge
   ECap1Regs.ECCTL1.bit.CTRRST1 = 1;          // Difference operation
   ECap1Regs.ECCTL1.bit.CTRRST2 = 0;          // Difference operation
   ECap1Regs.ECCTL2.bit.SYNCI_EN = 0;         // Enable sync in
   ECap1Regs.ECCTL2.bit.SYNCO_SEL = 3;        //  Disable sync out signal
   ECap1Regs.ECCTL1.bit.CAPLDEN = 1;          // Enable capture units
   ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1;        // Start Counter
   ECap1Regs.ECEINT.bit.CEVT2 = 1;            // 2 events = interrupt
}
第三步:外部PIECPU中断使能。
EALLOW;  // This is needed to write to EALLOW protected registers
PieVectTable.ECAP1_INT = &ecap1_isr;
EDIS; // This is needed to disable write to EALLOW protected registers  // Enable CPU INT4 which is connected to ECAP1-4 INT:
IER |= M_INT4;
PieCtrlRegs.PIEIER4.bit.INTx1 = 1;
// Enable eCAP INTn in the PIE: Group 3 interrupt 1-6
EINT;   // Enable Global interrupt INTM
ERTM;   // Enable Global realtime interrupt DBGM
interrupt void ecap1_isr(void)
{
//ECap1Count = ECap1Regs.CAP1;
   ECap2Count = ECap1Regs.CAP2;
//ECap1Regs.ECCLR.all = 0xFFFF;
   ECap1Regs.ECCLR.bit.CEVT2 = 1;
   ECap1Regs.ECCLR.bit.CEVT1 = 1;
   ECap1Regs.ECCLR.bit.INT = 1;
   PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;
}
注:当使用One-shot mode方式时,若需要不断的捕获方波,需在中断程序中需加入“Cap1Regs.ECCTL2.bit.REARM = 1; ”,否则只能捕获一次。以后即使有方波信号也不会进入捕获中断处理函数。
如上即可利用ECAP的捕获功能来计算方波周期。当然灵活利用ECAP功能可以实现很多,这些需要大家去摸索。

    目前“单相交流电压+电流表”已通过捕获功能实现频率测量。为什么在做“单相交流电压+电流表”时会关注,并且计算它的频率呢?大家可以考虑一下。我将在后续“单相交流电压+电流表__采样篇”做介绍。

最新回复

厉害厉害  详情 回复 发表于 2018-9-26 10:08
 
点赞 关注(2)

回复
举报

2856

帖子

260

TA的资源

五彩晶圆(高级)

沙发
 

【C2000 LaunchPad】捕获篇(如何测频率)

测试时发现了一个问题,用新的就是项目文件单纯的覆盖旧的项目文件。仿真可能有问题。比如我碰到的问题,在家里程序测试正常,在公司测试时不进中断。一样的程序在家里和公司两种情况。我后来直接在CCS中将就旧项目文件完全删除,再在CCS中重新添加新项目文件,测试OK。所以建议大家做的不要单纯的去覆盖旧文件。

[ 本帖最后由 ltbytyn 于 2013-5-10 12:46 编辑 ]

28027_Ecap使用.pdf

144.32 KB, 下载次数: 66

售价: 1 分芯积分  [记录]

 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

板凳
 
楼主动作好快啊!,我现在一直还在琢磨epwm呢

点评

epwm比ecap难。加油啊epwm等你的心得了  详情 回复 发表于 2013-5-10 13:15
 
 
 

回复

2856

帖子

260

TA的资源

五彩晶圆(高级)

4
 

回复 板凳 蓝雨夜 的帖子

epwm比ecap难。加油啊epwm等你的心得了

点评

做测量用到的EPWM只是改变他的周期,难度不是很大哦,我有成功的经验,给你打打气哦!:lol  详情 回复 发表于 2013-5-12 15:20
 
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

5
 

回复 4楼 ltbytyn 的帖子

做测量用到的EPWM只是改变他的周期,难度不是很大哦,我有成功的经验,给你打打气哦!
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

6
 

求答

请问一下程序interrupt void ecap1_isr(void)

{

//ECap1Count = ECap1Regs.CAP1;

   ECap2Count = ECap1Regs.CAP2;

//ECap1Regs.ECCLR.all = 0xFFFF;

   ECap1Regs.ECCLR.bit.CEVT2 = 1;

   ECap1Regs.ECCLR.bit.CEVT1 = 1;

   ECap1Regs.ECCLR.bit.INT = 1;

   PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;

}中ECap2Count = ECap1Regs.CAP2;语句的作用是什么呢?
 
 
 

回复

2856

帖子

260

TA的资源

五彩晶圆(高级)

7
 
ECap1Regs.CAP2是个计时器,记录两次上升沿的间隔时间。通过修改捕获分频器寄存器可以修改捕获时钟
 
 
 

回复

63

帖子

1

TA的资源

一粒金砂(中级)

8
 
你好,我想问一下,为什么cap1事件时不复位计数器呀,计数器会一直往上边加

点评

cap1事件时是否复位计数器和设置有关。 如上面例子中讲到的:ECap1Regs.ECCTL1.bit.CTRRST1=1(当发生cap1事件时,复位TSCTR,即复位计数器)  详情 回复 发表于 2013-9-22 22:26
 
 
 

回复

2856

帖子

260

TA的资源

五彩晶圆(高级)

9
 

回复 8楼woshilee 的帖子

cap1事件时是否复位计数器和设置有关。
如上面例子中讲到的:ECap1Regs.ECCTL1.bit.CTRRST1=1(当发生cap1事件时,复位TSCTR,即复位计数器)

点评

就是直接复制上边的程序,不知道为什么不复位计数器,已经郁闷了很长时间了  详情 回复 发表于 2013-9-23 11:41
 
 
 

回复

63

帖子

1

TA的资源

一粒金砂(中级)

10
 

回复 9楼ltbytyn 的帖子

就是直接复制上边的程序,不知道为什么不复位计数器,已经郁闷了很长时间了
 
 
 

回复

2856

帖子

260

TA的资源

五彩晶圆(高级)

11
 
测试方法:GPIO19加个频率固定的方波信号(如示波器的探头测试信号),观察进入捕获中断时的( ECap2Count = ECap1Regs.CAP2)值。

我不知道你是怎么判断没有复位计数器的?
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(中级)

12
 
楼主想请问下,28027是不是只能捕捉一路,不能同时捕捉两路??比如测交流电压电流的相位
 
 
 

回复

26

帖子

0

TA的资源

一粒金砂(中级)

13
 
楼主说的就是这个帖子吧,下载了,调通了 ,TI原版程序就行,直接读ECAP1/ 2 /3/ 4  就可以  。谢谢
 
 
 

回复

182

帖子

5

TA的资源

一粒金砂(中级)

14
 
今天看到楼主的帖子,感觉很清楚,谢谢楼主分享。
 
个人签名每天进步一点,大神带菜鸟,真是谢谢您们的支持、帮助和无私的奉献。
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

15
 
感谢楼主分享,学习了
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

16
 
厉害厉害
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表