DSP作业.docx

上传人:b****7 文档编号:8801150 上传时间:2023-02-01 格式:DOCX 页数:27 大小:303.87KB
下载 相关 举报
DSP作业.docx_第1页
第1页 / 共27页
DSP作业.docx_第2页
第2页 / 共27页
DSP作业.docx_第3页
第3页 / 共27页
DSP作业.docx_第4页
第4页 / 共27页
DSP作业.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

DSP作业.docx

《DSP作业.docx》由会员分享,可在线阅读,更多相关《DSP作业.docx(27页珍藏版)》请在冰豆网上搜索。

DSP作业.docx

DSP作业

DSP综合实验设计报告

 

课题名称基于DSP的水温控制系统设计

专业电子信息工程

班级

学生姓名

学号

指导教师

2011年6月20日

 

基于DSP的水温控制系统设计

第一节引言

1.1水温控制系统概述

本文介绍的是一个以EL-DSP-EXPII型教学实验系统为控制核心的水温控制系统,此系统通过人机交互设定控制温度,采用增量型PID算法,通过脉宽调制控制电炉加热,最终实现水温的恒定。

该系统具有温度超调量小、调节时间短、静态误差小、测量精确、恒定温度与设定温度偏差小等优点,且控制方便、显示直观、性能稳定、可靠性高。

1.2设计目的

(1)熟悉并掌握硬件设计方面的温度采集技术

(2)熟悉并掌握软件设计方面的A/D转换技术

(3)熟悉并掌握软件设计方面的DSP液晶显示功能

(4)掌握数字PID控制程序的设计方法

(5)掌握监控程序的设计方法

1.3设计任务与要求

系统的基本任务与要求:

(1)系统的基本要求:

一定量水由电炉加热,要求水温可以在一定范围内由人工预先设定,并能在环境温度降低至低于设定值时自动实现调整,以保持设定的温度基本不变。

(2)主要性能指标:

a.温度设定范围:

温度设定为0℃—80℃,误差小于1℃;

b.控制水容器中电加热器件,使水温在5分钟内从室温升到45℃,并在随后的5分

钟内将水温稳定在45℃,误差在2℃内。

c.用十进制数码显示实际水温;

1.4系统组成

本系统是一个典型的检测、控制型应用系统,它要求系统完成从水温检测、信号处理、输入、运算到输出控制电炉加热功率以实现水温控制的全过程。

因此,以DSP为核心组成一个专用计算机应用系统,以满足检测、控制应用类型的功能要求。

另外,DSP的使用为实现水温的智能化控制以及提供完善的人机界面及多机通讯接口提供了可能,而这些功能在常规数字逻辑电路中往往是难以实现或无法实现的。

根据设计任务的基本要求,本系统应具有以下基本功能:

(1)可以进行温度设定,并自动调节水温至给定的温度值。

(2)可以调整PID控制参数,满足不同控制对象与控制品质要求。

(3)可以实时显示给定温度与水温实测值。

1.5整体设计思路

首先设计由AD590和ADC0804组成的温度采集电路,利用热敏电阻输出电压值与温度间的函数关系,检测温度的变化;然后将采集到的温度送入TMS320C5402中的A/D转换模块,将电压转换为数字信号;最后通过编写LCD显示函数来控制相应的温度及文字的变化。

系统的整体框图如图1.5.1所示:

 

图1.5.1系统整体框图

第2节系统硬件设计

2.1方案设计

最小系统设计:

TMS320C5402芯片包含33个电源引脚,时钟模块,分别有电源复位,复位引脚/RS,软件复位,非法地址,看门狗定时器溢出,欠电压复位这6种信号使DSP控制器复位。

在设计中采用了由PCRESET引脚PCRESET电源复位的方式。

为了可靠复位,高电平的有效时间至少保持6个时钟周期。

DSP最小系统指的是由C5402芯片组成的电源模块,复位电路和晶振电路组成的无外围设备的系统。

最小系统如图2.1.1:

图2.1.1

2.2元器件选择

(1)AD590芯片(图2.2.1)

图2.2.1

(2)ADC0804芯片(图2.2.2)

图2.2.2

2.3单元电路设计

2.3.1温度采集电路

系统的温度采集电路主要由温度传感器(AD590)、基准电压(7812)及A/D转换电路(ADC0804)三部分组成。

电路图如图2.3.1所示

图2.3.1温度采集电路原理图

(1)AD590性能描述测量范围在-50℃--+150℃,满刻度范围误差为±0.3℃,当电源电压在5—10V之间,稳定度为1﹪时,误差只有±0.01℃。

AD590为电流型传感器温度每变化1℃其电流变化1uA,在0℃和80℃时输出电流分别为273.2uA和353.2uA。

