对2812进行交流电流和电压采样程序_第1页
对2812进行交流电流和电压采样程序_第2页
对2812进行交流电流和电压采样程序_第3页
对2812进行交流电流和电压采样程序_第4页
对2812进行交流电流和电压采样程序_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、./#/*文件名:Dsp2812_adc_test.c/*功能:对2812进行交流电流和电压采样/#/ 说明:ADC时钟频率:12.5MHz,/ 采样频率:6000Hz(0.1667ms)/ 级联顺序采样模式,采样2路,ADCINA0-电流,ADCINA1=电压;/ 采样窗口为16个ADCCLK/ 启动方式:EVA /#include "Dsp281x_device.h"#include "Dsp281x_Examples.h"#include "math.h"void ADC_init(void);void EVA_init(voi

2、d);void convert(void);void display_init(void);void display(Uint16 j);void processv(void);void processi(void);void sequence(float v,int p);float v120=0; /用于存放 ADC转换的电压结果float i120; /用于存放 ADC转换的电流结果int adclo;float ve; /存放电压有效值float ie; /存放电流有效值int m=0;int n=0;void main() InitSysCtrl(); /高速时钟HSPCLK=75M

3、Hz DINT; InitPieCtrl(); /允许PIE中的ADC采样中断 IER=0x0000; IFR=0x0000; InitPieVectTable(); EALLOW; GpioMuxRegs.GPAMUX.bit.PWM1_GPIOA0=0; /跳闸 GpioMuxRegs.GPADIR.bit.GPIOA0=1; /输出 EDIS; ADC_init(); EVA_init(); display_init(); adclo=0; PieCtrlRegs.PIEIER1.bit.INTx6=1; /使能PIE模块中的ADC采样中断 IER|=M_INT1; /开CPU中断 EI

4、NT; ERTM; AdcRegs.ADCRESULT0=0x0000; GpioDataRegs.GPACLEAR.bit.GPIOA0=1; EvaRegs.T1CON.bit.TENABLE=1; /启动T1计数 for(;)void ADC_init(void) AdcRegs.ADCTRL1.bit.RESET=1; /复位 AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3; /带间隙参考电路上电DELAY_US(8000l); /等待稳定AdcRegs.ADCTRL3.bit.ADCPWDN = 1; /其他电路上电DELAY_US(20l); /等待稳定Ad

5、cRegs.ADCTRL1.bit.ACQ_PS=0xf; /采样窗口(15+1)AdcRegs.ADCTRL1.bit.CONT_RUN=0; /停止开始模式 AdcRegs.ADCTRL1.bit.CPS=1; / /2AdcRegs.ADCTRL1.bit.SEQ_CASC=1; /级联模式AdcRegs.ADCTRL1.bit.SUSMOD=0x1; /仿真挂起模式:转换完成后排序器和其他逻辑停止工作,最终结果锁存,状态机更新AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=1; /允许EVA触发启动SEQAdcRegs.ADCTRL2.bit.EVB_SOC_SEQ=

6、0; /禁止EVB触发启动SEQAdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1; /允许SEQ1中断AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1=0; /每个SEQ序列序列结束时,SEQ1置位AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ2=0; /EVB信号不能启动SEQ2AdcRegs.ADCTRL2.bit.INT_ENA_SEQ2=0; /禁止SEQ2中断AdcRegs.ADCTRL3.bit.ADCCLKPS=0x4; /ADCCLK=HSPCLK/(4+2)=75/6=12.5MHzAdcRegs.ADCTRL3.bit.S

7、MODE_SEL=0; /顺序采样AdcRegs.ADCMAXCONV.bit.MAX_CONV1=0x1; /每次采样一个通道,共采样两个通道AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0; /采样ADCINA0AdcRegs.ADCCHSELSEQ1.bit.CONV01=0x4; /采样ADCINA4void EVA_init(void) EvaRegs.T1CON.bit.TMODE=0x2; /计数模式为连续增模式 EvaRegs.T1CON.bit.TPS=1; /T1CLK=HSPCLK/2=37.5MHz EvaRegs.T1CON.bit.TENABL

