ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:84.18KB ,
资源ID:766382      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-766382.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(DSP课设 温度采集.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

DSP课设 温度采集.docx

1、DSP课设 温度采集信电学院课程设计说明书(2009 /2010学年第二学期)课程名称 : DSP控制器及其应用 题 目 : 温度采集与显示 专业班级 : 学生姓名 : 学 号: 指导教师 : 设计周数 : 2 周 设计成绩 : 2010年6月23日目 录1 课程设计目的12 课程设计正文1 2.1 设计任务1 2.2 设计思路12.3 硬件设计1 2.3.1 方案设计1 2.3.2元器件选择2 2.3.3 单元电路设计2 2.4 软件设计4 2.4.1 软件系统分析4 2.4.2 软件设计模块5 2.5 运行描述17 2.6 系统调试17 3 课程设计总结18 4 参考文献18 1 课程设计

2、目的 (1) 熟悉并掌握硬件设计方面的温度采集技术 (2) 熟悉并掌握软件设计方面的A/D转换技术 (3) 熟悉并掌握软件设计方面的DSP液晶显示功能2 课程设计正文2.1 设计任务 (1)熟悉MC1403芯片的应用 (2)设计由MC1403和热门电阻组成的温度采集电路 (3)将温度采集电路中热敏电阻的阻值变化转变为输入端的变化,根据电压温度转换公式,检测温度变化 (4)完成程序流程图的设计 (5)完成软件设计方面的A/D转换和LCD显示程序 (6)软硬件联合调试 (7)最终结果在液晶显示屏上显示相应的文字及温度 2.2 设计思路 首先设计由MC1403和热敏电阻组成的温度采集电路,利用热敏电

3、阻输出电压值与温度间的函数关系,检测温度的变化;然后将采集到的温度送入TMS320F2812中的A/D转换模块,将电压转换为数字信号;最后通过编写LCD显示函数来控制相应的温度及文字的变化。2.3 硬件设计 2.3.1 方案设计最小系统设计:TMS320F2812芯片包含33个电源引脚,时钟模块,分别有电源复位,复位引脚/RS,软件复位,非法地址,看门狗定时器溢出,欠电压复位这6种信号使DSP控制器复位。在设计中采用了由PCRESET引脚PCRESET电源复位的方式。为了可靠复位,高电平的有效时间至少保持6个时钟周期。DSP平最小系统指的是由F2812芯片组成的电源模块,复位电路和晶振电路组成

4、的无外围设备的系统。最小系统如图1: 图1 DSP最小系统图2.3.2 元器件选择 (1)MC1403芯片(图2) 图2MC1403是低压基准芯片,为模数转换模块提供基准电压。因为MC1403的输出时固定的,所以只需要用到Vin,Vout,GND三个引脚。(2)热敏电阻适当阻值的热敏电阻感应一定范围内的温度变化,提供相对精确的值。2.3.3 单元电路设计 (1)温度采集电路 由MC1403和热敏电阻组成温度采集电路。MC1403的Vin端接入一个5V左右的模拟电压值,并在此端(1脚)接入电容滤除其它频率分量;在Vout端(2脚)输出一个稳定的电压值,接P2口的23引脚;GND端(3脚)直接接地

5、,接P2口的33引脚。原理图如图3: 图3 温度采集电路原理图 (2)A/D模数转换模块 当模/数转换完成后,读取结果寄存器前,最好先读取模/数转换控制寄存器ADCTRL2的ADCFIFO1或ADCFIFO2,以确定当前结果寄存器的状态,保证读取的结果是正确的。并且12位的转换结果放在结果寄存器的高12位上,该12位数据与外部模拟输入电压的关系为: 12位数字结果=4095*(输入电压/基准电压)(3)LCD液晶显示模块 DSP需要对读写周期较慢的液晶显示模块进行访问,这样就存在DSP与慢速设备之间的输入/输出时序匹配问题。直接访问方式是将DSP的读写信号线与慢速设备口控制板引出的读写信号线直

6、接相连,时序由DSP内部读写逻辑控制。由于慢速外设的读写周期相对DSP较慢,要使两者的时序匹配,还必须进行一些时序方面的控制处理,一种处理方法是软件编程等待状态发生器,将外部总线周期扩展到数个机器周期。由于受硬件条件的限制,这种扩展通常也是有限的。另一种处理方法是利用DSP的READY(外部设备准备就绪)引脚,通过硬件扩展实现外部状态自动等待,从而使DSP与慢速设备之间的时序匹配。虽然可以将总线周期扩展到任意个机器周期,但是需要进行硬件扩展,增加了系统设计的复杂度。间接访问是用DSP的数字I/O间接控制慢速设备通过软件控制DSP的I/O口来实现与慢速设备的时序匹配。此种方式无需硬件扩展即可实现

7、与任意时序慢速设备之间的时序匹配。本设计采用间接访问方式来实现DSP与LCD之间的时序匹配,即在程序中加入大量延时语句。由于DSP为3.3V设备,而液晶显示模块属于+5V设备,所以在连接控制线、数据线时需要加电平隔离和转换设备。2.4 软件设计2.4.1 软件系统分析(1)系统设计原理 首先要初始化A/D转换模块,然后等待中断,当产生中断后对采集到的模拟信号进行处理,为了确保转换精度应多次取值求平均,将其转换结果放在结果寄存器的高12位上,最后将处理后的温度值送到LCD上显示。系统设计原理框图如图4:TMS320F2812 图4 系统设计原理框图 (2)软件系统流程图2.4.2 软件模块设计(

8、1)等待ADC中断程序#define ADC_usDELAY 8000L#define ADC_usDELAY2 20Linterrupt void adc_isr(void);Uint16 LoopCount;Uint16 ConversionCount;Uint16 Voltage11024;Uint16 Voltage21024;float temp;Uint16 i,j;void InitAdc(void);interrupt void adc_isr(void) Voltage1ConversionCount = AdcRegs.ADCRESULT0 4; Voltage2Conve

9、rsionCount = AdcRegs.ADCRESULT1 4; / If 40 conversions have been logged, start over if(ConversionCount = 200) ConversionCount = 0; else ConversionCount+; if(ConversionCount=0) temp=0; for(i=0;i200;i+) temp=temp+Voltage1i; temp=temp/200.0; temp=temp*3.0/4095.0; / Reinitialize for next ADC sequence Ad

10、cRegs.ADCTRL2.bit.RST_SEQ1 = 1; / Reset SEQ1 AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; / Clear INT SEQ1 bit PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; / Acknowledge interrupt to PIE return;void InitAdc(void) extern void DSP28x_usDelay(Uint32 Count); AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3; / Power up bandgap/ref

11、erence circuitry DELAY_US(ADC_usDELAY); / Delay before powering up rest of ADC AdcRegs.ADCTRL3.bit.ADCPWDN = 1; / Power up rest of ADC DELAY_US(ADC_usDELAY2); / Delay after powering up ADC (2)延时子程序void Delay(unsigned int nDelay) int ii,jj,kk=0; for ( ii=0;iinDelay;ii+ ) for ( jj=0;jj1024;jj+ ) kk+;

12、(3)打开显示子程序void TurnOnLCD() *(int *)0x108001=LCDCMDTURNON; Delay(LCDDELAY); *(int *)0x108002=0; Delay(2048); *(int *)0x108001=LCDCMDSTARTLINE; Delay(LCDDELAY); *(int *)0x108002=0; Delay(LCDDELAY);(4)清屏程序void LCDCLS() int i,j; *(int *)0x108001=LCDCMDSTARTLINE; Delay(LCDDELAY); *(int *)0x108002=0; Dela

13、y(LCDDELAY); for ( i=0;i8;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;j64;j+ ) *(int *)0x108003=0; Delay(LCDDELAY); *(int *)0x108002=0; Delay(LCDDELAY); *(

14、int *)0x108001=LCDCMDPAGE+i; Delay(LCDDELAY); *(int *)0x108002=0; Delay(LCDDELAY); *(int *)0x108001=LCDCMDVERADDRESS; Delay(LCDDELAY); *(int *)0x108002=0; Delay(LCDDELAY); for ( j=0;j64;j+ ) *(int *)0x108004=0; Delay(LCDDELAY); *(int *)0x108002=0; Delay(LCDDELAY); (5)显示模块/汉字模块void LCDWrite(unsigned

15、int x,unsigned int y,unsigned int LR,unsigned int n) unsigned char lcdkey532= 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,

16、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,0

17、xE2,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) in

