远程数据采集系统设计2课案.docx
《远程数据采集系统设计2课案.docx》由会员分享,可在线阅读,更多相关《远程数据采集系统设计2课案.docx(30页珍藏版)》请在冰点文库上搜索。
远程数据采集系统设计2课案
中国矿业大学徐海学院
专业技能考核培训设计报告
姓名:
李飞银学号:
22133004
专业:
电子科学与技术
设计题目:
基于PC、MCU和FPGA的远程数据采集系统设计
专题:
指导教师:
2009年12月
专业技能考核培训设计任务书
专业年级电子科学与技术13级学号22133004
学生姓名李飞银
任务下达日期:
2016年06月?
?
日
设计日期:
2009年11月?
?
日至2009年12月20日
设计题目:
基于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系统。
系统软件根据设计任务编制并实现功能:
利用上位机远程控制系统进行数据采集功能并实时显示采集的数据和通道号。
关键字:
89S52、FPGA、AHDL、上位机、数据采集、串口通信
第一章概述
1.1课题
数据采集系统的设计是单片机系统实际的必修课题,他完完全全地体现了微控制器在实际应用中独特功能:
通过微控制器,可以将许多产品实现数字化、自动化、有效地进行相关的辅助操作,并实现远程控制。
之前的设计内容主要是以AT89C52芯片为核心,设计简单的数据采集系统,用以完成基本的数据采集功能。
而本次设计将实现远程控制的数据采集系统,使系统功能更进一步地优化。
1.2设计流程说明
在对远程数据采集装置进行设计时,其设计分为硬件设计与软件设计两部分,具体的设计流程如图:
硬件制作
元器件选择
设计计算
比较所选方案
系统调试
编制流程
1.3设计思路
1.3.1设计方案
要设计一个远程数据采集系统,可以利用上位计算机、单片机、可编程逻辑器件和ADC器件构成,使系统具备远程/就地两种控制模式,具有8通道循环采集和指定通道采集两种数据采集方式。
主要电路模式有FPGA硬件电路、单片机硬件电路、A/D转换电路、译码显示电路以及设计系统涉及的其他电路。
设计中采用了模数转换器,利用AD0809型8位MOS型A/D转换器,可实现8路模拟信号的分时采集,片内有8路模拟选通开关,以及相应的通道地址锁存用译码电路,实现模拟信号到数字信号的转换。
控制部分采用单片机89C52来完成。
显示部分利用LED数码管显示模块,来显示采集到的数据。
FPGA硬件电路具备控制AD0809的采集功能,具备6位数码管动态扫描功能,具备8位按键输入功能,具备和单片机信号交换功能。
单片机硬件电路具备和FPGA交换信息,以及和上位机算计进行RS232的通讯功能,能将上位机发出的控制指令下达到FPGA中,并将采集的数据传送到上位计算机中。
上位机利用VB或VC程序编制上位机计算机控制程序,实现远程数据采集功能并实现显示采集的数据和通道口。
1.3.2方案的选择
(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作为核心。
其功能已经满足设计需要,且应用简单,管教分配方便,使电路结构简捷。
第二章硬件电路设计
2.1电路模块
2.1.1FPGA硬件电路
本模块的核心是EEP1K30TC-144-3芯片,主要用于连结其他各电路模块,并与单片机进行信号交换。
芯片采用贴片焊接工艺,将芯片各个管脚焊接与印刷版表层。
由于各个管教之间的间距因其数量和集成度而易造成管脚间短路,故贴片焊接精度要求很高。
FPGA框图如下。
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芯片介绍
输入:
8路(0V~5V)
线性误差:
1LSB
数字输出:
TTL电平,三态输出
电源:
+5V~15V
时钟频率:
640KHz(典型)
转换时间:
100μs
分辨率:
8位
功耗:
15mW
输入电压范围:
0V~VREF
转换方式:
逐次逼近
CMOS工艺,28Pin
输出:
(3)ADC0809通道地址选择表
(4)ADC0809结构
(5)ADC0809转换时序图
2.2系统结构原理
计算机通过RS232接口下载程序到CPLD电路板及单片机内,控制电路采集数据并通过ADC0809芯片将模拟信号转换为数字信号并由数码管显示出来。
其中,单片机的作用为执行指令进行数据采集,CPLD则控制A/D转换,译码显示等模块,并与单片机进行信号交换。
第三章软件设计
3.1程序框图
3.1.1主程序框图
3.1.2就地操作JDCZ程序框图
3.1.3数据采集SJCJ程序框图
3.1.4结果转换JGZH子程序框图
3.1.5定时中断程序框图
3.1.6通讯中断程序框图
3.2程序代码
3.1.1单片机程序
#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;
}
}
3.1.2FPGA程序
数据采集代码
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;
第四章系统调试
系统调试分为硬件调试和软件调试两部分。
4.1硬件部分
FPGA芯片采用的是贴片方形塑料封装,144个管脚,排列密集,焊接难度大,尤其是拐角的焊接。
在检测AD转换的功能上时,显示器没有显示,首先将小板安装在好的同学的板上测试,发现能够正常工作,那么问题就是在大板上,后来发现在电位器的一组排针上发生焊接问题,同时检查出了图和板子的不相符需要将板子上的电路线断开。
4.2软件部分
软件部分的编写从FPGA开始,首先实现对ADC0809的控制及数据传输,再在此基础上实现乘法器和16进制向BCD码转换,最后实现数码管的动态扫描输出以及和单片机的并行口通行。
16进制向BCD码转换的思路是,使十六进制数减一次1,则十进制数就加一个1,等十六进制数减为0,则转换结束。
在软件编程的过程中,存在很多的问题,这里通过老师的指导和同学之间的交流才设计好了软件程序。
第五章总结
此次实验设计过程中学到了很多,在硬件焊接上已经提高了很多,在焊接小单片机的时候面对144拐角,是非常容易出错的,在自己的努力下,还有老师的指导上焊接上掌握了更多的技巧,同时焊接过程更加的小心,如果损坏了连接地的拐角,那么这个单片机就坏了。
在设计编程上面,重新看了AHDL语言,使用软件进行编程和进行调试直到达到了课程设计的目的。
再与硬件想结合进行链接。
此次的课程设计在自己不熟悉的情况下还是向老师和同学请教的,其中有的内容还是有很多不太掌握,以后任需要不断的学习,以及对已学知识的巩固,希望在以后这样的课程设计上可以更加熟练的运用起来。
参考文献
[1]孙育才,《MCS-51系列单片微型计算机及其应用》,东南大学出版社
[2]曹巧媛,《单片机原理及应用——教学、实践、设计指导》,电子工业出版社
[3]谢自美,《电子线路设计·实验·测试》(2版),华中科技大学出版社
[4]胡汉才,《单片机原理及其接口技术》(2版),清华大学出版社
[5]张迎新,《单片机中级教程》,北京航空航天大学出版社
[6]丁元杰,《单片机原理与应用》,机械工业出版社
[7]单片机实验指导书
附录一:
元器件清单
名称
型号
规格
数量
电容
16V/470uF
电解电容
2
16V/2200uF
1
16V/22uF
6
0.1uF
独石电容
7
20pF
磁片电容
4
1//4W电阻
200
8
50
2
1K
6
2K
2
10K
2
4.7K
1
单片机
AT89S52
1
芯片座
DIP-40
2
DIP-20
1
DIP-28
1
DIP-32
1
DIP-14
3
DIP-16
1
芯片
74HC04
3
MAX232
1
发光二极管
红色
9
数码管
LG5011AH
6
薄码开关
8P
1
牛角座
无锁(10P)
1
按键
6*6*6mm
6
卧式串口
2
有源晶振
40M
1
晶振
22.1184M
2
二极管
1N4007
7
7805
1
阻排
4.7K
9P
1
1K
1
470
1
103
1
稳压电源
φ3.5空心座
1
双排针
40P
4
双排座
40P
4
电位器
103
1
附录二:
CPLD管脚分配
CPLD型号:
EEP1K30TC-144-3
1、时钟源
40MHz:
P183
22.1184MHz:
P80
2、输入开关及输出LED指示灯
开关KP1KP2KP3KP4KP5KP6KP7KP8
指示灯LED1LED2LED3LED4LED5LED6LED7LED8
管脚P94P95P96P97P99P100P101P102
3、RS232接口
TXD(PC)接到RXD(CPLD)的P182
RXD(PC)接到TXD(CPLD)的P93
4、数码管显示
SEG1—SEG6共6个共阴数码管,采用动态扫描显示方式,公共端G经反向后与CPLD的对应管脚相连。
字位码:
SEG1SEG2SEG3SEG4SEG5SEG6
管脚:
P121,P122,P128,P130,P131,P132
字型码:
a,b,c,d,e,f,g,p
管脚:
P133,P135,P136,P137,P138,P140,P141,P142
5、单片机扩展槽及外扩槽
在主板上留有一个模拟单片机扩展槽,用于CPLD模拟单片机之用,其与CPLD的接口分别为,
P0.0—P0.7(39—32)对应与P44,P45,P46,P47,P53,P54,P55,P56;
P1.0—P1.7(1—8)引到外接口;
P2.0—P2.7(21—28)对应P75,P74,P73,P71,P70,P69,P64,P65;
P3.0—P3.7(10—17)对应P83,P85,P86,P87,P88,P89,P90,P92;
PSEN脚对应P194;
ALE脚对应P79;
6、扩展接口
P62,P