DSP控制器及其应用课程设计-温度采集与显示 (2).doc

上传人:来看看 文档编号:3258004 上传时间:2019-08-06 格式:DOC 页数:25 大小:484.04KB
返回 下载 相关 举报
DSP控制器及其应用课程设计-温度采集与显示 (2).doc_第1页
第1页 / 共25页
DSP控制器及其应用课程设计-温度采集与显示 (2).doc_第2页
第2页 / 共25页
DSP控制器及其应用课程设计-温度采集与显示 (2).doc_第3页
第3页 / 共25页
DSP控制器及其应用课程设计-温度采集与显示 (2).doc_第4页
第4页 / 共25页
DSP控制器及其应用课程设计-温度采集与显示 (2).doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《DSP控制器及其应用课程设计-温度采集与显示 (2).doc》由会员分享,可在线阅读,更多相关《DSP控制器及其应用课程设计-温度采集与显示 (2).doc(25页珍藏版)》请在三一文库上搜索。

1、键盘输入分频发声装置课程设计说明书(2010/2011学年第一学期)课程名称 : DSP控制器及其应用 题 目 : 温度采集与显示 专业班级 : 学生姓名 : 学 号 : 指导教师 : 设计周数 : 2周 设计成绩 : 2011 年 7月7日22温度采集与显示 1 课程设计目的通过我们对DSP控制器及其应用课程的学习和理解,综合运用课本中所学到的理论知识完成一个温度采集与显示的课程设计。通过这次实践锻炼我们查阅资料、方案比较、团结合作的能力。在这个过程我们必须掌握温度采集技术的硬件设计、熟悉A/D转换技术和DSP液晶显示功能的软件设计。学会采用简单电路的实验调试和整机指标测试方法,增强我们的动

2、手能力,为以后学习和工作打下坚实基础2 课程设计正文2.1 系统分析2.1.1 设计的任务及步骤(1)熟悉MC1403芯片的应用; (2)根据实验测得热敏电阻和温度的一些数据,设计温度电阻公式; (3)设计外部硬件电路; (4)软件完成程序流程图设计和编程,其中包括A/D转换和液晶显示部分;(5)编写上位机程序 (6)软硬件联合调试;(7)书写设计说明书。2.1.2 技术要求 此系统利用热敏电阻测得电阻温度之间的关系,找到电阻和温度之间的代数关系,从而检测温度,设计硬件外扩电路,同时设计软件程序,包括A/D程序设计,进行软硬件联系调试,能在液晶显示屏上显示温度。2.1.3 设计思路 首先设计温

3、度采集电路,由于考虑到使用的是非线性负温度系数的热敏电阻,因此采用了桥式电路尽量减小因外接不必要因素导致的误差,通过多次试验测得几个点,并拟合出一条合适的线性函数关系。其次进行软件设计,主要包括AD转换模块、液晶显示模块、算法转换模块、主函数模块以及上位机模块。最后进行软硬件联系调试,并能在液晶上正常显示温度值。2.2 总体设计2.2.1 硬件设计TMS320F2812作为本次课设使用的DSP芯片。它包含33个电源引脚(为使器件正常运行,所有电源引脚必须正确连接且不能悬空)时钟源模块,DSP有六种信号可以使DSP控制器复位,即电源复位、复位引脚RS、软件复位、非法地址复位、看门狗定时器溢出、欠

4、压复位六种复位信号。所以在设计的初期,把它分成了五个模块。其中复位采用电源复位的方式,由引脚PCRESET引起。为了可靠复位,其中低电平的有效时间至少6个CPU时钟周期。DSP最小系统组成框图如图1所示。图1 DSP最小系统其中:开关SW-PB、电容以及电阻构成一个简单的抚慰电路;晶振与两个并联电容接在XTAL1与XTAL2为2812提供外部时钟;HT7133芯片将5V直流电源转换为3.3V直流电源构成电源模块为2812供电。2.2.2系统框图设计该系统包括温度采集模块、F2812芯片、AD转换模块以及液晶显示模块,首先通过热敏电阻对外界温度的变化,从而改变其电位的变化,F2812芯片等待中断

