TMSF28335程序设计实例解析.docx

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

TMSF28335程序设计实例解析.docx

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

TMSF28335程序设计实例解析.docx

TMSF28335程序设计实例解析

TMSF28335程序设计实例

实现功能:

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

headfile

 

#include"DSP2833x_Device.h"

#include"DSP2833x_Examples.h"

 

macro

 

#defineS1AdcRegs.ADCST.bit.lNT_SEQ1

/***************globa|variablefloatthis_zl;

floatupon_zl;

intPln=0;//symbolparameter

intSCn=0;//symbolparameter

floatadclo=0;//ADrefereneedvoltage

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_timerO_isr(void;

interruptvoidad_isr(void;

voidInit_TimerO(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」sr;//用AD中断函数更新PIE向量表

EDIS;//使能寄存器保护

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

StartCpuTimer0(;

PieCtrlRegs.PIEIER1.all=0x60;〃使能PIE内的CUP_TimerO和AD

〃中断

IER|=OxOOO1;//使能CPUINT1

EINT;

}

*****************

CPUtimer

initialization

***********************************

voidInit_Timer0(void

{

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

500us

CpuTimerORegs.TPR.all=O;

CpuTimerORegs.TPRH.all=O;

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

}

********************A/D

|;re*;n**********************************

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.lNT_SEQ1_CLR=1;

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

AdcRegs.ADCTRL2.bit.lNT_ENA_SEQ仁1;//SEQ1interrupt

AdcRegs.ADCTRL2.bit.lNT_M0D_SEQ仁0;//chooseinterruptstyle

*********************externalperipherals

initialization

******************************

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;

******************************

initialization*******************************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,2asDAsignaladdress

EDIS;

PI

function

******************************************

portalparameter:

power_sd

****************************

andpow_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(Pln==0

{

error_2=4.0;//avoiderror_2toolarge

Pin++;

this_zl=KP_wr*error_sg+Kl_wr*error_2;

error_sg=error_1;

returnthis_zl;

Delay

function

***********************************

voiddelay_ys(void

longi;

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

***********************

**timer0interruptdeal

function

***********************

*******************************

 

interruptvoidcpu_timer0_isr(void

{

DINT;

StopCpuTimerO(;

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

PieCtrIRegs.PIEACK.all|=OxOOO1;〃使能第一组中断以使AD产生的中断能

//被CPU响应

AdcRegs.ADCTRL2.bit.SOC_SEQ仁1;〃使能排序器,启动AD转换

EINT;

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

delay_ys(;

}

***********************

*ADinterrupt

function

*********************************

interruptvoidad_isr(void

{

DINT;

AdcRegs.ADCTRL2.bit.RST_SEQ仁1;

power_get=((floatAdcRegs.ADCRESULT0*3.0/adcres+adclo;//X寸采样数据进行

 

转换

 

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.lNT_SEQ1_CLR=1;

PieCtrIRegs.PIEACK.all|=0x0001;〃使能第一组中断EINT;

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

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

当前位置:首页 > 农林牧渔 > 林学

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

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