DSP课程设计温度采集与显示.docx

上传人:b****6 文档编号:3310203 上传时间:2022-11-21 格式:DOCX 页数:18 大小:134.91KB
下载 相关 举报
DSP课程设计温度采集与显示.docx_第1页
第1页 / 共18页
DSP课程设计温度采集与显示.docx_第2页
第2页 / 共18页
DSP课程设计温度采集与显示.docx_第3页
第3页 / 共18页
DSP课程设计温度采集与显示.docx_第4页
第4页 / 共18页
DSP课程设计温度采集与显示.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

DSP课程设计温度采集与显示.docx

《DSP课程设计温度采集与显示.docx》由会员分享,可在线阅读,更多相关《DSP课程设计温度采集与显示.docx(18页珍藏版)》请在冰豆网上搜索。

DSP课程设计温度采集与显示.docx

DSP课程设计温度采集与显示

 

课程设计说明书

 

课程名称:

DSP控制技术

题目:

温度采集与显示系统设计

专业:

学生姓名:

学号:

指导教师:

设计成绩:

2011年10月10日

 

 

1课程设计目的

通过我们对DSP控制器及其应用课程的学习和理解,综合运用课本中所学到的理论知识完成一个温度采集与显示的课程设计。

通过这次实践锻炼我们查阅资料、方案比较、团结合作的能力。

在这个过程我们必须掌握温度采集技术的硬件设计、熟悉A/D转换技术和DSP液晶显示功能的软件设计。

学会采用简单电路的实验调试和整机指标测试方法,增强我们的动手能力,为以后学习和工作打下坚实基础。

2课程设计正文

2.1系统分析

2.1.1设计的任务及步骤

(1)熟悉MC1403芯片的应用;

(2)根据实验测得热敏电阻和温度的一些数据,设计温度——电阻公式;

(3)设计外部硬件电路;

(4)软件完成程序流程图设计和编程,其中包括A/D转换和液晶显示部分;

(5)软硬件联合调试;

(6)书写设计说明书。

2.1.2技术要求

此系统利用热敏电阻测得电阻—温度之间的关系,找到电阻和温度之间的代数关系,从而检测温度,设计硬件外扩电路,同时设计软件程序,包括A/D程序设计,进行软硬件联系调试,能在液晶显示屏上显示温度。

2.1.3设计思路

系统首先设计温度采集硬件电路,在多次实验运算拟合出热敏电阻输出电压值与温度之间的函数关系,热敏电阻的输出的电压值随温度的上升而下降,呈现出负系数,从而运用于实验中检测温度;然后将采集的温度送入DSPTMS320F2812模数转换模块将电压信号变为数字信号,再编写函数来控制LCD来显示相应的温度及相关文字。

2.2总体设计

2.2.1硬件设计

TMS320F2812作为使用的DSP芯片。

它包含33个电源引脚(为使器件正常运行,所有电源引脚必须正确连接且不能悬空)时钟源模块,DSP有六种信号可以使DSP控制器复位,即电源复位、复位引脚~RS、软件复位、非法地址复位、看门狗定时器溢出、欠压复位六种复位信号。

所以在设计的初期,把它分成了五个模块。

其中复位采用电源复位的方式,由引脚PCRESET引起。

为了可靠复位,其中低电平的有效时间至少6个CPU时钟周期。

DSP最小系统组成框图如图1所示。

图1DSP最小系统

其中:

开关SW-PB、电容C1、两个反相器及其电阻电源构成了复位电路,晶振与两个并联电容接XTAL1与XTAL2构成振荡电路,PWM1与PWM7构成了调制信号的输入与输出,旁路引脚接地,请求控制信号MP/MC与GND接地。

2.2.2系统框图设计

该系统包括温度采集电路模块、DSPF2812芯片、A/D转换部分和LCD液晶显示,首先要初始化A/D转换模块,然后等待中断,当产生中断后对采集到的模拟信号进行处理,为确保转换精度要进行多次取值求平均,转换结果放在结果寄存器的高12位上,通过编程将处理后的温度值送到LCD上进行显示。

图2系统设计流程图

2.3元器件的选择

2.3.1单元电路设计

(1)设计方案

MC1403芯片为模数转换提供基准电压,且输入端接+5V电源后再并联一个去噪声的电容,利用热敏电阻进行温度采集,采集后的输出电压(不得大于3.3v)与DSP的P2端口23引脚相连。

(2)外扩电路设计图

图3温度采集电路原理图

2.3.2单元模块分析

(1)MC1403芯片的引脚结构如下图所示。

 

图4MC1403芯片

Vin端口输入一个4.5~5.0V的模拟电压值(接P2口的1引脚),在输入端接一个电容滤除其他频率分量,在Vout端输出了一个稳定的电压值(接P2口的23引脚),该电压值不得大于3.3V,GND端接模拟地(接P2口的33引脚)。

(2)A/D转换模块

当模/数转换完成后,读取结果寄存器前,最好先读取模/数转换控制寄存器ADCRL2的ADCFIF01或ADCFIF02,以确定当前结果寄存器的状态,保证读取的结果是正确。