(2)ADC0804性能描述ADC0804为8bit的一路A/D转换器,其输入电压范围在0—5v,转换速度小于100us,转换精度0.39﹪。

满足系统的要求。

(3)电路原理及参数计算温度采集电路的基本原理是采用电流型温度传感器AD590将温度的变化量转换成电流量,再将电流量转换成电压量通过A/D转换器ADC0804将其转换成数值量交由DSP芯片处理。

如图2.3.2所示

A

图2.3.2

Uc

图中三端稳压7812作为基准电压Ub,由运放虚短虚断可知运放的反向输入端Ui的电压为零伏。

当输出电压为零伏时(即Uo=0v)列出A点的结点方程如下:

……………..………………………….…

(1)

由于系统控制的水温范围为0℃--80℃,所以

图2-2-2

当输出电压为零伏时AD590的输出电流为308.2uA,因此为了使Ui的电位为零就必须使电流Ib等于电流Ic等于308.2uA,三端稳压7812的输出电压为12v所以由方程

(1)得

……….………….….

(2)

由方程

(2)的取电阻R2=30k,R1=10k的电位器。

由方程

(2)的取电阻R2=30k,R1=10k的电位器。

又由于ADC0804的输入电压范围为0—5v,为了提高精度所以令水温为95℃时ADC0804的输入电压为5v(即Uo=5v)。

此时列出A点的结点方程如下:

………………………………(3)

当水温为95℃时AD590的输出电流为368.2uA。

由方程式(3)得

R4+R5=83.33k因此取R5=81k,R5=5k的电位器。

2.3.2温度控制电路

此部分电路主要由光电耦合器MOC3041和双向可控硅BTA12组成。

MOC3041光电耦合器的耐压值为400v,它的输出级由过零触发的双向可控硅构成,它控制着主电路双向可控硅的导通和关闭。

100Ω电阻与0.01uF电容组成双向可控硅保护电路。

控制部分电路图如图2.3.3。

图2.3.3

2.3.3LCD液晶显示模块

DSP需要对读写周期较慢的液晶显示模块进行访问,这样就存在DSP与慢速设备之间的输入/输出时序匹配问题。

直接访问方式是将DSP的读写信号线与慢速设备口控制板引出的读写信号线直接相连,时序由DSP内部读写逻辑控制。

由于慢速外设的读写周期相对DSP较慢,要使两者的时序匹配,还必须进行一些时序方面的控制处理,一种处理方法是软件编程等待状态发生器,将外部总线周期扩展到数个机器周期。

由于受硬件条件的限制,这种扩展通常也是有限的。

另一种处理方法是利用DSP的READY(外部设备准备就绪)引脚,通过硬件扩展实现外部状态自动等待,从而使DSP与慢速设备之间的时序匹配。

虽然可以将总线周期扩展到任意个机器周期,但是需要进行硬件扩展,增加了系统设计的复杂度。

间接访问是用DSP的数字I/O间接控制慢速设备通过软件控制DSP的I/O口来实现与慢速设备的时序匹配。

此种方式无需硬件扩展即可实现与任意时序慢速设备之间的时序匹配。

本设计采用间接访问方式来实现DSP与LCD之间的时序匹配,即在程序中加入大量延时语句。

由于DSP为3.3V设备,而液晶显示模块属于+5V设备,所以在连接控制线、数据线时需要加电平隔离和转换设备。

2.4主机控制部分

此部分是电路的核心部分,系统的控制采用了EL-DSP-EXPII型教学实验系统。

EL-DSP-EXPII教学实验系统内部有64KB单元的程序存储器及64KB的数据存储器。

因此系统不必扩展外部程序存储器和数据存储器这样大大的减少了系统硬件部分。

2.5微机控制及图形显示部分

为了使系统具有更好的人机交换界面,设在系统设计中我们通过VisualBasic语言计了微机控制界面。

通过系统与微机的通信大大的提高了系统的各方面性能。

其控制界面见图2.5.1

图2.5.1微机控制界面

如图2.5.1的微机控制界面,具有温度控制及显示的功能。

图中左半部分为水温的实测温度和给定温度的数值显示及对主系统的控制界面,右半部分为水温的实测温度的逐点采样及图形显示,通过此界面可以更直观的显示温度的变化,并且通过对图形的保存能方便的打印出水温的变化曲线。

第三节系统软件设计

3.1软件系统分析

(1)系统设计原理

首先要初始化A/D转换模块,然后等待中断,当产生中断后对采集到的模拟信号进行处理,为了确保转换精度应多次取值求平均,将其转换结果放在结果寄存器的高12位上,最后将处理后的温度值送到LCD上显示。

系统设计原理框图如图3.1.1:

TMS320C5402

图3.1.1系统设计原理框图

(2)软件系统流程图

3.2软件模块设计

(1)等待ADC中断程序