5、并接收数据,然后送入AD转换模块,AD对模拟信号进行转换,并将转换结果存放在结果寄存器的高12位,为保证数据精确多次采样求平均值,最后通过算法转换,将结果显示在LCD液晶上。系统设计流程如图2所示。图2 系统设计流程图2.3 单元电路的设计2.3.1 温度采集电路考虑到此次使用的是非线性负温度系数的热敏电阻,因此采用桥式电路尽量确保其精度,并使用低压基准芯片MC1403为电路提供基准电压,确保其尽量减少外界不必要因素的影响。温度采集电路如图4所示。图3 温度采集电路2.3.2 单元模块的分析(1)MC1403低压基准芯片引脚如图4所示。图4 MC1403低压基准芯片引脚图Vin端口输入一个4.

6、540V的模拟电压值(接P2口的1引脚),在Vout端输出了一个稳定的电压值(接P2口的1引脚,为AD模块提供参考模拟高电平),GND端接模拟地(接P2口的33引脚)为AD提供参考模拟低电平,并与数字地短接。(2)AD转换模块当模/数转换完成后,读取结果寄存器前,最好先读取模/数转换控制寄存器ADCRL2的ADCRESULT0或ADCRESULT1,以确定当前结果寄存器的状态,保证读取的结果是正确。另外,要注意12位的转换结果放在结果寄存器中的高12位上,要进行位移转换,该12位数据与外部模拟输入电压的关系为:12位数字结果=4095*(输入电压/基准电压)基准电压:3V输入电压:A/D采集的

7、电压12位数字结果:12位的转换结果是放在结果寄存器的高12位上。(3)LCD液晶显示模块DSP经常会对读写周期较慢的输入/输出设备(如液晶显示模块、打印机、键盘等)进行访问,通常以下两种方法来解决DSP与这些慢速设备之间的输入/输出时序匹配问题。直接访问方式是将DSP的读写信号限于慢速设备接口控制板引出的读写信号线直接相连,时序由DSP内部读写逻辑控制。由于慢速外设的读写周期相对DSP较慢,是两者的时序匹配,还必须进行一些时序方面的控制处理。一中处理方法是软件编程等待状态发生器,将外部总线周期扩展到数个机器周期。由于受硬件条件的限制,这种扩展通常也是有限的。液晶显示为128行和64列的矩阵,

8、它分左右两个平面,而一个字是16行和16列的矩阵,在按页的显示中每一页是一个8行和128列的矩阵,所以每一行字是分两页显示的系统设计总电路图如图5所示。图.5 系统设计总电路图(4)单片机与PC机串口通信DSP有一个全双工的串行通讯口,所以DSP和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而DSP的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND、

9、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示,RS232DSP 控 制 器PC机MC1489MC1488TXDTXDRXDRXDGNDGND图 6 异步串行通讯原理图DSP控制器串行通信接口(SCI)是一个标准的通用异步接收/发送(UART)通信接口。它的接收器和发送器都是双缓冲的。DSP控制器串行通信接口(SCI)有自已的使能和中断位,它们可以半双工或全双工方式工作。为了保证数据的完整性,串行通信接口对接收的数据进行间断检测、奇偶性、超时和帧错误的检查。位速率(波特率)可通过一个16位的比特率选择寄存器进行编程,因此,可以有超过65000

10、种不同的速率。SCI模块是一个8位片内外设,通过DSP的16位外部数据总线的低8位与外部设备通信。SCI的物理描述:(1)两个I/O引脚。*SCIRXD(SCI接收数据输入)*SCITXD(SCI发送数据输出)(2)通过一个16位波特率选择寄存器的编程,可得到超过65000种不同的可编程位速率。(3)18的可编程数据字长。(4)长度为1位或2位的可编程停止位。(5)内部产生的串行时钟。(6)四个错误检测标志。*奇偶性错误 *超限错误*帧错误 *间断检验(7)两种唤醒多处理器模式,可与任意通信格式一起使用。*空闲线路唤醒 *位寻址唤醒(8)半双工或全双工操作。(9)双缓冲接收和发送功能。(10)

