TMSF28335程序设计实例解析.docx

上传人:b****2 文档编号:24294931 上传时间:2023-05-26 格式:DOCX 页数:8 大小:15.98KB
下载 相关 举报
TMSF28335程序设计实例解析.docx_第1页
第1页 / 共8页
TMSF28335程序设计实例解析.docx_第2页
第2页 / 共8页
TMSF28335程序设计实例解析.docx_第3页
第3页 / 共8页
TMSF28335程序设计实例解析.docx_第4页
第4页 / 共8页
TMSF28335程序设计实例解析.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

TMSF28335程序设计实例解析.docx

《TMSF28335程序设计实例解析.docx》由会员分享,可在线阅读,更多相关《TMSF28335程序设计实例解析.docx(8页珍藏版)》请在冰豆网上搜索。

TMSF28335程序设计实例解析.docx

TMSF28335程序设计实例解析

TMSF28335程序设计实例

实现功能:

AD采样+PI调节+一阶惯性

/*****************headfile********************/

#include"DSP2833x_Device.h"

#include"DSP2833x_Examples.h"

/****************macro*****************/

#defineS1AdcRegs.ADCST.bit.INT_SEQ1

/***************globalvariable************/

floatthis_zl;

floatupon_zl;

intPIn=0;//symbolparameter

intSCn=0;//symbolparameter

floatadclo=0;//ADreferencedvoltage

floatadcres=65536;

floatTa;//一阶系统时间常数

floattemp=0.950213;

intsc_D;

floatmf_scz;

floatmf_sc;//output

unsignedint*Sda;

floatpower_set;

floatpower_get;//actualoutputvoltage

floatKP_wr;//PIproportioncoefficient

floatKI_wr;//PIintegralcoefficient

floaterror_sg;//PIcorrelativeparameter

floaterror_1;

floaterror_2;

/****************function*******************/