#defineADC_usDELAY8000L

#defineADC_usDELAY220L

interruptvoidadc_isr(void);

Uint16LoopCount;

Uint16ConversionCount;

Uint16Voltage1[1024];

Uint16Voltage2[1024];

floattemp;

Uint16i,j;

voidInitAdc(void);

interruptvoidadc_isr(void)

{

Voltage1[ConversionCount]=AdcRegs.ADCRESULT0>>4;

Voltage2[ConversionCount]=AdcRegs.ADCRESULT1>>4;

//If40conversionshavebeenlogged,startover

if(ConversionCount==200)

{

ConversionCount=0;

}

elseConversionCount++;

if(ConversionCount==0)

{temp=0;

for(i=0;i<200;i++)

temp=temp+Voltage1[i];

temp=temp/200.0;

temp=temp*3.0/4095.0;

}

//ReinitializefornextADCsequence

AdcRegs.ADCTRL2.bit.RST_SEQ1=1;//ResetSEQ1

AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;//ClearINTSEQ1bit

PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;//AcknowledgeinterrupttoPIE

return;

}

voidInitAdc(void)

{

externvoidDSP28x_usDelay(Uint32Count);

AdcRegs.ADCTRL3.bit.ADCBGRFDN=0x3;//Powerupbandgap/referencecircuitry

DELAY_US(ADC_usDELAY);//DelaybeforepoweringuprestofADC

AdcRegs.ADCTRL3.bit.ADCPWDN=1;//PoweruprestofADC

DELAY_US(ADC_usDELAY2);//DelayafterpoweringupADC

}

(2)延时子程序

voidDelay(unsignedintnDelay)