18、t j; int k=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;j16;j+) *(int *)0x108003=lcdkeykj; Delay(10); *(int *)0x108002=0; Delay(10); x+; *(int *)0x108001=LCDCMDPAGE+x; Delay(1); *(int *)

19、0x108002=0; Delay(1); *(int *)0x108001=LCDCMDVERADDRESS+y; Delay(1); *(int *)0x108002=0; Delay(1); for(j=16;j32;j+) *(int *)0x108003=lcdkeykj; Delay(100); *(int *)0x108002=0; Delay(100); else int j; int k=n; *(int *)0x108001=LCDCMDPAGE+x; Delay(1); *(int *)0x108002=0; Delay(1); *(int *)0x108001=LCDC

20、MDVERADDRESS+y; Delay(1); *(int *)0x108002=0; Delay(1); for(j=0;j16;j+) *(int *)0x108004=lcdkeykj; 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

21、=16;j32;j+) *(int *)0x108004=lcdkeykj; Delay(100); *(int *)0x108002=0; Delay(100); /数字模块unsigned char ledkey128= /半角 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,0x

22、00,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, /:

23、 0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00, /. ;void WriteNb(unsigned int x,unsigned int y,unsigned char *No,unsigned f,unsigned int LR) int i; y*=8; *(int *)0x108001=LCDCMDPAGE+x; / 设置操作页=1 Delay(LCDDELAY); *(int *)0x108002=0; Delay(LCDDELAY); *(int *)0x108001=LCDCMDVERADDRESS+y; / 起始列=8 Delay(LCDDEL

24、AY); *(int *)0x108002=0; Delay(LCDDELAY); if(LR=1) for(i=0;i8;i+) if(f=1) *(int*)0x108004=Noi; else *(int*)0x108004=Noi; Delay(LCDDELAY); *(int*)0x108002=0; Delay(LCDDELAY); else for(i=0;i8;i+) if(f=1) *(int*)0x108003=Noi; else *(int*)0x108003=Noi; Delay(LCDDELAY); *(int*)0x108002=0; Delay(LCDDELAY)