interruptvoidcpu_timer0_isr(void;

interruptvoidad_isr(void;

voidInit_Timer0(void;

voidInit_Xintf(void;

voidInit_Gpio(void;//GPIOinitializationprogramvoidInitadc(void;//ADinitialize

floatPI_T(floatpower_sd,floatpow_in;//PIcontrolfunction

voiddelay_ys(void;//delaysubprogram

/***************mainfunction**********************/

voidmain(void

{

unsignedint*Sda=(unsignedint*0x200000;//defineDAaddress,XINTFZone7InitSysCtrl(;//initializesystemsubprogram

Init_Timer0(;

DINT;

InitPieCtrl(;

IER=0x0000;

IFR=0x0000;

InitPieVectTable(;

Init_Gpio(;

Initadc(;

Init_Xintf(;

CpuTimer0Regs.TCR.bit.TIE=1;

EALLOW;//解除寄存器保护

PieVectTable.TINT0=&cpu_timer0_isr;//用CUP_Timer0中断函数入口更新

//PIE向量表

PieVectTable.ADCINT=&ad_isr;//用AD中断函数更新PIE向量表

EDIS;//使能寄存器保护

ConfigCpuTimer(&CpuTimer0,150,500;//timing500us

StartCpuTimer0(;

PieCtrlRegs.PIEIER1.all=0x60;//使能PIE内的CUP_Timer0和AD

//中断

IER|=0x0001;//使能CPUINT1

EINT;

}

*****************CPUtimerinitialization***********************************

voidInit_Timer0(void

{

CpuTimer0Regs.PRD.all=75000;//settimerperiodtiming:

500us

CpuTimer0Regs.TPR.all=0;

CpuTimer0Regs.TPRH.all=0;

//CpuTimer0Regs.TCR.bit.TSS=1;//stoptimer

}

********************A/Dinitialization**********************************

voidInitadc(void

{

longi;//ADinitialize

AdcRegs.ADCTRL1.bit.RESET=1;

for(i=0;i<100;i++{};

AdcRegs.ADCTRL1.bit.RESET=0;

AdcRegs.ADCTRL1.bit.SUSMOD=0;

AdcRegs.ADCTRL1.bit.ACQ_PS=0;//settingsamplewindow

AdcRegs.ADCTRL1.bit.CPS=0;

AdcRegs.ADCTRL1.bit.CONT_RUN=0;//启动-停止模式

AdcRegs.ADCTRL1.bit.SEQ_CASC=0;//

AdcRegs.ADCTRL3.bit.ADCBGRFDN=3;//给ADC模块的内部基准电路上电for(i=0;i<400000;i++{};//delaymorethan7ms

AdcRegs.ADCTRL3.bit.ADCPWDN=1;//给ADC模块的其余模拟电路上电for(i=0;i<10000;i++{};//delaymorethan20us

AdcRegs.ADCTRL3.bit.ADCCLKPS=10;

AdcRegs.ADCTRL3.bit.SMODE_SEL=0;//choosesamplestyle

AdcRegs.ADCMAXCONV.all=0x0000;

AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0000;

AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;

AdcRegs.ADCTRL2.bit.RST_SEQ1=1;//复位排序器1

AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;//SEQ1interrupt

AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1=0;//chooseinterruptstyle

}

*********************externalperipheralsinitialization******************************voidInit_Xintf(void

{

EALLOW;

XintfRegs.XINTCNF2.bit.XTIMCLK=1;

XintfRegs.XTIMING6.bit.XWRLEAD=3;

XintfRegs.XTIMING6.bit.XWRACTIVE=7;

XintfRegs.XTIMING6.bit.XWRTRAIL=3;

XintfRegs.XTIMING6.bit.XRDLEAD=3;

XintfRegs.XTIMING6.bit.XRDACTIVE=7;

XintfRegs.XTIMING6.bit.XRDTRAIL=3;

XintfRegs.XTIMING6.bit.X2TIMING=0;

XintfRegs.XTIMING6.bit.USEREADY=0;

XintfRegs.XTIMING6.bit.XSIZE=3;

EDIS;

}

********************************I/Oinitialization*******************************voidInit_Gpio(void

{

EALLOW;//GPIOinitialize

GpioCtrlRegs.GPBMUX1.all=0xFFFFFC00;//设置B口为地址线以及DAC片选信号GpioCtrlRegs.GPCMUX1.all=0xFFFFFFFF;//setCPortasdateaddress

GpioCtrlRegs.GPAMUX1.all=0x0000;

GpioCtrlRegs.GPADIR.all=0x0003;

GpioDataRegs.GPADAT.all=0x0003;

GpioDataRegs.GPACLEAR.all=0x0003;//chooseGPIO1,2asDAsignaladdressEDIS;

}

****************************PIfunction******************************************portalparameter:

power_sdandpow_in

exportparameter:

this_zl

floatPI_T(floatpower_sd,floatpower_in

{

error_1=error_sg;

error_sg=power_sd-power_in;

error_2=error_sg-error_1;

if(PIn==0

{

error_2=4.0;//avoiderror_2toolarge

PIn++;

}

this_zl=KP_wr*error_sg+KI_wr*error_2;

error_sg=error_1;

returnthis_zl;

}

*******************************Delayfunction***********************************voiddelay_ys(void

{

longi;

for(i=0;i<100000;i++{};

}

*************************timer0interruptdealfunction***********************

interruptvoidcpu_timer0_isr(void

{

DINT;

StopCpuTimer0(;

CpuTimer0Regs.TCR.bit.TIF=1;//清CPU定时器0的中断标志

PieCtrlRegs.PIEACK.all|=0x0001;//使能第一组中断以使AD产生的中断能

//被CPU响应

AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;//使能排序器,启动AD转换

EINT;

while(S1==0{};//等待AD转换的完成

delay_ys(;

}

************************ADinterruptfunction*********************************

interruptvoidad_isr(void

{

DINT;

AdcRegs.ADCTRL2.bit.RST_SEQ1=1;

power_get=((floatAdcRegs.ADCRESULT0*3.0/adcres+adclo;//对采样数据进行转换

if(SCn==0

{

mf_scz=2.5;

SCn++;

}

mf_sc=mf_scz;

upon_zl=PI_T(power_get,mf_sc;//调用PI环节的函数

mf_sc=1/Ta*upon_zl*temp;//通过一阶惯性环节的处理

delay_ys(;

mf_scz=mf_sc;

sc_D=(int(mf_sc*4096/5;

*(Sda=sc_D;//写数据到DA的数据线

AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;

PieCtrlRegs.PIEACK.all|=0x0001;//使能第一组中断

EINT;

StartCpuTimer0(;//启动定时器0,开始下一次采样

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1