专业技能考核培训设计报告.docx
- 文档编号:5401565
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:31
- 大小:576.08KB
专业技能考核培训设计报告.docx
《专业技能考核培训设计报告.docx》由会员分享,可在线阅读,更多相关《专业技能考核培训设计报告.docx(31页珍藏版)》请在冰豆网上搜索。
专业技能考核培训设计报告
专业技能考核培训设计报告
姓名:
学号:
专业:
设计题目:
基于PC、MCU和FPGA的远程
数据采集系统设计
专题:
专业技能考核
指导教师:
2011年5月
专业技能考核培训设计任务书
专业年级学号学生姓名
任务下达日期:
2011年5月23日
设计日期:
2011年5月23日至2011年6月10日
设计题目:
基于PC、MCU和FPGA的远程数据采集系统设计
设计专题题目:
专业技能考核
设计主要内容和要求:
利用上位计算机、单片机、可编程逻辑器件和ADC器件构成一个远程数据采集系统,系统具备远程/就地两种控制模式,具有8通道循环采集和指定通道采集两种数据采集方式。
具体要求如下:
1、FPGA硬件电路和AHDL控制软件设计
电路具备控制ADC0809的采集功能,具备6位数码管动态扫描功能,具备8位按键输入功能,具备和单片机信号交换功能。
2、单片机硬件电路和监控软件设计
电路具备和FPGA交换信息,以及和上位机算计进行RS232的通讯功能,能将上位机发出的控制指令下达到FPGA中,并将采集的数据传送到上位计算机中。
单片机程序要求用C51编制。
3、上位机算计软件设计
利用VB或VC程序编制上位计算机控制程序,实现远程数据采集功能并实时显示采集的数据和通道号。
指导教师签字:
摘要
在数字技术飞速发展的今天,将各种模拟信号转化为数字信号并进行相应的处理不仅可以提高系统性能还可以充分利用数字信号的各种处理算法来提高系统的灵活性和可靠性。
随着单片机的运算速度的提高,在一些由单片机构成的较小系统中对信号进行实时处理已经成为可能,并且越来越受到人们的重视。
这就要求作为最底层的数据采集系统既要具有很高的采样速率.又要能提供更丰富的原始数据信息。
系统经常需要采集各种模拟量信号、数字量信号,并对它们进行相应的处理。
本文介绍一种基于EP1K30TC144-3的FPGA和89S52单片机的一种电压测量电路。
基本内容包括单片机最小系统、键盘和LED显示电路,以及设计系统涉及的其他电路。
系统硬件电路由标准电路和自制电路两部分组成。
标准电路包括单片机最小系统、6个LED数码管电路和键盘电路以及FPGA系统,这部分电路已制成电路板,自制电路自行设计焊接,包含标准电路不具备的其他电路。
FPGA数据采集板接受指令后进行现场数据采集,并通过串行通信将数据发送到PC机,在通信过程中完全遵守RS-232协议,具有较强的通用性和推广价值。
然后本文重点介绍了该采集系统的硬件设计原理和软件设计框架,实现微机数据采集系统的软件和硬件设计方法。
系统软件根据设计任务自行独立编制并进行调试。
最终实现利用上位机远程控制系统进行数据采集功能并实时显示采集的数据和通道号。
关键字:
数据采集;FPGARS一232;TCP/IP;电压采集;循环采集。
概述
设计流程说明
在对远程数据采集装置进行设计时,其设计分为硬件设计与软件设计两部分,具体的设计流程如图:
硬件制作
元器件选择
设计计算
比较所选方案
系统调试
编制流程
设计思想
设计思路
要设计一个远程数据采集系统,可以利用上位计算机、单片机、可编程逻辑器件和ADC器件构成,使系统具备远程/就地两种控制模式,具有8通道循环采集和指定通道采集两种数据采集方式。
主要电路模式有FPGA硬件电路、单片机硬件电路、A/D转换电路、译码显示电路以及设计系统涉及的其他电路。
设计中采用了模数转换器,利用AD0809型8位MOS型A/D转换器,可实现8路模拟信号的分时采集,片内有8路模拟选通开关,以及相应的通道地址锁存用译码电路,实现模拟信号到数字信号的转换。
控制部分采用单片机89C52来完成。
显示部分利用LED数码管显示模块,来显示采集到的数据。
FPGA硬件电路具备控制AD0809的采集功能,具备6位数码管动态扫描功能,具备8位按键输入功能,具备和单片机信号交换功能。
单片机硬件电路具备和FPGA交换信息,以及和上位机算计进行RS232的通讯功能,能将上位机发出的控制指令下达到FPGA中,并将采集的数据传送到上位计算机中。
上位机利用VB或VC程序编制上位机计算机控制程序,实现远程数据采集功能并实现显示采集的数据和通道口。
方案论证及比较
(1)单片机控制方案的选用
方案一:
采用8031为核心,由于其内部没有存储器,所以利用2764扩展8KB的外部存储器,用8031的两组I/O接口作为存储器接口。
方案二:
采用AT89C52位核心,对AD转换的数据进行采集并显示。
其内置8K字节点擦除可编程EEPROM片内程序存储器和256字节RAM,无需外部扩展。
所以选用方案二,采用AT89C52作为核心,其片内程序存储器空间足够满足本系统程序存储的需要,可以省去对片外EPROM程序存储器和地址锁存器,使电路结构简捷。
(2)EPGA控制方案的选用
方案一:
采用EEP1K30QC-208-3为核心,具备6位数码管动态扫描功能,具备8位按键输入功能,具备和单片机信号交换功能等。
方案二:
采用EEP1K30TC144-3为核心,同样具备6位数码管扫描、8位按键输入和单片机信号交换等功能,且管脚数较少,适于本次设计使用。
所以选用方案二,采用EEP1K30TC144-3作为核心。
其功能已经满足设计需要,且应用简单,管教分配方便,使电路结构简捷。
硬件电路设计
电路模块
FPGA硬件电路
本模块的核心是EEP1K30TC-144-3芯片,主要用于连结其他各电路模块,并与单片机进行信号交换。
芯片采用贴片焊接工艺,将芯片各个管脚焊接与印刷版表层。
由于各个管教之间的间距因其数量和集成度而易造成管脚间短路,故贴片焊接精度要求很高。
2.1.2单片机硬件电路
单片机选用的是ATMEL公司推出的AT89S52,如图3.2.1.1所示。
该芯片具有低功耗、高性能的特点,是采用CMOS工艺的8位单片机,与AT89C51完全兼容。
AT89S52还有以下主要特点:
1采用了ATMEL公司的高密度、非易失性存储器技术;
2其芯片内具有256字节RAM,8KB的可在线编程(ISP)FLASH存储器;
3有两种低功耗节电工作方式:
空闲模式和掉电模式;
4片内有一个看门狗定时器(WDT),WDT包含一个14位计数器和看门狗定时器复位寄存器(WDTRST),只要对WDTRST按顺序先写入01EH,后写入0E1H,WDT便启动,当CPU由于扰动而是程序陷入死循环后“跑飞”状态时,WDT即可有效的使系统复位,提高了系统的抗干扰能力。
2.1.3A/D转换电路
核心为ADC0809芯片,用于将采集到的模拟信号转换为数字信号,并通过输出口输出至LED数码管显示出来。
(1)原理图
(2)
ADC0809芯片介绍
逐次比较型
CMOS工艺制造
单电源供电
无需零点和满刻度调整
具有三态锁存输出缓冲器,输出与
TTL兼容
易与各种微控制器接口
具有锁存控制的8路模拟开关
分辨率:
8位
功耗:
15mW
最大不可调误差小于±1LSB
转换时间(
)128us
转换精度:
ADC0809没有内部时钟,必须由外部提供,其范围为10~1280kHz。
典型时钟频率为640kHz
2.引脚排列及各引脚的功能,引脚排列如图2-3所示。
各引脚的功能如下:
IN0~IN7:
8个通道的模拟量输入端。
可输入0~5V待转换的模拟电压。
D0~D7:
8位转换结果输出端。
三态输出,D7是最高位,D0是最低位。
A、B、C:
通道选择端。
当CBA=000时,IN0输入;当CBA=111时,IN7输入。
ALE:
地址锁存信号输入端。
该信号在上升沿处把A、B、C的状态锁存到内部的多路开关的地址锁存器中,从而选通8路模拟信号中的某一路。
START:
启动转换信号输入端。
从START端输入一个正脉冲,其下降沿启动ADC0809开始转换。
脉冲宽度应不小于100~200ns。
EOC:
转换结束信号输出端。
启动A/D转换时它自动变为低电平。
OE:
输出允许端。
CLK:
时钟输入端。
ADC0809的典型时钟频率为640kHz,转换时间约为100μs。
REF(-)、REF(+):
参考电压输入端。
ADC0809的参考电压为+5V。
VCC、GND:
供电电源端。
ADC0809使用+5V单一电源供电。
当ALE为高电平时,通道地址输入到地址锁存器中,下降沿将地址锁存,并译码。
在START上升沿时,所有的内部寄存器清零,在下降沿时,开始进行A/D转换,此期间START应保持低电平。
在START下降沿后10us左右,转换结束信号变为低电平,EOC为低电平时,表示正在转换,为高电平时,表示转换结束。
OE为低电平时,D0~D7为高阻状态,OE为高电平时,允许转换结果输出。
(3)ADC0809通道地址选择表
IN0-IN7:
8条模拟量输入通道
ADC0809对输入模拟量要求:
信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。
地址输入和控制线:
4条
ALE为地址锁存允许输入线,高电平有效。
当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。
A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。
通道选择表如下表所示。
数字量输出及控制线:
11条。
地址码
输入通道
C
B
A
0
0
0
IN0
0
0
1
IN1
0
1
0
IN2
0
1
1
IN3
1
0
0
IN4
1
0
1
IN5
1
1
0
IN6
1
1
1
IN7
ST为转换启动信号。
当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。
EOC为转换结束信号。
当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。
OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。
OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。
D7-D0为数字量输出线。
ADC0809结构
一个8位二进制的AD采集数据转换为5位10进制显示数据。
对应关系:
00H~FFH---0.000V~5.000V;AD分辨率为:
5/255=19.6mV;算法:
Y=X×19.6=X×196/10
具体步骤:
1、求Y=X×196,结果为双字节二进制数
2、将Y转换为十进制数,最大是一个5位的十进制数
3、去掉十进制数的最低位,相当于除10。
(4)ADC0809转换时序图
串行通讯
RS一232通信
串行通信端口(SerialCommunicationPort)在系统控制的范畴中一直扮
演着极其重要的角色,它不仅没有因为时代的进步而遭淘汰,反而在规格上越
来越先进,应用也越来越广泛。
现在,串行通信端口(RS一232)是计算机上的
标准配置,用途上则以连接调制解调器来传输数据最为常见。
RS一232通信端口是每台计算机上的必要配置,通常有COMI与COM2两个
端口。
计算机上的RS一232均是公头,在一般个人计算机上的外观如图4.1所
示。
图4.1计算机上的串行端口
端口共有9个引脚,每一个引脚都有其特定的名称与用途,
虽然Rs一232最早是用于和调制解调器进行连接,但是技术发展到现在,很多其他的设备也是通过RS一232和计算机进行连接,因此只要妥善利用各个引脚,计算机就可以方便地和各个设备进行数据传输或联机控制了。
本系统通过应用程序目臣务器上的串行端口和FPGA数据采集板进行串行通信达到控制采集数据的目的。
系统结构原理
2.2.1系统结构图
原理说明
计算机通过RS232接口下载程序到CPLD电路板及单片机内,控制电路采集数据并通过ADC0809芯片将模拟信号转换为数字信号并由数码管显示出来。
其中,单片机的作用为执行指令进行数据采集,CPLD则控制A/D转换,译码显示等模块,并与单片机进行信号交换。
软件设计
程序框图
主程序框图
就地操作JDCZ程序框图
数据采集SJCJ程序框图
结果转换JGZH子程序框图
定时中断程序框图
通讯中断程序框图
程序代码
单片机程序
#include
unsignedintm,CH;
/*主程序*/
voidmain(void)
{
TMOD=0x01;
TH0=0x03C;
TL0=0x0B0;
SCON=0x50;/*SCON:
模式1,8-bitUART,使能接收*/
TMOD|=0x20;/*TMOD:
timer1,mode2,8-bitreload*/
TH1=0xFD;/*TH1:
reloadvaluefor9600baud@11.0592MHz*/
TR1=1;/*TR1:
timer1run*/
EA=1;/*打开总中断*/
ES=1;/*打开串口中断*/
ET0=1;
while
(1)/*主循环不做任何动作*/
{
//SBUF=P0;
//while(TI==0);
//TI=0;
}
}
voidUART_SER(void)interrupt4//串行中断服务程序
{
unsignedcharTemp;//定义临时变量
if(RI)//判断是接收中断产生
{
RI=0;//标志位清零
Temp=SBUF;
if(Temp==0x08)
{
TR0=1;
P2=0x08;
}
else//读入缓冲区的值
{P2=Temp;
TR0=0;}//把值输出到P1口,用于观察
}
if(TI)//如果是发送标志位,清零
TI=0;
}
voidTimer0_isr(void)interrupt1
{
m++;
if(m>=40)
{
m=0;
TH0=0x03C;
TL0=0x0B0;
CH++;
P2=CH;
if(CH>0x07)
{
CH=0x00;}
}
else
{
TH0=0x03C;
TL0=0x0B0;
}
}
FPGA程序
数据采集代码
Subdesignady
(inclk,eoc,ds[7..0],addin[3..0]:
input;
add[3..0],otclk,st,dp[7..0],oe:
output;
)
Variable
fpq[4..0],fp:
dff;
sm[1..0],dp[7..0],st:
dff;
Begin
oe=vcc;
(fpq[],fp).clk=inclk;
Iffpq[]==19then
fpq[]=0;fp=!
fp;
Else
fpq[]=fpq[]+1;fp=fp;
Endif;
(sm[],st,dp[]).clk=fp;otclk=fp;
add[3..0]=addin[3..0];
Casesm[]is
When0=>
st=gnd;dp[]=ds[];
sm[]=1;
When1=>
st=gnd;dp[]=dp[];
ifeocthen
sm[]=2;
else
sm[]=1;
endif;
When2=>
st=vcc;sm[]=0;dp[]=ds[];
Endcase;
End;
十六进制转换十进制代码
Subdesignbcdx
(ibd[15..0],inclk:
input;
bcd4[3..0],bcd3[3..0],bcd2[3..0],bcd1[3..0],bcd0[3..0]:
output;
)
Variable
b1[3..0],b2[3..0],b3[3..0],b4[3..0],b0[3..0]:
dff;
get[15..0],st,fpq[8..0],fp:
dff;
b0r[3..0],b1r[3..0],b2r[3..0],b3r[3..0],b4r[3..0]:
dff;
Begin
(fpq[],fp).clk=inclk;
Iffpq[]==249then
fp=!
fp;fpq[]=0;
Else
fp=fp;fpq[]=fpq[]+1;
Endif;
st.clk=fp;(b1[],b2[],b3[],b4[],b0[],get[]).clk=inclk;
(b1r[],b2r[],b3r[],b4r[],b0r[]).clk=inclk;
Casestis
Whengnd=>
get[]=ibd[];st=vcc;
b1r[]=b1r[];b2r[]=b2r[];b3r[]=b3r[];b4r[]=b4r[];b0r[]=b0r[];
Whenvcc=>
Ifget[]==0then
b1r[]=b1[];b2r[]=b2[];b3r[]=b3[];b4r[]=b4[];b0r[]=b0[];
b1[]=b1[];b2[]=b2[];b3[]=b3[];b4[]=b4[];b0[]=b0[];
st=gnd;
Else
b1r[]=b1r[];b2r[]=b2r[];b3r[]=b3r[];b4r[]=b4r[];b0r[]=b0r[];
get[]=get[]-1;
st=vcc;
Ifb0[]==9then
b0[]=0;
Ifb1[]==9then
b1[]=0;
Ifb2[]==9then
b2[]=0;
Ifb3[]==9then
b3[]=0;
Ifb4[]==9then
b4[]=0;
Elseb4[]=b4[]+1;
Endif;
Elseb3[]=b3[]+1;b4[]=b4[];
Endif;
Else
b2[]=b2[]+1;b3[]=b3[];b4[]=b4[];
Endif;
Else
b1[]=b1[]+1;b2[]=b2[];b3[]=b3[];b4[]=b4[];
Endif;
Else
b0[]=b0[]+1;b1[]=b1[];b2[]=b2[];b3[]=b3[];b4[]=b4[];
Endif;
Endif;
Endcase;
bcd4[]=b4r[];
bcd3[]=b3r[];
bcd2[]=b2r[];
bcd1[]=b1r[];
bcd0[]=b0r[];
end;
数码管显示代码
subdesigncountx
(inclk,bcd4[3..0],bcd3[3..0],bcd2[3..0],bcd1[3..0],bcd0[3..0],bcd5[3..0]:
input;
outa[7..0],bitout[5..0]:
output;
)
variable
a[3..0],b[3..0],c[3..0],d[3..0],e[3..0],f[3..0]:
dff;
mda[15..0],mdb[9..0]:
dff;
mseg[3..0],bitout[5..0]:
dff;
st[5..0]:
dff;
fpa,fpb:
dff;
begin
a[]=bcd3[];b[]=bcd2[];c[]=bcd1[];d[]=bcd0[];e[]=bcd4[];f[]=bcd5[];
fpa.clk=inclk;fpb.clk=fpa;mseg[].clk=fpa;
(a[],b[],c[],d[],e[],f[]).clk=fpb;mdb[].clk=fpa;--fpa1000Hz频率
st[].clk=fpa;mda[].clk=inclk;bitout[].clk=fpa;--fpb1Hz,inclk40Mhz
ifmda[]==9999then--40MHz分频,得1000Hz
mda[]=0;fpa=!
fpa;
else
mda[]=mda[]+1;fpa=fpa;
endif;
ifmdb[]==499then--1000Hz分频,得1Hz
mdb[]=0;fpb=!
fpb;
else
mdb[]=mdb[]+1;fpb=fpb;
endif;casest[]is
when0=>
mseg[]=d[];
bitout[]=1;
st[]=1;
when1=>
mseg[]=c[];
bitout[]=2;
st[]=2;
when2=>
mseg[]=b[];
bitout[]=4;
st[]=3;
when3=>
mseg[]=a[];
bitout[]=8;
st[]=4;
when4=>
mseg[]=e[];
bitout[]=16;
st[]=5;outa7=vcc;
when5=>
mseg[]=f[];
bitout[]=32;
st[]=0;
endcase;
Table
mseg[3..0]=>outa[7..0];
h"0"=>h"3f";---"0111111"
h"1"=>h"06";
h"2"=>h"5b";
h"3"=>h"4f";
h"4"=>h"66";
h"5"=>h"6d";
h"6"=>h"7d";
h"7"=>h"07";
h"8"=>h"7f";
h"9"=>h"6f";
endtable;
end;
系统调试
系统调试分为硬件调试和软件调试两部分,在硬件设计焊接结束后应注意调试程序的编写,全面系统地测试出系统的基本功能,为后来的程序编写扫清非主观障碍。
硬件部分
FPGA芯片采用的是贴片方形塑料封装,144个管脚,排列密集,焊接难度大。
尤其是焊接失误后的调整。
在翟老师的指导下我学会了焊接和去锡,并掌握了如何利用烘枪取下芯片而不致损坏。
在通电进行AD转换测试中,数码管不显示,分开测试检查问题,先用好的小板子放在大板子上,检查是不是大板的问题,在用小板放在好的大板上,检查是不是小板的问题。
小板上有管脚短路,两个管脚粘在一起,通过去锡解决问题。
软件部分
软件部分的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 专业技能 考核 培训 设计 报告