另外,要注意12位的转换结果放在结果寄存器中的高12位上,该12位数据与外部模拟输入电压的关系为:

12位数字结果=4095*(输入电压/基准电压)

 

(3)LCD液晶显示模块

DSP经常会对读写周期较慢的输入/输出设备(如液晶显示模块、打印机、键盘等)进行访问,通常以下两种方法来解决DSP与这些慢速设备之间的输入/输出时序匹配问题。

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

由于慢速外设的读写周期相对DSP较慢,是两者的时序匹配,还必须进行一些时序方面的控制处理。

一中处理方法是软件编程等待状态发生器,将外部总线周期扩展到数个机器周期。

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

液晶显示为128行和64列的矩阵,它分左右两个平面,而一个字是16行和16列的矩阵,在按页的显示中每一页是一个8行和128列的矩阵,所以每一行字是分两页显示的。

2.4程序流程图与源程序

2.4.1软件系统流程图

软件系统流程图如图5所示。

 

图5程序流程图

 

2.4.2软件程序设计

该程序主要包括主程序、延时、A/D转换,液晶屏相应汉字显示、温度计算与显示等子程序实现温度采集与显示的功能,程序详见附录。

3运行结果

(1)运行描述

M1403芯片作为模数转换提供基准电压,利用热敏电阻进行采集,采集后的输出电压与DSP的P2口23引脚相连。

将采集到的电压送入A/D转换模块,编写程序实现A/D转换,转换结果放在结果寄存器的高12位上,编写函数获取A/D转换结果,将处理的温度值的各个对应显示到LCD上。

(2)系统调试

MC1403芯片Vin端输入一个+5V的模拟电压值;在输入端接一个电容滤除其它频率分量;在Vout端输出了一个稳定的电压值;GND端直接接模拟地;给试验箱供电,打开SetupCCS2(‘C2000),在弹出的对话框中选择ICETEK-5100USBEmulatorforTMS320F2812导入,进行配置设置然后进入CCS2(‘C2000),打开工程文件进行编译生成.out文件下载到硬盘中然后调试,观察液晶显示屏,第一行显示“温度显示”,第二行显示“温度值℃”,当用手触摸时,温度显示不断变化,实现了温度的采集与现实。

(3)调试结果

将程序烧到实验箱中,得到运行结果如下图6所示。

 

图6调试结果

 

4课程设计总结

通过学习DSP课程我们都知道,DSP实际上也是一种单片机,它同样是将中央处理单元、控制单元和外围设备集成到一块芯片上。

但DSP有别于普通的单片机,它采用了多组总线技术实现并行运行机制,从而极大地提高了运算速度,也提供了非常灵活的指令系统。

此次的课程设计我们组做的设计是—温度采集与显示,通过老师和同学们的努力我们终于成功完成此次课程设计的全部任务,设计的一开始我们就着手准备设计资料,上网、图书馆查阅资料,我们分工明确,每个同学都有自己的任务,因此工作进行得有条不紊,大家都很有责任感,认真做好自己的工作。

在这次课程设计中我主要负责的软件编程部分,程序调试我采用的是CCS2('C2000)软件,至于软件如何配置和使用,老师在上实验课的时候已经简单的介绍过,所以再次看到它的时候不是很陌生,但是在用它编程序时就出现了很多问题,在这里我遇到了很大的困难,虽然有书籍和网络上查找的辅导资料,但是由于软件设计是灵活的东西,它不仅需要有过硬的编程知识,还必须有灵活的应用,因此在这方面的调试时花费了大量的时间。

首先,我把编程序想的过于简单,以为只是把每个模块的子程序编写成功便可以,却忽视了模块与模块之间的相关性和衔接性,因此总出现参数定义不准确和函数声明不相符的错误。

其次,因为自已的粗心不严谨,导致出现大小写不符,缺少分号或大括号的低级错误。

程序语法不对,调试不过去,生成不了.out文件,不过通过请教老师和同学问题都解决了,当我看到我调试出来的结果是那种激动的心情就别提了,感觉特别有成就感。

通过这次课程设计,不仅是我进一步加深对课本知识的理解,更让我学会了团结合作的精神,不但锻炼了我们动手动脑的能力,还提高了我们分析问题、解决问题的能力,在这次设计中我也学会了遇事要冷静,团结合作,虚心请教,没有任何事情解决不了,最后衷心的感谢始终支持我们的老师们,你们辛苦了!

5参考文献

[1]万山明.TMS320F281xDSP原理及应用实例.北京航空航天大学出版社,2007

[2]郑红,王鹏,董云凤,吴冠.DSP应用系统设计实践.北京航空航天大学出版社,2006

[3]徐科军,张瀚,陈智渊.TMS320F281xDSP原理与应用.北京航空航天大学出版社,2006

 

附录

#include"DSP281x_Device.h"//DSP281xHeaderfileIncludeFile

#include"DSP281x_Examples.h"//DSP281xExamplesIncludeFile

//Prototypestatementsforfunctionsfoundwithinthisfile.

interruptvoidadc_isr(void);

//Globalvariablesusedinthisexample:

#defineLCDDELAY1

#defineLCDCMDTURNON0x3f

#defineLCDCMDTURNOFF0x3e

#defineLCDCMDSTARTLINE0xc0

#defineLCDCMDPAGE0xb8

#defineLCDCMDVERADDRESS0x40

#defineADC_usDELAY8000L

#defineADC_usDELAY220L

Uint16ZhengshuT,XiaoshuT,Zhongjian1,Zhongjian2;

floattemp1=0;

unsignedcharlcdkey[5][32];

unsignedcharledkey[12][8];

Uint16LoopCount;

Uint16ConversionCount;

floattemp;

Uint16i,j;

Uint16Voltage1[1024];

Uint16Voltage2[1024];

voidDelay(intnDelay);

voidTurnOnLCD();

voidLCDCLS();

voidLCDWrite(unsignedintx,unsignedinty,unsignedintLR,unsignedintn);

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

voidWendu(floatc);

voiddelay_loop();

voiddelay_loop1();

voiderror(void);

//数字模块

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},//.

};