25、; (6)温度计算子程序void Wendu(float c) temp1=35.91-246.7*c; ZhengshuT=(int)temp1; XiaoshuT=(int)(temp1-ZhengshuT)*100); Zhongjian1=ZhengshuT/10; Zhongjian2=ZhengshuT%10; ZhengshuT=(Zhongjian14)|Zhongjian2; Zhongjian1=XiaoshuT/10; Zhongjian2=XiaoshuT%10; XiaoshuT=(Zhongjian14)|Zhongjian2;(7)主函数#include DSP2

26、81x_Device.h / DSP281x Headerfile Include File#include DSP281x_Examples.h / DSP281x Examples Include File#include lcd.h#include ad.hUint16 ZhengshuT,XiaoshuT,Zhongjian1,Zhongjian2;float temp1=0;unsigned char lcdkey532;void delay_loop(void);void error(void);void Wendu(float c);void LCDWrite(unsigned

27、int x,unsigned int y,unsigned int LR,unsigned int n);void main(void) InitSysCtrl(); EALLOW; GpioMuxRegs.GPFMUX.all=0x0000; /I/O:0 特殊功能:1 GpioMuxRegs.GPFDIR.all=0x000f; / output / Port F MUX - x000 0000 0000 1111 EDIS; DINT; InitPieCtrl(); IER = 0x0000; /CPU中断允许寄存器 IFR = 0x0000;/CPU中断标志寄存器 InitPieVec

28、tTable(); EALLOW; SysCtrlRegs.HISPCP.all = 0x3; / HSPCLK = SYSCLKOUT/6 给AD转换时钟提供一个6分频 EDIS; EALLOW; / This is needed to write to EALLOW protected register PieVectTable.ADCINT = &adc_isr; EDIS; / This is needed to disable write to EALLOW protected registers InitAdc(); / For this example, init the ADC PieCtrlRegs.PIEIE

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2