11、接收和发送操作均可通过中断或查询操作进行,相应的状态标志如下:发送器:TXRDY标志(发送器缓冲寄存器准备好接收另一个字符)和TXEMPTY标志(发送移位寄存器空)。接收器:RXRDY标志(准备从接收缓冲寄存器中读出一个新字符)、BRKDT标志(间断条件发生)和RXERROR,可用来监视四个中断条件。(11)发送器和接收器中断的分立的使能位(间断除外)。(12)SCI数据,不管是接收的、还是发送的,都是NRZ(非归零)格式的。2.4 软件程序设计2.4.1 软件系统流程图软件系统流程如图6 所示。图7 软件系统流程图2.4.2 软件程序设计程序主要包括主程序、中断、延时、A/D转换、算法转换、

12、液晶显示等子程序,实现温度采集与显示的功能,程序详见附录。此次课设我主要负责AD转换、算法转换和主程序部分。AD转换部分我采用单通道采样方式对温度采集电路发送的值进行转换,并使用了第一组的6号中断对电路进行定时采样,由于考虑到热敏电阻比较灵敏,我采用了多次采样求平均值的方法确保数据精确。算法转换部分主要是对AD采集并转换的值进行进一步的转换,主要是将桥式电路的电压与热敏电阻的关系和拟合的温度与电阻的关系整合在一起,使其转换为我们能看懂的温度,并将其一位一位拆分开来复制到LCD液晶显示子程序,将结果显示字液晶屏上。(1)NTC热敏电阻原理及应用NTC热敏电阻器在室温下的变化范围在10O10000

13、00欧姆,温度系数-2%-6.5%。NTC热敏电阻器可广泛应用于温度测量、温度补偿、抑制浪涌电流等场合。NTC热敏电阻为负温度系数热敏电阻。零功率电阻值 RT():RT指在规定温度 T 时,采用引起电阻值变化相对于总的测量误差来说可以忽略不计的测量功率测得的电阻值。电阻值和温度变化的关系式为:RT = RN expB(1/T 1/TN)RT :在温度 T ( K )时的 NTC 热敏电阻阻值。 RN :在额定温度 TN ( K )时的 NTC 热敏电阻阻值。 T :规定温度( K )。 B : NTC 热敏电阻的材料常数,又叫热敏指数。 exp :以自然数 e 为底的指数( e = 2.718

14、28 )。该关系式是经验公式,只在额定温度 TN 或额定电阻阻值 RN 的有限范围内才具有一定的精确度,因为材料常数 B 本身也是温度 T 的函数。额定零功率电阻值 R25 ():根据国标规定,额定零功率电阻值是 NTC 热敏电阻在基准温度 25 时测得的电阻值 R25,这个电阻值就是 NTC 热敏电阻的标称电阻值。通常所说 NTC 热敏电阻多少阻值,亦指该值。材料常数(热敏指数) B 值( K )RT1 :温度 T1 ( K )时的零功率电阻值。 RT2 :温度 T2 ( K )时的零功率电阻值。 T1, T2 :两个被指定的温度( K )。对于常用的 NTC 热敏电阻, B 值范围一般在