voidmain(void)

{

InitSysCtrl();

EALLOW;

GpioMuxRegs.GPFMUX.all=0x0000;//I/O:

0特殊功能:

1

GpioMuxRegs.GPFDIR.all=0x000f;//output

EDIS;

DINT;

InitPieCtrl();

IER=0x0000;//CPU中断允许寄存器

IFR=0x0000;//CPU中断标志寄存器

InitPieVectTable();

EALLOW;

SysCtrlRegs.HISPCP.all=0x3;//HSPCLK=SYSCLKOUT/6给AD转换时钟提供一个6分频

EDIS;

EALLOW;//ThisisneededtowritetoEALLOWprotectedregister

PieVectTable.ADCINT=&adc_isr;

EDIS;//ThisisneededtodisablewritetoEALLOWprotectedregisters

InitAdc();//初始化AD

PieCtrlRegs.PIEIER1.bit.INTx6=1;

IER|=M_INT1;//EnableCPUInterrupt1

EINT;//EnableGlobalinterruptINTM

ERTM;//EnableGlobalrealtimeinterruptDBGM

LoopCount=0;

ConversionCount=0;

//ConfigureADC

AdcRegs.ADCMAXCONV.all=0x0001;//Setup2conv'sonSEQ1

AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0;//SetupADCINA3as1stSEQ1conv.

AdcRegs.ADCCHSELSEQ1.bit.CONV01=0x1;//SetupADCINA2as2ndSEQ1conv.

AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=1;//EnableEVASOCtostartSEQ1

AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;//EnableSEQ1interrupt(everyEOS)

//ConfigureEVA

//AssumesEVAClockisalreadyenabledinInitSysCtrl();

EvaRegs.T1CMPR=0x0080;//SetupT1comparevalue

EvaRegs.T1PR=0x0fff;//Setupperiodregister

EvaRegs.GPTCONA.bit.T1TOADC=1;//EnableEVASOCinEVA

EvaRegs.T1CON.all=0x1042;//Enabletimer1compare(up

TurnOnLCD();//打开显示

LCDCLS();//清除显示内存

*(int*)0x108000=0x80;//初始化ICETEK-CTR

Delay(LCDDELAY);

*(int*)0x108000=0x0;

Delay(LCDDELAY);

*(int*)0x108000=0x80;

Delay(LCDDELAY);

*(int*)0x108001=LCDCMDSTARTLINE;//设置显示起始行

Delay(LCDDELAY);

*(int*)0x108002=0;

Delay(LCDDELAY);

for(;;)

{

Wendu(temp);

LCDWrite(2,0,0,0);

LCDWrite(2,16,0,1);

LCDWrite(2,32,1,2);

LCDWrite(2,48,1,3);

LCDWrite(6,48,1,4);//在液晶屏上显示相应的汉字及符号

WriteNb(6,6,ledkey[ZhengshuT&0x000f],0,0);

WriteNb(6,5,ledkey[(ZhengshuT&0x00f0)>>4],0,0);

WriteNb(6,2,ledkey[XiaoshuT&0x000f],0,1);

WriteNb(6,1,ledkey[(XiaoshuT&0x00f0)>>4],0,1);

WriteNb(6,7,ledkey[11],0,0);//在液晶屏上显示温度值

}

}

interruptvoidadc_isr(void)

{

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

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

if(ConversionCount==1023)

{

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;

}

//延时子程序

voidDelay(intnDelay)

{

intii,jj,kk=0;

for(ii=0;ii

{

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

{

kk++;

}

}

}

//打开显示子程序

voidTurnOnLCD()

{

*(int*)0x108001=LCDCMDTURNON;

Delay(LCDDELAY);

*(int*)0x108002=0;

Delay(2048);

*(int*)0x108001=LCDCMDSTARTLINE;

Delay(LCDDELAY);

*(int*)0x108002=0;

Delay(LCDDELAY);

}

//清屏程序

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);

}

}

}

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,

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

当前位置:首页 > 小学教育 > 语文

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

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