DSP课程设计.docx
- 文档编号:7147688
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:25
- 大小:318.95KB
DSP课程设计.docx
《DSP课程设计.docx》由会员分享,可在线阅读,更多相关《DSP课程设计.docx(25页珍藏版)》请在冰豆网上搜索。
DSP课程设计
1课程设计目的
通过我们对DSP控制器及其应用课程的学习和理解,综合运用课本中所学到的理论知识完成一个温度采集与显示的课程设计。
通过这次实践锻炼我们查阅资料、方案比较、团结合作的能力。
在这个过程我们必须掌握温度采集技术的硬件设计、熟悉A/D转换技术和DSP液晶显示功能的软件设计。
学会采用简单电路的实验调试和整机指标测试方法,增强我们的动手能力,为以后学习和工作打下坚实基础
2课程设计正文
2.1系统分析
2.1.1设计的任务及步骤
(1)熟悉MC1403芯片的应用;
(2)根据实验测得热敏电阻和温度的一些数据,设计温度——电阻公式;
(3)设计外部硬件电路;
(4)软件完成程序流程图设计和编程,其中包括A/D转换和液晶显示部分;
(5)编写上位机程序
(6)软硬件联合调试;
(7)书写设计说明书。
2.1.2技术要求
此系统利用热敏电阻测得电阻—温度之间的关系,找到电阻和温度之间的代数关系,从而检测温度,设计硬件外扩电路,同时设计软件程序,包括A/D程序设计,进行软硬件联系调试,能在液晶显示屏上显示温度。
2.1.3设计思路
首先设计温度采集电路,由于考虑到使用的是非线性负温度系数的热敏电阻,因此采用了桥式电路尽量减小因外接不必要因素导致的误差,通过多次试验测得几个点,并拟合出一条合适的线性函数关系。
其次进行软件设计,主要包括AD转换模块、液晶显示模块、算法转换模块、主函数模块以及上位机模块。
最后进行软硬件联系调试,并能在液晶上正常显示温度值。
2.2总体设计
2.2.1硬件设计
TMS320F2812作为本次课设使用的DSP芯片。
它包含33个电源引脚(为使器件正常运行,所有电源引脚必须正确连接且不能悬空)时钟源模块,DSP有六种信号可以使DSP控制器复位,即电源复位、复位引脚~RS、软件复位、非法地址复位、看门狗定时器溢出、欠压复位六种复位信号。
所以在设计的初期,把它分成了五个模块。
其中复位采用电源复位的方式,由引脚PCRESET引起。
为了可靠复位,其中低电平的有效时间至少6个CPU时钟周期。
DSP最小系统组成框图如图1所示。
图1DSP最小系统
其中:
开关SW-PB、电容以及电阻构成一个简单的抚慰电路;晶振与两个并联电容接在XTAL1与XTAL2为2812提供外部时钟;HT7133芯片将5V直流电源转换为3.3V直流电源构成电源模块为2812供电。
2.2.2系统框图设计
该系统包括温度采集模块、F2812芯片、AD转换模块以及液晶显示模块,首先通过热敏电阻对外界温度的变化,从而改变其电位的变化,F2812芯片等待中断并接收数据,然后送入AD转换模块,AD对模拟信号进行转换,并将转换结果存放在结果寄存器的高12位,为保证数据精确多次采样求平均值,最后通过算法转换,将结果显示在LCD液晶上。
系统设计流程如图2所示。
图2系统设计流程图
2.3单元电路的设计
2.3.1温度采集电路
考虑到此次使用的是非线性负温度系数的热敏电阻,因此采用桥式电路尽量确保其精度,并使用低压基准芯片MC1403为电路提供基准电压,确保其尽量减少外界不必要因素的影响。
温度采集电路如图4所示。
图3温度采集电路
2.3.2单元模块的分析
(1)MC1403低压基准芯片引脚如图4所示。
图4MC1403低压基准芯片引脚图
Vin端口输入一个4.5~40V的模拟电压值(接P2口的1引脚),在Vout端输出了一个稳定的电压值(接P2口的1引脚,为AD模块提供参考模拟高电平),GND端接模拟地(接P2口的33引脚)为AD提供参考模拟低电平,并与数字地短接。
(2)AD转换模块
当模/数转换完成后,读取结果寄存器前,最好先读取模/数转换控制寄存器ADCRL2的ADCRESULT0或ADCRESULT1,以确定当前结果寄存器的状态,保证读取的结果是正确。
另外,要注意12位的转换结果放在结果寄存器中的高12位上,要进行位移转换,该12位数据与外部模拟输入电压的关系为:
12位数字结果=4095*(输入电压/基准电压)
基准电压:
3V
输入电压:
A/D采集的电压
12位数字结果:
12位的转换结果是放在结果寄存器的高12位上。
(3)LCD液晶显示模块
DSP经常会对读写周期较慢的输入/输出设备(如液晶显示模块、打印机、键盘等)进行访问,通常以下两种方法来解决DSP与这些慢速设备之间的输入/输出时序匹配问题。
直接访问方式是将DSP的读写信号限于慢速设备接口控制板引出的读写信号线直接相连,时序由DSP内部读写逻辑控制。
由于慢速外设的读写周期相对DSP较慢,是两者的时序匹配,还必须进行一些时序方面的控制处理。
一中处理方法是软件编程等待状态发生器,将外部总线周期扩展到数个机器周期。
由于受硬件条件的限制,这种扩展通常也是有限的。
液晶显示为128行和64列的矩阵,它分左右两个平面,而一个字是16行和16列的矩阵,在按页的显示中每一页是一个8行和128列的矩阵,所以每一行字是分两页显示的
系统设计总电路图如图5所示。
图.5系统设计总电路图
(4)单片机与PC机串口通讯
DSP有一个全双工的串行通讯口,所以DSP和电脑之间可以方便地进行串口通讯。
进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而DSP的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。
我们采用了三线制连接串口,也就是说和电脑的9针
串口只连接其中的3根线:
第5脚的GND、第2脚的RXD、第3脚的TXD。
这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示,MAX232的第10脚和DSP的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。
全双工的串行通讯口原理图如图1所示:
图1异步串行通讯原理图
DSP控制器串行通信接口(SCI)是一个标准的通用异步接收/发送(UART)通信接口。
它的接收器和发送器都是双缓冲的。
DSP控制器串行通信接口(SCI)有自已的使能和中断位,它们可以半双工或全双工方式工作。
为了保证数据的完整性,串行通信接口对接收的数据进行间断检测、奇偶性、超时和帧错误的检查。
位速率(波特率)可通过一个16位的比特率选择寄存器进行编程,因此,可以有超过65000种不同的速率。
SCI模块是一个8位片内外设,通过DSP的16位外部数据总线的低8位与外部设备通信。
SCI的物理描述:
(1)两个I/O引脚。
*SCIRXD(SCI接收数据输入)
*SCITXD(SCI发送数据输出)
(2)通过一个16位波特率选择寄存器的编程,可得到超过65000种不同的可编程位速率。
(3)1~8的可编程数据字长。
(4)长度为1位或2位的可编程停止位。
(5)内部产生的串行时钟。
(6)四个错误检测标志。
*奇偶性错误*超限错误
*帧错误*间断检验
(7)两种唤醒多处理器模式,可与任意通信格式一起使用。
*空闲线路唤醒*位寻址唤醒
(8)半双工或全双工操作。
(9)双缓冲接收和发送功能。
(10)接收和发送操作均可通过中断或查询操作进行,相应的状态标志如下:
发送器:
TXRDY标志(发送器缓冲寄存器准备好接收另一个字符)和TXEMPTY标志(发送移位寄存器空)。
接收器:
RXRDY标志(准备从接收缓冲寄存器中读出一个新字符)、BRKDT标志(间断条件发生)和RXERROR,可用来监视四个中断条件。
(11)发送器和接收器中断的分立的使能位(间断除外)。
(12)SCI数据,不管是接收的、还是发送的,都是NRZ(非归零)格式的。
2.4软件程序设计
2.4.1软件系统流程图
软件系统流程如图6所示。
图6软件系统流程图
2.4.2软件程序设计
程序主要包括主程序、中断、延时、A/D转换、算法转换、液晶显示等子程序,实现温度采集与显示的功能,程序详见附录。
此次课设我主要负责AD转换、算法转换和主程序部分。
AD转换部分我采用单通道采样方式对温度采集电路发送的值进行转换,并使用了第一组的6号中断对电路进行定时采样,由于考虑到热敏电阻比较灵敏,我采用了多次采样求平均值的方法确保数据精确。
算法转换部分主要是对AD采集并转换的值进行进一步的转换,主要是将桥式电路的电压与热敏电阻的关系和拟合的温度与电阻的关系整合在一起,使其转换为我们能看懂的温度,并将其一位一位拆分开来复制到LCD液晶显示子程序,将结果显示字液晶屏上。
(1)NTC热敏电阻原理及应用
NTC热敏电阻器在室温下的变化范围在10O~1000000欧姆,温度系数-2%~-6.5%。
NTC热敏电阻器可广泛应用于温度测量、温度补偿、抑制浪涌电流等场合。
NTC热敏电阻为负温度系数热敏电阻。
零功率电阻值RT(Ω):
RT指在规定温度T时,采用引起电阻值变化相对于总的测量误差来说可以忽略不计的测量功率测得的电阻值。
电阻值和温度变化的关系式为:
RT=RNexpB(1/T–1/TN)
RT:
在温度T(K)时的NTC热敏电阻阻值。
RN:
在额定温度TN(K)时的NTC热敏电阻阻值。
T:
规定温度(K)。
B:
NTC热敏电阻的材料常数,又叫热敏指数。
exp:
以自然数e为底的指数(e=2.71828…)。
该关系式是经验公式,只在额定温度TN或额定电阻阻值RN的有限范围内才具有一定的精确度,因为材料常数B本身也是温度T的函数。
额定零功率电阻值R25(Ω):
根据国标规定,额定零功率电阻值是NTC热敏电阻在基准温度25℃时测得的电阻值R25,这个电阻值就是NTC热敏电阻的标称电阻值。
通常所说NTC热敏电阻多少阻值,亦指该值。
材料常数(热敏指数)B值(K)
RT1:
温度T1(K)时的零功率电阻值。
RT2:
温度T2(K)时的零功率电阻值。
T1,T2:
两个被指定的温度(K)。
对于常用的NTC热敏电阻,B值范围一般在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
图7拟合后的直线
其中横坐标为温度,单位为K;纵坐标为电阻值。
由硬件部分(电桥电路)得到电压与电阻值之间的关系:
V=2.5*R1/(R1+R),其中R1=200Ω,与上式相结合并经调试修改后,得到温度值与电压之间的关系:
T=140.0-0.67*(500.0/V-200.0)
//温度计算子程序
voidWendu(floatc)
{
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=1~65535时(BRR=波特率选择寄存器中的16位值):
波特率是按位计算的,而每位需要8个SCICLK周期。
当BRR=0时
串行通信过程:
①在进行串行通信之前,先对SCI通信控制寄存器SCICCR进行设置。
信息块的起始位始终是1位,停止位可选择1位或2位。
数据位的长度是可编程的,可设置1~8位,由SCICCR的SCICHAR2:
0设置。
数据位长度小于8位时,写到发送缓冲寄存器SCITXBUF的数据只有低L位被发送(这些数据位必须右对齐,因为对于少于8位的字符,左边的位是被忽略的)。
校验位可设,由SCICCR的PARITYENABLE(5位)设置。
校验方式有两种,奇、偶校验,由SCICCR的PARITY(6位)设置。
空闲线方式与地址位方式的选择,由SCICCR的ADDR/IDLEMODE(3位)设置。
SCICCR的SCIENA(4位)是一个总开关位。
②在信息块的格式确定后就要确定串行通信的波特率。
串行通信的时钟SCICLK是由时钟源模块的SYSCLK按照SCI波特率寄存器规定的分频系数分频后得到的。
16位的波特率寄存器SCIHBAUD和SCILBAUD分别决定了波特率寄存器的高、低8位,二者共同构成了16位的波特率数值。
③设置好串行通信的波特率后,就要确定接收、发送部分的控制位,这些由SCI控制寄存器SCICTL1、2来完成,
④当数据写入SCITXBUF时,SCICTL2的TXRDY(7位)被清0;当SCITXBUF的数据全部移出后,则SCICTL2的TXRDY被置1,并且产生发送中断TXINT。
(3)SCI下位机程序
#include”DSP281x_Device.h”
//使用的函数原型声明
voidGpio_select(void);
voidSpeedUpRevA(void);
voidSCI_Init(void);
interruptvoidSCI_TX_isr(void);
interruptvoidSCI_RX_isr(void);
//全局变量
charmessage[]=temperature;
voidmain(void)
{
InitSystem();//初始化DSP内核寄存器
Gpio_select();//配置GPIO复用功能寄存器
InitPieCtrl();//调用外设中断扩展初始化单元PIE-unit
//(代码:
DSP281x_PieCtrl.c)
InitPieVectTable();//初始化PIEvector向量表
//(代码:
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_RX_INT中断
PieCtrlRegs.PIEIER9.bit.INTx1=1;
//使能CPUINT9
IER|=ox100;
//全局中断使能和更高优先级的实时调试事件
EINT;//全局中断使能INTM
ERTM;//使能实时调试中断DBGM
SCI_Init();
While
(1)
{
PieCtrlRegs.WDKEY=ox55;//看门狗控制
PieCtrlRegs.WDKEY=oxAA;
EDIS;//使能寄存器保护
}
}
voidGpio_select(void)
{
EALLOW;//解除寄存器保护
GpioMuxRegs.GPAMUX.all=ox0;//所有GPIO端口配置为I/O
GpioMuxRegs.GPBMUX.all=ox0;
GpioMuxRegs.GPFMUX.all=ox0;
GpioMuxRegs.GPDMUX.all=ox0;
GpioMuxRegs.GPAMUX.bit.SCIRXDA_GPIOF5=1;//配置SCI_RX
GpioMuxRegs.GPAMUX.bit.SCIXTDA_GPIOF4=1;//配置SCI_TX
GpioMuxRegs.GPEMUX.all=ox0;
GpioMuxRegs.GPGMUX.all=ox0;
GpioMuxRegs.GPADIR.all=ox0;//GPIOPORT配置为输入
GpioMuxRegs.GPBDIR.all=ox0;//GPIOPORT配置为输入
GpioMuxRegs.GPDDIR.all=ox0;//GPIOPORT配置为输入
GpioMuxRegs.GPEDIR.all=ox0;//GPIOPORT配置为输入
GpioMuxRegs.GPFDIR.all=ox0;//GPIOPORT配置为输入
GpioMuxRegs.GPGDIR.all=ox0;//GPIOPORT配置为输入
//设置所有GPIO输入的量化值等于0
GpioMuxRegs.GPAQUAL.all=ox0;
GpioMuxRegs.GPBQUAL.all=ox0;
GpioMuxRegs.GPDQUAL.all=ox0;
GpioMuxRegs.GPEQUAL.all=ox0;
EDIS;//使能寄存器保护
}
voidInitSystem(void)//初始化DSP内核寄存器
{
EALLOW;//解除寄存器保护
SysCtrlRegs.WDCR=ox00AF;//配置看门狗
//ox00E8禁止看门狗,预定标系数Prescaler=1
//ox00AF不禁止看门狗,预定标系数Prescaler=64
SysCtrlRegs.SCSR=0;//看门狗产生复位
SysCtrlRegs.PLLCR.bit.DIV=10;//配置处理器锁相环,倍频系数为5
SysCtrlRegs.HISPCP.all=ox1;//配置高速外设时钟分频系数为2
SysCtrlRegs.LOSPCP.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.ECANENCLK=0;
SysCtrlRegs.PCLKCR.bit.ADCENCLK=0;
EDIS;//使能寄存器保护
}
voidSCI_Init(void)
{
SciaRegs.SCICCR.all=ox0007;//1bit停止位无循环模式
//无极性,字符长度:
8bit
//异步模式,空闲线协议
SciaRegs.SCICTL1.all=ox0003;//使能TX、RX、内部SCICLK
//RXERR、SLEEP、TXWAKE
SciaRegs.SCIHBAUD=487>>8;//波特率:
9600(LSPCLK=37.5MHz)
SciaRegs.SCILBAUD=487&ox00FF;
SciaRegs.SCICTL2.bit.TXINTENA=1;//使能SCI发送中断
SciaRegs.SCICTL2.bit.RXBKINTENA=1;//使能SCI接收中断
SciaRegs.SCIFFTX.all=oxE060;
//bit15=1:
退出复位
//bit14=1:
使FIFO增强模式
//bit13=1:
使能TXFIFO操作
//bit6=1:
CLRTXEFINT-标志
//bit5=1:
使能TXFIFO匹配
//bit4~0:
如果TXFIFO=0,产生TX_ISR中断
SciaRegs.SCIFFRX.all=oxE065;//Rx中断级设置为5
SciaRegs.SCICTLI.all=ox0023;//使SCI退出复位
}
//SCI_A发送中断服务程序
//发送字符串message[]
interruptvoidSCI_TX_isr(void)
{
inti;
for(i=0;i<16;i++)
SciaRegs.SCITXBUF=message[i];
//重新初始化PIE,为SCI_ATX准备接收下一次中断
PieCtrlRegs.PIEACK.all=ox0100;//响应中断
}
(4)上位机程序如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.IO;
usingSystem.IO.Ports;
namespaceWEUDUCELIANG
{
publicpartialclassForm1:
Form
{
stringserialReadString,ss,cc,string1;
inti=0;
publicForm1()
{
InitializeComponent();
timer1.Interval=1;//设置timer控件时间间隔
timer1.Enabled=false;
serialPort1.DataBits=8;
serialPort1.StopBits=System.IO.Ports.StopBits.One;
serialPort1.ReadBufferSize=500000;
serialPort1.RtsEnable=true;//如果是RS232转RS485,此句必须要,否则不能通讯
serialPort1.NewLine="\r\n";
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
if(button1.Text=="打开串口")
{
if(!
serialPort1.IsOpen)//如果串口是关闭的
{
//设定串口信息和波特率
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();//打开串口
butto
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)