15、2000K 6000K 之间。已知150时为25,即R25 = 150,120时为45,经计算,B约为2121.7K。代入得:r=150*exp(2121.7*(1/t)-1/298)取曲线上的任意几点,再用Matlab进行曲线拟合,得到几条直线,经筛选后得到如图7的图形。经变换单位后,得到温度与电阻值之间的关系式:T = 125 2/3*R图8 拟合后的直线其中横坐标为温度,单位为K;纵坐标为电阻值。由硬件部分(电桥电路)得到电压与电阻值之间的关系:V = 2.5*R1/(R1+R),其中R1=200,与上式相结合并经调试修改后,得到温度值与电压之间的关系:T=140.0-0.67*(500

16、.0/V-200.0)/温度计算子程序void Wendu(float c) temperature=140.0-0.67*(500.0/c-200.0); T_tempe=(int)temperature; T_tempe1=T_tempe/10; T_tempe0=T_tempe%10; D_tempe=(int)(10*(temperature-T_tempe);(2)上位机SCI波特率的设置:16位的波特率数值用BRR表示。SCI使用16位的波特率选择寄存器值来选择64K种不同的串行时钟频率中的一种。选择可以通过以下方法来确定:当 BRR =165535时(BRR=波特率选择寄存器中的

17、16位值):波特率是按位计算的,而每位需要8个SCICLK周期。当 BRR = 0 时串行通信过程: 在进行串行通信之前,先对 SCI 通信控制寄存器 SCICCR 进行设置。信息块的起始位始终是1位,停止位可选择1位或2位。数据位的长度是可编程的,可设置18位,由SCICCR的SCICHAR2:0设置。数据位长度小于8位时,写到发送缓冲寄存器SCITXBUF的数据只有低L位被发送(这些数据位必须右对齐,因为对于少于8位的字符,左边的位是被忽略的)。校验位可设,由SCICCR的PARITY ENABLE(5位)设置。校验方式有两种,奇、偶校验,由SCICCR的PARITY(6位)设置。空闲线方

18、式与地址位方式的选择,由SCICCR的ADDR/IDLE MODE(3位)设置。SCICCR的SCIENA(4位)是一个总开关位。 在信息块的格式确定后就要确定串行通信的波特率。串行通信的时钟SCICLK是由时钟源模块的SYSCLK按照SCI波特率寄存器规定的分频系数分频后得到的。16位的波特率寄存器SCIHBAUD和SCILBAUD分别决定了波特率寄存器的高、低8位,二者共同构成了16位的波特率数值。 设置好串行通信的波特率后,就要确定接收、发送部分的控制位,这些由SCI控制寄存器SCICTL1、2来完成, 当数据写入SCITXBUF时,SCICTL2的TXRDY(7位)被清0;当SCITX

19、BUF的数据全部移出后,则SCICTL2的TXRDY被置1,并且产生发送中断TXINT。(3)SCI下位机程序#include”DSP281x_Device.h”/使用的函数原型声明void Gpio_select(void);void SpeedUpRevA(void);void SCI_Init(void);interrupt void SCI_TX_isr(void);interrupt void SCI_RX_isr(void);/全局变量char message=temperature;void main(void)InitSystem();/初始化DSP内核寄存器Gpio_sele

20、ct();/配置GPIO复用功能寄存器InitPieCtrl();/调用外设中断扩展初始化单元PIE-unit/(代码:DSP281x_PieCtrl.c)InitPieVectTable();/初始化PIE vector向量表/ (代码:DSP281x_PieCtrl.c)EALLOW;/解除寄存器保护PieVectTable.TXAINT=& SCI_TX_isr;PieVectTable.RXAINT=& SCI_RX_isr;EDIS;/ 使能寄存器保护/使能PIE中的SCI_A_TX_INT中断PieCtrlRegs.PIEIER9.bit.INTx2=1;/使能PIE中的SCI_A

21、_RX_INT中断PieCtrlRegs.PIEIER9.bit.INTx1=1;/使能CPU INT 9IER |=ox100;/全局中断使能和更高优先级的实时调试事件EINT;/ 全局中断使能INTMERTM;/ 使能实时调试中断DBGMSCI_Init();While(1)PieCtrlRegs.WDKEY=ox55;/看门狗控制PieCtrlRegs.WDKEY=oxAA;EDIS;/ 使能寄存器保护void Gpio_select(void)EALLOW;/解除寄存器保护GpioMuxRegs.GPAMUX.all=ox0;/所有GPIO端口配置为I/OGpioMuxRegs.GPB

22、MUX.all=ox0;GpioMuxRegs.GPFMUX.all=ox0;GpioMuxRegs.GPDMUX.all=ox0;GpioMuxRegs.GPAMUX.bit.SCIRXDA_GPIOF5=1;/配置SCI_RXGpioMuxRegs.GPAMUX.bit.SCIXTDA_GPIOF4=1;/配置SCI_TXGpioMuxRegs.GPEMUX.all=ox0;GpioMuxRegs.GPGMUX.all=ox0;GpioMuxRegs.GPADIR.all=ox0;/GPIO PORT 配置为输入GpioMuxRegs.GPBDIR.all=ox0; /GPIO PORT

23、配置为输入GpioMuxRegs.GPDDIR.all=ox0; /GPIO PORT 配置为输入GpioMuxRegs.GPEDIR.all=ox0; /GPIO PORT 配置为输入GpioMuxRegs.GPFDIR.all=ox0; /GPIO PORT 配置为输入GpioMuxRegs.GPGDIR.all=ox0; /GPIO PORT 配置为输入/设置所有GPIO输入的量化值等于0GpioMuxRegs.GPAQUAL.all=ox0;GpioMuxRegs.GPBQUAL.all=ox0;GpioMuxRegs.GPDQUAL.all=ox0;GpioMuxRegs.GPEQU

24、AL.all=ox0;EDIS;/ 使能寄存器保护void InitSystem(void) /初始化DSP内核寄存器EALLOW;/解除寄存器保护SysCtrlRegs.WDCR=ox00AF;/配置看门狗/ox00E8 禁止看门狗,预定标系数Prescaler=1 /ox00AF 不禁止看门狗,预定标系数Prescaler=64SysCtrlRegs.SCSR=0;/看门狗产生复位SysCtrlRegs.PLLCR.bit.DIV=10;/配置处理器锁相环,倍频系数为5SysCtrlRegs.HISPCP.all=ox1;/ 配置高速外设时钟分频系数为2SysCtrlRegs.LOSPCP

25、.all=ox2;/ 配置低速外设时钟分频系数为4/设置使用的外设时钟/一般不使用的外设时钟禁止,降低系统功能SysCtrlRegs.PCLKCR.bit.EVAENCLK=0;SysCtrlRegs.PCLKCR.bit.EVBENCLK=0;SysCtrlRegs.PCLKCR.bit.SCIAENCLK=1;/使能SCI模块的时钟SysCtrlRegs.PCLKCR.bit.SCIBENCLK=1;SysCtrlRegs.PCLKCR.bit.MCBSPENCLK=0;SysCtrlRegs.PCLKCR.bit.SPIENCLK=1;SysCtrlRegs.PCLKCR.bit.ECA

26、NENCLK=0;SysCtrlRegs.PCLKCR.bit.ADCENCLK=0;EDIS;/ 使能寄存器保护void SCI_Init(void)SciaRegs.SCICCR.all=ox0007;/1bit停止位 无循环模式/无极性,字符长度:8bit/异步模式,空闲线协议SciaRegs.SCICTL1.all=ox0003;/使能TX、RX、内部SCICLK/RX ERR、SLEEP、TXWAKESciaRegs.SCIHBAUD=4878;/波特率:9600(LSPCLK=37.5MHz)SciaRegs.SCILBAUD=487&ox00FF;SciaRegs.SCICTL2

27、.bit.TXINTENA=1;/使能SCI发送中断SciaRegs.SCICTL2.bit.RXBKINTENA=1;/使能SCI接收中断SciaRegs.SCIFFTX.all=oxE060; /bit15=1:退出复位/bit14=1:使FIFO增强模式/bit13=1:使能TX FIFO操作/bit6=1:CLR TXEFINT-标志/bit5=1:使能TX FIFO 匹配/bit40:如果TX FIFO=0,产生TX_ISR中断SciaRegs.SCIFFRX.all=oxE065;/Rx中断级设置为5SciaRegs.SCICTLI.all=ox0023;/使SCI退出复位/SCI

28、_A发送中断服务程序/发送字符串messageinterrupt void SCI_TX_isr(void)int i;for(i=0;i16;i+)SciaRegs.SCITXBUF= messagei;/重新初始化PIE,为SCI_A TX准备接收下一次中断PieCtrlRegs.PIEACK.all=ox0100;/响应中断(4)上位机程序如下:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using Syst

29、em.Text;using System.Windows.Forms;using System.IO;using System.IO.Ports;namespace WEUDUCELIANG public partial class Form1 : Form string serialReadString, ss, cc, string1; int i = 0; public Form1() InitializeComponent(); timer1.Interval =1;/设置timer控件时间间隔 timer1.Enabled = false; serialPort1.DataBits

30、= 8; serialPort1.StopBits = System.IO.Ports.StopBits.One; serialPort1.ReadBufferSize = 500000; serialPort1.RtsEnable = true; /如果是RS232转RS485,此句必须要,否则不能通讯 serialPort1.NewLine = rn; private void button1_Click(object sender, EventArgs e) if (button1.Text = 打开串口) if (!serialPort1.IsOpen) /如果串口是关闭的 /设定串口

31、信息和波特率 serialPort1.PortName = boBox1.SelectedItem.ToString(); serialPort1.BaudRate = Convert.ToInt32(boBox2.SelectedItem.ToString(); serialPort1.Parity = Parity.None; serialPort1.DataBits = Convert.ToInt16(boBox4.SelectedItem.ToString(); serialPort1.StopBits = StopBits.One; try serialPort1.Open(); /

32、打开串口 button1.Text = 关闭串口; /改变按钮上的字符 comboBox1.Enabled = false; comboBox2.Enabled = false; comboBox3.Enabled = false; comboBox4.Enabled = false; comboBox5.Enabled = false; catch MessageBox.Show(串口打开失败!n可能是串口已被占用!); else /如果串口是打开的 serialPort1.Close(); /关闭串口 button1.Text = 打开串口; /改变按钮上的字符 comboBox1.Ena

33、bled = true; comboBox2.Enabled = true; comboBox3.Enabled = true; comboBox4.Enabled = true; comboBox5.Enabled = true; else serialPort1.Close(); serialPort1.Dispose(); /关闭串口 button1.Text = 打开串口; /改变按钮上的字符 comboBox1.Enabled = true; comboBox2.Enabled = true; comboBox3.Enabled = true; comboBox4.Enabled =

34、 true; comboBox5.Enabled = true; btnCJ.Enabled = true; button4.Enabled = false; private void btnCJ_Click(object sender, EventArgs e) try if (serialPort1.IsOpen) btnCJ.Enabled = false; button4.Enabled = true; serialReadString = serialPort1_DataReceived1(); if (serialReadString != &(serialReadString !

35、= cc| textBox1.Text = ) textBox1.AppendText(时间: + DateTime.Now.ToString() + 温度: + serialReadString + + rn); cc = serialReadString; timer1.Start(); else MessageBox.Show(串口未打开请先打开串口!); catch/抛出异常 MessageBox.Show(没找到设备); serialPort1.Close(); serialPort1.Dispose(); private void button4_Click1(object sen

36、der, EventArgs e) timer1.Stop(); button4.Enabled = false; btnCJ.Enabled = true; string1 = ; /serialPort1.Close(); /serialPort1.Dispose(); private void button2_Click(object sender, EventArgs e) /清除listbox控件中的内容 textBox1.Text = ; private void button3_Click(object sender, EventArgs e) /保存温度数据 System.IO

37、.FileStream objfile; saveFileDialog1.ShowDialog(); if (saveFileDialog1.FileName != null) objfile = System.IO.File.Create(saveFileDialog1.FileName); objfile.Close(); objfile.Close(); objfile.Dispose(); System.IO.StreamWriter objfiles = new StreamWriter(saveFileDialog1.FileName); objfiles.Write(textBox1.Text); objfiles.Close(); objfiles.Dispose(); else MessageBox.Show(路径不可为空!);

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

当前位置:首页 > 研究报告 > 信息产业


经营许可证编号:宁ICP备18001539号-1