{

intii,jj,kk=0;

for(ii=0;ii

{

for(jj=0;jj<1024;jj++)

{

kk++;

}

}

}

(3)打开显示子程序

voidTurnOnLCD()

{

*(int*)0x108001=LCDCMDTURNON;

Delay(LCDDELAY);

*(int*)0x108002=0;

Delay(2048);

*(int*)0x108001=LCDCMDSTARTLINE;

Delay(LCDDELAY);

*(int*)0x108002=0;

Delay(LCDDELAY);

}

(4)清屏程序

voidLCDCLS()

{

inti,j;

*(int*)0x108001=LCDCMDSTARTLINE;

Delay(LCDDELAY);

*(int*)0x108002=0;

Delay(LCDDELAY);

for(i=0;i<8;i++)

{

*(int*)0x108001=LCDCMDPAGE+i;

Delay(LCDDELAY);

*(int*)0x108002=0;

Delay(LCDDELAY);

*(int*)0x108001=LCDCMDVERADDRESS;

Delay(LCDDELAY);

*(int*)0x108002=0;

Delay(LCDDELAY);

for(j=0;j<64;j++)

{

*(int*)0x108003=0;

Delay(LCDDELAY);

*(int*)0x108002=0;

Delay(LCDDELAY);

}

*(int*)0x108001=LCDCMDPAGE+i;

Delay(LCDDELAY);

*(int*)0x108002=0;

Delay(LCDDELAY);

*(int*)0x108001=LCDCMDVERADDRESS;

Delay(LCDDELAY);

*(int*)0x108002=0;

Delay(LCDDELAY);

for(j=0;j<64;j++)

{

*(int*)0x108004=0;

Delay(LCDDELAY);

*(int*)0x108002=0;

Delay(LCDDELAY);

}

}

}

(5)显示模块

//汉字模块

voidLCDWrite(unsignedintx,unsignedinty,unsignedintLR,unsignedintn)

{

unsignedcharlcdkey[5][32]=

{

{0x10,0x21,0x86,0x70,0x00,0x7E,0x4A,0x4A,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,0x00,

0x02,0xFE,0x01,0x40,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x40,0x00},//温

{0x00,0x00,0xFC,0x04,0x24,0x24,0xFC,0xA5,0xA6,0xA4,0xFC,0x24,0x24,0x24,0x04,0x00,

0x80,0x60,0x1F,0x80,0x80,0x42,0x46,0x2A,0x12,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00},//度

{0x00,0x00,0x00,0x3E,0x2A,0xEA,0x2A,0x2A,0x2A,0xEA,0x2A,0x3E,0X00,0X00,0X00,0X00,

0x20,0x21,0x22,0x2C,0x20,0x3F,0x20,0x20,0x20,0x3F,0x28,0x24,0x23,0x20,0x20,0x00},//显

{0x00,0x20,0x20,0x22,0x22,0x22,0x22,0xE2,0x22,0x22,0x22,0x22,0x22,0x20,0x20,0x00,

0x10,0x08,0x04,0x03,0x00,0x40,0x80,0x7F,0x00,0x00,0x01,0x02,0x0C,0x18,0x00,0x00},//示

{0x00,0x02,0x05,0xE2,0x18,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x04,0x1E,0x00,0x00,

0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x18,0x00,0x00},//℃

};

if(LR==0)

{

intj;

intk=n;

*(int*)0x108001=LCDCMDPAGE+x;

Delay

(1);

*(int*)0x108002=0;

Delay

(1);

*(int*)0x108001=LCDCMDVERADDRESS+y;

Delay

(1);

*(int*)0x108002=0;

Delay

(1);

for(j=0;j<16;j++)

{

*(int*)0x108003=lcdkey[k][j];

Delay(10);

*(int*)0x108002=0;

Delay(10);

}

x++;

*(int*)0x108001=LCDCMDPAGE+x;

Delay

(1);

*(int*)0x108002=0;

Delay

(1);

*(int*)0x108001=LCDCMDVERADDRESS+y;

Delay

(1);

*(int*)0x108002=0;

Delay

(1);

for(j=16;j<32;j++)

{

*(int*)0x108003=lcdkey[k][j];

Delay(100);

*(int*)0x108002=0;

Delay(100);

}

}

else

{

intj;

intk=n;

*(int*)0x108001=LCDCMDPAGE+x;

Delay

(1);

*(int*)0x108002=0;

Delay

(1);

*(int*)0x108001=LCDCMDVERADDRESS+y;

Delay

(1);

*(int*)0x108002=0;

Delay

(1);

for(j=0;j<16;j++)

{

*(int*)0x108004=lcdkey[k][j];

Delay(100);

*(int*)0x108002=0;

Delay(100);

}

x++;

*(int*)0x108001=LCDCMDPAGE+x;

Delay

(1);

*(int*)0x108002=0;

Delay

(1);

*(int*)0x108001=LCDCMDVERADDRESS+y;

Delay

(1);

*(int*)0x108002=0;

Delay

(1);

for(j=16;j<32;j++)

{

*(int*)0x108004=lcdkey[k][j];

Delay(100);

*(int*)0x108002=0;

Delay(100);

}

}

}

//数字模块

unsignedcharledkey[12][8]=//半角

{

{0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00},//0

{0x00,0x00,0x00,0x84,0xFE,0x80,0x00,0x00},//1

{0x00,0x00,0x84,0xC2,0xA2,0x92,0x8C,0x00},//2

{0x00,0x00,0x44,0x92,0x92,0x92,0x6C,0x00},//3

{0x00,0x00,0x30,0x28,0x24,0xFE,0x20,0x00},//4

{0x00,0x00,0x4E,0x92,0x92,0x92,0x62,0x00},//5

{0x00,0x00,0x7C,0x92,0x92,0x92,0x64,0x00},//6

{0x00,0x00,0x02,0xC2,0x32,0x0A,0x06,0x00},//7

{0x00,0x00,0x6C,0x92,0x92,0x92,0x6C,0x00},//8

{0x00,0x00,0x4C,0x92,0x92,0x92,0x7C,0x00},//9

{0x00,0x00,0x00,0x66,0x66,0x00,0x00,0x00},//:

{0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00},//.

};

voidWriteNb(unsignedintx,unsignedinty,unsignedchar*No,unsignedf,unsignedintLR)

{

inti;

y*=8;

*(int*)0x108001=LCDCMDPAGE+x;//设置操作页=1

Delay(LCDDELAY);

*(int*)0x108002=0;

Delay(LCDDELAY);

*(int*)0x108001=LCDCMDVERADDRESS+y;//起始列=8

Delay(LCDDELAY);

*(int*)0x108002=0;

Delay(LCDDELAY);

if(LR==1)

for(i=0;i<8;i++)

{

if(f==1)

*(int*)0x108004=~No[i];

else

*(int*)0x108004=No[i];

Delay(LCDDELAY);

*(int*)0x108002=0;

Delay(LCDDELAY);

}

else

for(i=0;i<8;i++)

{

if(f==1)

*(int*)0x108003=~No[i];

else

*(int*)0x108003=No[i];

Delay(LCDDELAY);

*(int*)0x108002=0;

Delay(LCDDELAY);

}

}

(6)温度计算子程序

voidWendu(floatc)

{

temp1=35.91-246.7*c;

ZhengshuT=(int)temp1;

XiaoshuT=(int)((temp1-ZhengshuT)*100);

Zhongjian1=ZhengshuT/10;

Zhongjian2=ZhengshuT%10;

ZhengshuT=(Zhongjian1<<4)|Zhongjian2;

Zhongjian1=XiaoshuT/10;

Zhongjian2=XiaoshuT%10;

XiaoshuT=(Zhongjian1<<4)|Zhongjian2;

}

(7)主函数

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

当前位置:首页 > 初中教育

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

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