8、E=0; /暂时禁止T1计数 EvaRegs.T1CON.bit.TCLKS10=0x00; /使用内部时钟 EvaRegs.T1CON.bit.TECMPR=0; /禁止定时器比较操作 EvaRegs.GPTCONA.bit.T1TOADC=0x2; /周期中断启动 ADC EvaRegs.EVAIMRA.bit.T1PINT=1; /使能定时器T1周期中断 EvaRegs.EVAIFRA.bit.T1PINT=1; /清除定时器T1周期中断标志位 EvaRegs.T1PR=0x186a; /定时时间为0.1667mS EvaRegs.T1CNT=0; /初始化计数器寄存器void disp

9、lay_init(void) EALLOW; GpioMuxRegs.GPAMUX.bit.CAP3QI1_GPIOA10=0; /数据 GpioMuxRegs.GPBMUX.bit.CAP5Q2_GPIOB9=0; /CLK GpioMuxRegs.GPADIR.bit.GPIOA10=1; /方向为输出 GpioMuxRegs.GPBDIR.bit.GPIOB9=1; /方向为输出 EDIS; void convert(void) float b; int a1,b1,c1,d1; b=ve; if(b>100.00) a1 = b/100; b1 = (b-a1*100)/10;

10、c1 = (b-a1*100-b1*10); d1 = (b-a1*100-b1*10-c1)*10;display(d1); display(c1+10); display(b1); display(a1); else b1= b/10; c1=b-10*b1; d1=(b-10*b1-c1)*10; display(d1); display(c1+10); display(b1); display(20); GpioDataRegs.GPBTOGGLE.bit.GPIOB9=1; /低电平 DELAY_US(10); GpioDataRegs.GPBTOGGLE.bit.GPIOB9=1;

11、 void display(Uint16 j) int a21=0xf3,0x60,0xd5,0xf4,0x66,0xb6,0xb7,0xe0,0xf7,0xf6, 0xfb,0x68,0xdd,0xfc,0x6e,0xbe,0xbf,0xe8,0xff,0xfe, 0x00; int ii; for(ii=0;ii<8;ii+) GpioDataRegs.GPBCLEAR.bit.GPIOB9=1; /clk低电平 DELAY_US(10); GpioDataRegs.GPBTOGGLE.bit.GPIOB9=1; /高电平 GpioDataRegs.GPADAT.bit.GPIOA1

12、0=(aj>>ii)&0x01); DELAY_US(10); interrupt void ADCINT_ISR(void) vm=(AdcRegs.ADCRESULT0>>4); /存放ADCINA0的结果in=(AdcRegs.ADCRESULT1>>4); /存放ADCINA1的结果 if(v0=4095) v0=0; if(vm>=3000) /150V跳闸 GpioDataRegs.GPASET.bit.GPIOA0=1; /跳闸EvaRegs.T1CON.bit.TENABLE=0; /暂停T1定时 else if(in>=

13、5000) GpioDataRegs.GPACLEAR.bit.GPIOA0=1; /跳闸EvaRegs.T1CON.bit.TENABLE=0; /暂停T1定时 m+; n+; if(m>119) m=0; n=0; processv(); /数据转换PieCtrlRegs.PIEACK.bit.ACK1=1; /相应PIE同组中断AdcRegs.ADCST.bit.INT_SEQ1_CLR=1; /清除AD中断标志位AdcRegs.ADCTRL2.bit.RST_SEQ1=1; /复位序列发生器SEQEINT;void processv(void) int j; float temp=0; for(j=0;j<119;j+) vj=(vj/4095*3-1.52)*270; temp=temp+vj*vj; temp=temp/120; v

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论