2013年全国大学生电子设计竞赛
设计报告
参赛题目:手写绘图板 题目编号: G题
参赛队员:李大猛 闫胜利 袁新超 参赛单位:黄河水利职业技术学院
论文写作:李大猛
G 题 手写绘图板
摘 要
本手写绘图板系统以STC 系列单片机控制为核心,系统由电源模块、电压信 号采样模块、数据采集模块、数据处理模块、精密毫伏电压放大模块、检测电路 模块、液晶显示模块等模块构成。系统基本原理是:覆铜板上变化的电压通过精 密放大器放大后送给A/D转换电路进行数据采集, 根据AD 采集的数据单片机对采 集的数据处理计算出触点的坐标,并在液晶上显示。系统使用通用元器件较好的 实现了题目要求的各项指标。并较好的实现表笔接触点坐标显示,图形显示,轨 迹显示等功能。该系统具有可靠性好,性能稳定,精度较高等优点。
Abstract
The handwriting drawing board system to STC microcontroller as the core, the system is composed of a power supply module, a voltage signal sampling module, data acquisition module, data processing module, precision millivolt voltage amplification module, detection module, LCD display module. The basic principle is: the voltage change on the CCL by precision amplifier for A/D conversion circuit of data acquisition,
according to the AD data processing chip to collect data to calculate the coordinates of the points, and in the liquid crystal display. System uses theuniversalcomponentscanachievetherequirementsofthesubjectindex. Andachievebettercoordinatepencontactpointdisplay,graphicdisplay, trajectory display function. The system has good reliability, stable performance, high precision.
关键词:STC89S52单片机,数据采集,A/D转换,精密毫伏电压放大器,液晶
一、 系统设计
1.1 基本要求:
(1)指示功能:表笔接触铜箔表面时,能给出明确显示。 (2)能正确显示触点位于纵坐标左右位置。 (3)能正确显示触点四象限位置。 (4)能正确显示坐标值。
(5)显示坐标值的分辨率为 10mm, 绝对误差不大于 5mm。
1.2 发挥部分
(1)进一步提高坐标分辨率至 8mm 和 6mm;要求分辨率为 8mm 时,绝对误差 不大于 4mm;分辨率为 6mm 时,绝对误差不大于 3mm。
(2)绘图功能。能跟踪表笔动作,并显示绘图轨迹。在 A 区内画三个直径分别 为 20mm,12mm 和 8mm 不同直径的圆,并显示该圆;20mm 的圆要求能在 10s 内 完成,其它圆不要求完成时间。
(3)低功耗设计。功耗为总电流乘 12V;功耗越低得分越高。要求功耗等于或 小于 1.5W。
(4)其他。如显示文字,提高坐标分辨率等。
二、 总体设计方案
2.1 设计思路
题目要求设计一个利用普通 PCB 覆铜板设计和制作手写绘图输入设备。设计中 利用手写笔在覆铜板上滑动时会有微弱的变化电压信号,采用运算放大器对微弱 信号进行放大使电压相对升高,然后对变化的电压信号采样,采样部分采用运算 放大器和 A/D 转换芯片。然后进行 AD 采集,根据 AD 数据,计算出坐标。显示部分 则用带字库的液晶模块LCD12864,LCD12864 可以直观显示触点位于纵坐标左右 位置,象限位置,触点滑动轨迹。
2.2 方案论证与比较
2.2.1 采样电路的设计方案与选择
方案一:采用并行A/D转换芯片,并行方式一般在转换后可直接接收,转换 时间快但使用芯片的引脚比较多。
方案二:采用串行A/D 转换芯片,串行方式所用芯片引脚少,封装小,在PCB 板上占用的空间也小,但需要软件处理才能得到所需的数据。
综上所述,结合本设计对数据采样的各项要求和单片机引脚的具体情况,采用TI 公司的8 位串行A/D 转换芯片TLC549. 通过单片机AT89S52 产生满足时序要求的 输入/输出时钟,以及对A/D 芯片的片选控制,完成对整个A/D 转换过程的控制。 TLC549具有8位分辨率模数转换,最大转换时间为17us, 每秒访问和转换最多可达
40000次,功耗低,可以满足本设计要求。
2.2.2 显示方式的设计方案论证与选择
方案一:采用LED 数码管显示。如果需要显示的内容较多,过多增加数码管 的个数显然不可行,进行轮流显示则控制复杂,此外,数码管需要较多连线,使 电路复杂,功耗比较大。
方案二:采用带字库的液晶模块LCD12864显示。可以显示字符、图片,利用 单片机直接驱动液晶显示模块,设计简单,且显示界面宽大美观舒适,耗电小。 综上所述,本设计要显示的内容较多,所以选择方案二,采用LCD12864实时显示 波形的型类、频率、占空比和幅度等功能。
2.2.3 稳压电源的设计方案论证于选择
稳压电源电路采用三端固定式稳压器,只要把正输入电压 Ui 加到 3025 (7812,7912)的输入端,3025(7812,7912)的公共端接地,其输出端便能输 出芯片标称正电压 Uo。在电路中,芯片输入端和输出端与地之间除分别接大容 量滤波电容外,另外我们采用 3025 还需在芯片引出脚根部接小容量电容到地, 分别用于抑制芯片的自激振荡和压窄芯片的高频带宽,减小高频噪声。
2.2.4 电源模块的设计方案论证于选择
方案一:采用升压型稳压电路。用两片MC34063芯片分别将3V 的电池电压 进行直流斩波调压,得到+5V的稳压输出。只需使用两节电池,既节省了电
池又减小系统体积重量,但该电路供电电流小,供电时间短,无法保证系统长期 稳定运作。
方案二:采用环形变压器,与普通变压器相比激磁能量和铁心损耗将
减少25%,电效率高达95%以上,漏磁小,电磁辐射小,振动噪声小,无需另加 屏蔽层来屏蔽电磁干扰,适合用在高灵敏度和易受高频影响的电子设备上。加上 三端固定稳压器获得±5V 电源,+5V用LM7805 输出,-5V 用LM7905输出,先在变 压器的输出段用一个用整流二极管组成的整流桥整流,再用电容滤掉高频成 分,这样就可以获得一个纹波系数小、稳定的电压。
综上所述,选择方案二,采用环形变压器三端稳压器电路。
三、系统硬件设计
3.1 系统的总体方案
本系统采用STC 系列单片机为核心的触摸手写绘图板系统。它主要包括以下 几个组成部分:1) 绘图板电压采集;2) 屏体显示;3) 数据处理;4)数据采集 AD 转换。具体来讲给覆铜板两端加载 5 伏电压,另两端接地。手写笔一端通过 放大器连接A/D转换电路,A/D转换电路连接单片机。覆铜板相当于滑动变阻器 两端,手写笔相当于变阻器的滑动端。当手写笔在覆铜板上滑动时,相应的手写 笔上的电压会规律性发生变化。由于覆铜板电阻率较低,相应的手写笔上的电压 变化值0-3毫伏,低电压信号通过多级级联高增益放大器把低电压信号放大后送
给 A/D 转换电路数据采集, 51 单片机对采集的数据处理后计算出坐标,并在液 晶上显示。系统通过高增益放大器放大微弱信号和精确地数据采样,单片机的数 据处理显示。该系统具有可靠性好,精度高等优点。
12V 电源
5V 稳压 9V 稳压 200mA 稳流模块
89C52 单 片 机
A/D 1549
毫伏级放 大 模 块
覆 铜 板
ADS7843
1 2 8 6 4 液 晶 显 示
图3.1系统组成框图
3.2 单元电路(功能模块)的设计
STC89C52单片机最小系统。最小系统包括晶体振荡电路、复位开关和电源部分。
VCC C5
10uF
C6 104
3
J5
VCC P1.0 2
P1.1 4 P1.2 6 P1.3 8 C8
P1.410
10uF P1.512
P1.614 P1.716
P3.0 2 P3.1 4 R19 P3.2 6 10K P3.3 8
P3.410 P3.512 P3.614 P3.716
2 1 4 3 6 5 8 7 10 9 1211 1413 1615 J17
2CON 18 2 4 3 6 5 8 7 10 9 1211 1413 1615
1 3 5 7 9 11 13 15 1 3 5 7 9 11 13 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
STC1
CLKOUT2/ADC0/P1.0 VCC ADC1/P1.1 P0.0
P0.1 RXD2/ECI/ADC2/P1.2
TXD2/CPP0/ADC3/P1.3 P0.2 SS/CPP1/ADC4/P1.4 P0.3
P0.4 MOSI/ADC5/P1.5
P0.5 MISO/ADC6/P1.6
SCLK/ADC7/P1.7 P0.6 P4.7/RST P0.7 INT/RXD/P3.0 EX_LVD/P4.6/RST2 TXD/P3.1 ALE/P4.5 INT0/P3.2 NA/P4.4 INT1/P3.3 P2.7/A15 CLKOUT0/INT/T0/P3.4 P2.6/A14 CLKOUT1/INT/T1/P3.5 P2.5/A13 WR/P3.6 P2.4/A12 RD/P3.7 P2.3/A11 XTAL2 P2.2/A10 XTAL1 P2.1/A9 GND P2.0/A8 STC89C52RC/12C5A60S2
2CON8*2
C9 33pF 12M C10 33pF
5
VCC 40 39 38 37 36 35 34 33 32 31
VCC 30 29 28 2 27 4 26 6 25 8 24 10 23 12 22 14 21 16
J6 2
4 6 8 10 12 14 16
J7 2 1 4 3 6 5 8 7 10 9 1211 1413 1615 2CON8
1 3 5 7 9 11 13 15
P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0
2 1 4 3 6 5 8 7 10 9 1211 1413 1615 2CON8
1P0.0 3P0.1 5P0.2 7P0.3 9P0.4 1P 10.5 1P 30.6 1P 50.7
CPU 最小系统模块
图3.2 STC89C52单片机最小系统
3.3 电源模块的设计
电源电路是用环形变压器三端固定稳压器获得±5V 电源,+5V用7805输出, -5V 用7905 输出,环形变压器的电压经过三端固定稳压器,再经整流桥整流, 用电容滤掉高频成分。如图3.3.1
图3.3.1 ±5V 稳压电源电路
+15V
U3
IN FB
ON/OFF OUT GND
LM2576HVT-5.0
1 5 3
C1 Cap 100uF
1 U1 IN OUT GND
3
4 2
L? Inductor 10mH D? Diode
Out
+5V
C? Cap 1000uF
LM7815CT
C3 Cap 22uF
1
U4 IN OUT GND
3
+5V
Out
LM7805CT
U2 IN OUT GND
1 3
1
C4 Cap 22uF
U5 IN OUT GND
3
+9V
Out
LM7815CT
LM7809CT
图3.3.2 系统供电模块
3.4 输出微弱信号采样电路模块设计
输出信号采样电路模块设计由一片MAX414 和TLC159 构成,分别与单片机 P3.5、P3.6 和 P3.7 脚连接,如图,其中MAX414 将输出模拟信号放大,模拟输 入信号(ANALOGIN )经过TLC549 内部采样/保持器至8-bit 逐次比较式A/D转换 器。片选控制端(CS_,低有效)和输入/输出时钟端(I/O CLOCK)与独立的内 部系统时钟通过内部逻辑控制电路,实现外部接口与内部的数据传输,通过单片 机从而实现波形幅度的控制。
图3.4.1 输出信号采样电路模块设计
3.5 数据采集模块
数据采集模块数据采集系统如图,采用AD1549 模数转换器及89C52 控制数 据采集。A/D转换器是数字信号处理的基础,是数据采集系统、测量仪器仪表及 工业控制设备等测控装置与测控系统中应用比较广泛的器件。随着大规模集成电 路技术的发展,各种高精度、低功耗、可编程、低成本的A/D转换器不断推出, 使得测控系统的电路更加简洁,可靠性更高。本系统采用芯片TLC1549IP 是美国 TI 公司生产的10位开关电容型逐次逼近A/D转换器,其简单的串行输出接口可方 便地与各类微机进行连接,是10位数据采集系统的理想器件。
TLC1549基本工作原理:TLC1549IP 是带有串行输出接口的10位8引出脚A/D 转换器,主要由采样-保持电路,逐次逼近式A/D变换器,节拍发生器与逻辑控制 器单元,数据寄存器,数据选择器与串行输出电路单元,内部电源等组成。它的 核心是逐次逼近式A/D变换器。在逻辑控制电路与节拍发生器产生的时钟信号的 共同作用下,首先由采样-保持电路对输入的模拟信号进行样本值采集并由保持 电路将采样的电平值保持到下一个采样时刻。接下来由逐级比较式A/D变换器完 成量化编码处理,模拟信号被变换成数字信号并被送入数据寄存器,完成一次模 /数变换。在该次变换完成后,位于串行输出电路之前的数据选择器开始依次从 数据寄存器中读出信息位并按顺序把它们送到串行数据输出端(DATA?OUT )。这 里,选择和形成输出脉冲的频率由外部时钟信号(I/O?CLOCK)决定。。TLC1549IP 的内部结构框图如图3.5.1所示。
图3.5.1 TLC1549功能结构图
VCC
C? Cap 100pF C? Cap 100pF
C? Cap2 100pF
9 31 29 30 10 11 12 13 14 15 16 17
U?
VCC
Y1 12M
19 18
XTAL1 XTAL2
P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P1.0/T2 P1.1/T2EX P1.2/ECI P1.3/CEX0 P1.4/CEX1 P1.5/CEX2 P1.6/CEX3 P1.7/CEX4 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15
40 39 38 37 36 35 34 33 32 1 2 3 4 5 6 7 8 21 22 23 24 25 26 27 28
P2.0 P2.1 P2.2 P2.3
5 6 7 8 *
CS GND DATA REF I/O IN VCC REF TLC1549
4 3 2 1
VCC
C? CapC? 100pF Cap U? 100pF
1 R?A
16 2 1
VCC
Res Pack1 1K
LM336Z5.0
S?
SW-PB
RST EA/VPP PSEN
ALE/PROG P3.0/RxD P3.1/TxD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD
R? RPot 1K
R?A
Res Pack2 1K
20
VSS
P89C51RC2BN/01
图3.5.2 TLC1549 A/D串行接口应用原理图
3.6测量毫伏电压放大模块
测量放大器是信息检索与数据采集系统中常用的前置放大器,通常用在自动 控制及精密仪器等电子系统中。同时是一种高增益、直流耦合放大器,它具有差 分输入、单端输出、高输入阻抗和高共模抑制比等特点,能够将微弱的电信号进 行放大。
本系统放大电路用用集成电路OP07搭建,OP07是一种高精度单片运算放大
器,具有很低的输入失调电压和漂移。OP07 的优良特性使它特别适合作前级放 大器,放大微弱信号。
图3.6 OP07放大电路
该电路中用三个 OP07 集成运放,电路设计满足同相并联差值比例输入级和 差分放大输出级,其中U1与U2为两个性能一致(主要指输入阻抗、共模抑制比 和开环增益)的集成运放 OP07,工作于同相放大方式,构成平衡对称的差动放 大输入级,U3采用集成运放OP07,工作于差动放大方式,用来进一步抑制U1、 U2的共模信号,并接成单端输出方式适应接地负载的需要。R10与R8、R9组成 反馈网络,引入了负反馈,直接耦合多级放大电路中,放大级数越多,放大倍数 也越大,该放大电路不但增益稳定,而且噪声、失真、输出阻抗都降低了,输入 阻抗也增大了,满足放大电路的性能指标。电路中通过对电位器的调节,来实现 该测量放大器放大倍数的调节。
器件选择:元器件的选择是高性能放大的保证,电路中运放U1、U2和U3均 选用集成运放OP07。U1和U2的参数必须尽可能相同其输入阻抗、共模抑制比和 开环增益一致,这样,电路中除了具有差模、共模输入电阻大的特点外,两运放 的共模增益、失调及漂移产生的误差也相互抵消。同时,为提高共模抑制比,对 称的电阻必须精密配置,通过调试电路,及在电路中用电位器代替电阻的方式, 满足本毕业设计要求的基本原则下,最终确定RW 的电阻值及R 的电阻值。
集成运放按供电方式可被分为双电源供电和单电源供电,在双电源供电中又 分为单运放、双运放和四运放。按制造工艺可将运放分为双极性、CMOS 型和BiFET 型,双极性运放一般输入偏置电流及器件功耗较大,但由于采用多种改进技术, 所以种类多,功能强;CMOS 型运放输入阻抗高、功耗小,可在低点源电压下工 作,初期产品精度低、增益小、速度慢,但目前已有低失调电压、低噪声、高速
度、强驱动能力的产品;BiFET 型运放采用双极型管和单级型管混合搭配的生产 工艺,以场效应管作输入级,使输入电阻高达 1012Ω 以上,目前有电参数各不 相同的多种产品。
对于本次设计中的前级运放 U1、U2 两个运放,要选择两个参数一样,最好 选择双差分对管,即在一个集成芯片上有两个参数一样的差分放大器。且要求输 入阻抗(Ri )大,至少大于2MΩ,温漂要小,差模放大倍数(AVD )要大,共模 抑制比(KCMR )要大的场效应管,例如OP07。 OP07作为常用运放的功能特点
OP07 芯片是一种低噪声,非斩波稳零的双极性运算放大器集成电路[11]。 具有低失调、低漂移、低噪声、偏置电流小等优点。由于 OP07 具有非常低的输 入失调电压(对于OP07A 最大为25μV),所以OP07在很多应用场合不需要额外 的调零措施。OP07同时具有输入偏置电流低(OP07A 为±2nA )和开环增益高(对 于 OP07A 为 300V/mV)的特点,这种低失调、高开环增益的特性使得 OP07 特别 适用于高增益的测量设备和放大传感器的微弱信号等方面。 有如下特点:
(1)低的输入噪声电压幅度-0.35uvp-p (0.1hz-10hz ) (2)极低的输入失调电压-10uv (3)极低的输入失调电压温漂-0.2uf/c (4)具有长期的稳定性-0.2uv/mo (5)低的输入偏置电流+1na~-1na (6)高的共模抑制比-126db
(7)宽的共模输入电压范围+14v~-14v (8)宽的电源电压范围±3v ~±22v (9)可替代725,108A ,741,AD510等电路
3.7 检测电路设计模块
覆铜板,是指纸和玻纤布等基材,浸以树脂,制成粘结片(胶纸和胶布) ,由 数张粘结片组合后,单面或双面配上铜箔,经热压固化,制成的板状产品,图3.7.1 所示。设计手写绘图板时最重要的问题是确定触摸点的坐标位置, 通过单片机控 制A/D准确地采样到被接触点电压的变化的坐标位置, 至于该点响应何种按键只 是交给相应的处理软件进行处理即可。
铜箔
粘结片
图3.7.1 覆铜板构造
测量X 坐标时:
1)在X+,X-两电极加上一个电压Vref ,Y+接一个高阻抗的ADC 。
2)两电极间的电场呈均匀分布,方向为X+到X-。
3)手触摸时,两个导电层在触摸点接触,触摸点X 层的电位被导至 Y层所接的ADC , 得到电压Vx 。
4)通过Lx/L=Vx/Vref,即可得到x 点的坐标。
Y 轴的坐标可同理将Y+,Y-接上电压Vref ,然后X+电极接高阻抗ADC 得到。
X1
Y0 Y1
覆铜板
X0
图3.7.2 覆铜板点触屏坐标
图3.7.3 覆铜板连接电路
普通的覆铜板一般由三部分组成,上下两层的阻性覆铜导体层、两层导体之
间的隔离层。近似等效为电阻触摸屏。
图3.7.4 覆铜板触点屏
电路工作时,覆铜板上下导体层相当于电阻网络,如图2所示。当某一层电
极加上电压时,会在该网络上形成电压梯度。如有外力使得上下两层在某一点接
触,则在电极未加电压的另一层可以测得接触点处的电压,从而知道接触点处的 坐标。比如,在顶层的电极(X+,X-) 上加上电压,则在顶层导体层上形成电压梯 度,当有外力使得上下两层在某一点接触,在底层就可以测得接触点处的电压, 再根据该电压与电极(X+)之间的距离关系,知道该处的X 坐标。然后,将电压切
换到底层电极(Y+,Y-)上,并在顶层测量接触点处的电压,从而知道Y 坐标。
覆铜板和表笔作为一个输入设备,对其控制用专门的芯片,控制覆铜板检测
电路的芯片要完成两件事情:其一,是完成电极电压的切换;其二,是采集接触 点处的电压值(即A/D)。本检测电路系统用ADS7843控制的实现。ADS7843是
一个内置12位模数转换、低导通电阻模拟开关的串行接口芯片。供电电压
2.7~5 V,参考电压VREF 为1 V~+VCC,转换电压的输入范围为~ VREF,最高
转换速率为125 kHz。表1为引脚功能说明,图3.7.5为其典型应用。
图3.7.5 ADS7843典型应用
ADS7843的内部结构及参考电压模式选择如图所示
图3.7.6 ADS7843引脚功能说明
ADS7846是一个典型的逐次逼近型AD 转换器,其结构是基于电荷再分配的比例电容阵
列结构,这种结构本身具有采样保持功能图3.7.7显示了ADS7846的基本工作结构 。
ADS7846工作电压可以从2.7V 到5.25V ,需要外部时钟来提供转换时钟和串口时钟,
同时还包含了一个内部2.5V 的基准电压电路,内部基准可以被外部的,低阻抗电压源驱动, 基准电压范围为1V 到+VCC,基准电压值决定了AD 转换器的输入范围。
覆铜板等效电阻屏
图3.7.7 ADS7846的基本工作结构
ADS7843之所以能实现对触摸屏的控制,是因为其内部结构很容易实现电极
电压的切换,并能进行快速A/D转换。A2~A0和SER/为控制寄存器中的控制位,
用来进行开关切换和参考电压的选择。
STC89C51
P2.0
P2.1
P2.2
P2.3
P2.3
INTO ADS7846 D1 D0 CK CS /PIN 显 示 屏 覆铜板
图3.7.8 ADS7846系统接人如图
ADS7846是四线式触摸屏的控制器:控制器的主要功能是分别向X 、Y 电极对
施加电压.并把测量电极上的电压信号转换为相应触点的X 坐标,通过中断请求 向P89C669表示有触摸发生。89C51通过P1.3、P1.4和P1.2、P1.1的配合来获取
坐标数据。系统接人如图所示。
当液晶屏上显示出需要操作的画面,我们通过表笔进行操作时。用户在覆铜
板屏上的有效区域点击,触摸屏的X 方向输出电阻和Y 方向输出电阻分别随X 和Y 呈线性变化,ADS7846控制器将其分别转换为12位数据,通过中断告知单片机需
要接收数据。单片机接收到数据后进行处理。首先进行触点数据是否有效的判断, 包括:a) 是否是人的误操作,即是否是由于人的抖动而产生的错误数据。
b)ADS7846传过来的数据是否有效.由于刚开始传过来的第一个坐标是用户开始
接触触摸屏时产生的。所以电阻并不准确.从而导致数据也不准确,通常要去掉: 在接收过程中。通常是采用多次平均的方法。假如有一次接收的数据和平均值的 差别很大,则这次测量就作废了.需要重新测量。一旦数据有效。单片机就会继 续解算触点坐标落在液晶屏上的位置.并根据解算的结果来判断执行相应的功能 函数。使触摸屏和液晶屏有机地结合起来.建立一定的逻辑关系.交互地进行信 息存取和输出。
3.8 液晶显示模块
液晶显示模块是128×64 点阵的汉字图形型液晶显示模块,可显示汉字及图
形,内置国标GB2312 码简体中文字库(16X16 点阵)、128 个字符(8X16 点阵) 及64X256点阵显示RAM (GDRAM )。可与CPU 直接接口,提供两种界面来连接微处 理机:8-位并行及串行两种连接方式。具有多种功能:光标显示、画面移位、睡 眠模式等
1.显示资料RAM (DDRAM )
显示资料RAM 提供64×2 个位元组的空间,最多可以控制4 行16字(64个字)的
中文字型显示,当写入显示资料RAM 时,可以分别显示CGROM 、HCGROM 与CGRAM 的
字型;ST7920A 可以显示三种字型,分别是半宽的HCGROM 字型、CGRAM 字型及中 文CGROM 字型,三种字型的选择,由在DDRAM 中写入的编码选择,在0000H —0006H 的编码中将自动的组成两个位元组的编码达成中文字型的编码(A140—D75F ), 各种字型详
细编码如下:
1.显示半宽字型:将8 位元资料写入DDRAM 中,范围为02H —7FH 的编码。
2.显示CGRAM 字型:将16位元资料写入DDRAM 中,总共有0000H ,0002H ,0004H , 0006H 四种编码参考信号相位累加器相位加法器波形存储器数 字乘法波器
单片机接受键盘的中断申请,根据不同的按键执行不同的功能,将执行的结果在 LCD 上显示出来.在显示的时候,由于LCD 只接受相应字符的字形码,所以对于 固定不变的提示信息和标题,将字型码存储在单片机ROM 的字库内.对于变化的 数值的字型码,则在显示以前通过查字库,将字库内存储的数字的字型码复制到 自己的存储单元.然后将自己的存储单元的字型码送入LCD 显示缓存中显示。由 单片机P2.0~P2.7 口控制D7~D0S 数据的输入输出,RS 为数据选择信号由P3.0
控制,E 为读写使能端,高电平有效,下降沿锁定数据由P3.2控制,R/W为读写 选择端,高电平:读数据,低电平:写数据,由单片机P3.1口控制。液晶显电路 如图3.8所示。
图3.8 液晶显示电路
四、系统软件设计及分析
4.1 主体程序流程图
开 始
初 始 化
覆 铜 板 电 压 变 化
T L C 1 5 4 9 采 样
A / D 转 换 电 路
单 片 机
液
晶 显 示
图4.1主体程序流程
五、部分程序
5.1 采样程序
5.1.1 主程序。主程序包含有A/D 采样子程序。在AD 采样读取成功后对数
据进行
分析,并选择合适的基准源。该过程结束后进入低功耗模式,等待下一个采样周 期的到来。
5.2.2 A/D 采样子程序。A/D 使用通道0 进行电流检测。单片机给A/D 发
出通道选择信号,然后等待A/D芯片转换数据,最后读取其数据
图5.1采样程序流程
TLC1549串行A/D转换程序
#include
#include
#define uchar unsigned char
#define uint unsigned int
/*****************************************/
/* 12864引脚定义 */
/*****************************************/
sbit CS_12864=P3^5; //片选信号线
sbit SID_12864=P3^6; //串行数据线
sbit SCLK_12864=P3^4; //串行同步时钟线,上升沿有效
sbit RST_12864=P1^3; //RST复位信号, 接高电平
sbit CH_12864=P3^7; //并行,串行选择信号,高电平并行;低电平串行, 接低电平
/*****************************************/
/* TLC1549引脚定义
/*****************************************/
sbit TLC1549_CS=P1^3; //片选端
sbit TLC1549_DAT=P1^4;//数据端
sbit TLC1549_CLK=P1^5;//时钟端
/*****************************************/
/* 12864显示内容 */
/*****************************************/
uchar code dis1[]={" 电压采集 "};
uchar dis2[]={"电压:0.0000V"};
uchar dis3[]={"采集:0000"};
/*****************************************/
/* 毫秒延时函数 */
/*****************************************/
void delay_ms(uint xms)
{
uint i,j;
for(i=0;i
for(j=0;j
}
/*****************************************/
/* 微妙延时函数 */
/*****************************************/
void delay_us(uint i)
{
while(i--); //延时时间为(i*2+5)微秒,除0外
}
/*****************************************/
/* TLC1549初始化 */
*/
/*****************************************/
void init_TLC1549()
{
uchar i;
TLC1549_CS=0;
TLC1549_CLK=0;
TLC1549_DAT=1;
for(i=10;i>0;i--)
{
TLC1549_CLK=1;
delay_us(2);
TLC1549_CLK=0;
delay_us(2);
}
TLC1549_CS=1;
delay_us(20);
}
/*****************************************/
/* 获取TLC1549转换结果 */
/*****************************************/
uint get_TLC1549()
{
uint tmp=0;
uchar a;
float temp;
TLC1549_CS=1;
delay_us(53);//
TLC1549_CS=0;
delay_us(1);
for(a=10;a>0;a--) //读取AD 转换后的十位数据
{
tmp
if(TLC1549_DAT)
tmp|=1; //如果数据输出是1,或上tmp, 再赋给tmp ,这样就读的数
据口数据
TLC1549_CLK=1;
delay_us(2);
TLC1549_CLK=0;
}
TLC1549_CS=1;
delay_us(20);
/*if(tmp>1004)
temp=tmp+;
else if(tmp>983)
temp=tmp+;
else if(tmp>962)
temp=tmp+;
else if(tmp>941)
temp=tmp;
else if(tmp>920)
temp=tmp;
else if(tmp>900)
temp=tmp*1.02225+0.5;
else if(tmp>879)
temp=tmp*1.0223+0.5;
else if(tmp>858)
temp=tmp*1.02235+0.5;
else if(tmp>837)
temp=tmp*1.0224+0.5;
else if(tmp>550)
temp=tmp*1.02155+0.5;
else if(tmp>500)
temp=tmp*1.0216+0.5;
else if(tmp>450)
temp=tmp*1.02315+0.5;
else if(tmp>400)
temp=tmp*1.0232+0.5;
else if(tmp>350)
temp=tmp*1.02465+0.5;
else if(tmp>300)
temp=tmp*1.0247+0.5;
else if(tmp>250)
temp=tmp*1.0275+0.5;
else if(tmp>200)
temp=tmp*1.028+0.5;
else if(tmp>150)
temp=tmp*1.0355+0.5;
else if(tmp>100)
temp=tmp*1.0366+0.5;
else if(tmp>80)
temp=tmp*1.052+0.5;
else if(tmp>60)
temp=tmp*1.1+0.5;
else if(tmp>40)
temp=tmp*1.18+0.5;
else if(tmp>20)
temp=tmp*1.38+0.5;
else if(tmp>10)
temp=tmp*1.5+0.5;
else if(tmp>5)
temp=tmp*1.7+0.5;
else
temp=5;
tmp=(uint)temp;
if(tmp>1023)
tmp=1023; */
return tmp;
}
/*写指令到LCD12864,输入有*/
void write_cmd_12864(uchar command_data)
{
uchar i;
uchar i_data;
i_data=0xf8;
CS_12864=1;
SCLK_12864=0;
for(i=0;i
{
SID_12864=(bit)(i_data&0x80);
SCLK_12864=0;
SCLK_12864=1;
i_data=i_data
delay_ms(1);
}
i_data=command_data;
i_data&=0xf0;
for(i=0;i
{
SID_12864=(bit)(i_data&0x80);
SCLK_12864=0;
SCLK_12864=1;
i_data=i_data
delay_ms(1);
}
i_data=command_data;
i_data
for(i=0;i
{
SID_12864=(bit)(i_data&0x80);
SCLK_12864=0;
SCLK_12864=1;
i_data=i_data
delay_ms(1);
}
CS_12864=0;
delay_ms(10);
}
/*写显示数据到LCD, 输入有*/
void write_data_12864(uchar command_data)
{
uchar i;
uchar i_data;
i_data=0xfa;
CS_12864=1; SCLK_12864=0;
for(i=0;i
{
SID_12864=(bit)(i_data&0x80);
SCLK_12864=0;
SCLK_12864=1;
i_data=i_data
delay_ms(1);
}
i_data=command_data;
i_data&=0xf0;
for(i=0;i
{
SID_12864=(bit)(i_data&0x80);
SCLK_12864=0;
SCLK_12864=1;
i_data=i_data
delay_ms(1);
}
i_data=command_data;
i_data
for(i=0;i
{
SID_12864=(bit)(i_data&0x80);
SCLK_12864=0;
SCLK_12864=1;
i_data=i_data
delay_ms(1);
}
CS_12864=0;
delay_ms(10);
}
/*设定显示位置输入有:X 和 Y,X表示每行的首地址,Y 表示从第几个字开始*/
void lcd12864_pos(uchar X,uchar Y)
{
uchar pos;
if(X==0)
X=0x80;
else
if(X==1)
X=0x90;
else
if(X==2)
X=0x88;
else
if(X==3)
X=0x98;
pos=X+Y;
write_cmd_12864(pos); //显示地址
}
/*lcd 12864初始化*/
void lcd12864_init()
{
delay_ms(10);
write_cmd_12864(0x30);//基本指令操作
delay_ms(5);
write_cmd_12864(0x0c);//显示开,光标关
delay_ms(5);
write_cmd_12864(0x01);//清除led 显示内容
}
/*****************************************/
/* 12864显示函数 */
/*****************************************/
void display()
{
uchar i;
lcd12864_pos(0,0); //设置显示位置为第一行的第一个字符
i=0;
while(dis1[i]!='\0')
{
write_data_12864(dis1[i]);
i++;
}
lcd12864_pos(1,0); //设置显示位置为第二行的第一个字符
i=0;
while(dis2[i]!='\0')
{
write_data_12864(dis2[i]); //显示字符
i++;
}
lcd12864_pos(2,0); //设置显示位置为第二行的第一个字符
i=0;
/*while(dis3[i]!='\0')
{
write_data_12864(dis3[i]); //显示字符
i++;
}*/
}
/*****************************************/
/* 对采集后数据处理,转换实际电压值 */
/*****************************************/
void deal_TLC1549(uint dianya)
{
//uint dianya;
//dianya=get_TLC1549();
//dianya=(dianya*(500/255))*100;//
float dianya1;
dianya1=dianya;
dis3[5]=(dianya/500+0x30);
dis3[6]=(dianya/50%5 +0x30);
dis3[7]=(dianya/5%5+0x30);
dis3[8]=(dianya%5+0x30);
dianya1=dianya1*25000/1023;//注意:dianya=(dianya*(50000/1023))与
dianya=(dianya*(5/1023))*10000的结果是不一样的
dianya=(uint)dianya1;
dis2[5]=(dianya/5000+0x30);
dis2[7]=(dianya/500%5+0x30);
dis2[8]=(dianya/50%5+0x30);
dis2[9]=(dianya/5%5+0x30);
dis2[10]=(dianya%5+0x30);
//dianya=dianya*50000/1023;//
//dis2[5]=(dianya/10000+0x30);
//dis2[7]=(dianya/1000%10+0x30);
//dis2[8]=(dianya/100%10+0x30);
//dis2[9]=(dianya/10%10+0x30);
//dis2[10]=(dianya%10+0x30);
}
void main()
{ CH_12864=0;
delay_ms(10); //延时
lcd12864_init(); //初始化lcd
init_TLC1549();
while(1)
{
deal_TLC1549(get_TLC1549());
display();
}
}
5.3 检测电路AD7846控制覆铜板触点位置程序
图5.3 检测电路AD7846控制覆铜板触点位置程序
ADS7843驱动程序
ADS7843是一个内置 12位模数转换、低导通电阻模拟开关的串行接口芯片。供
电电压 2.7~5 V,参考电压 VREF 为 1 V~+VCC,转换电压的输入范围为 0~ VREF, 最高转换速率为 125 kHz。
// ADS7843 驱动程序(串行)
//硬件连接: DCLK ——P0^0;
// CS ——P0^1;
// DIN ——P0^2;
// BUSY ——P0^3
// DOUT ——P0^4
// PENIRQ ——P3^2;
// VDD--逻辑电源(+5V)
VSS--GND(0V) //
//ADS7843.c
#include
#include //STC单片机头文件
#define uint unsigned int
#define uchar unsigned char
sbit DCLK = P0^0;
sbit CS = P0^1;
= P0^2; sbit DIN
sbit BUSY = P0^3;
sbit DOUT = P0^4;
sbit PENIRQ = P3^2;
void Tranfer(char Data);
uint average(uint a[8]);
//============================================================ ========================
//函数名称:void delay(uint us)
//函数功能:延时子函数
//入口参数:us 延时时间
//出口参数:无
//============================================================ ========================
void delay(uint us)
{
while(us--);
}
//============================================================ ========================
//函数名称:void ADS7843_start(void)
//函数功能:ADS7843启动
//入口参数:无
//出口参数:无
//============================================================ ========================
void ADS7843_start(void)
{
DCLK=0;
CS=1;
DIN=1;
DCLK=1;
CS=0;
} //时钟信号,下降沿有效 //片选信号,低电平有效 //串行数据输入 //忙信号 //串行数据输出 //键盘中断请求信号,低电平(负边沿)有效
//============================================================ ========================
//函数名称:void ADS7843_wr(uchar dat)
//函数功能:写 ADS7843
//入口参数:dat 写入的数据
//出口参数:无
//============================================================ ========================
void ADS7843_wr(uchar dat)
{
uchar count;
DCLK=0;
for(count=0;count
{
dat
DIN=CY;
DCLK=0;
_nop_();
_nop_();
_nop_();
DCLK=1;
_nop_();
_nop_();
_nop_();
}
}
//============================================================ ========================
//函数名称:uint ADS7843_rd(void)
//函数功能:读 ADS7843
//入口参数:无
//出口参数:读回的坐标值
//============================================================ ========================
uint ADS7843_rd(void)
{
uchar count=0;
uint dat=0;
for(count=0;count
{
dat
DCLK=1; _nop_();_nop_();_nop_(); //下降沿有效
DCLK=0; _nop_();_nop_();_nop_();
if(DOUT)
dat++;
}
return(dat);
}
//============================================================ ========================
//函数名称:void intr0_int()
//函数功能:外中断 0中断服务函数
//入口参数:无
//出口参数:无
//============================================================ ========================
void intr0_int() interrupt 0 using 2
{
uint X=0,Y=0,a[4],i, avex,avey,x[8],y[8];
IE=0; //关中断
delay(100); //中断后延时以消除抖动,使得采样数据更准确
if(!PENIRQ)
{
for(i=0;i
{
ADS7843_start();
delay(2);
ADS7843_wr(0x90);//送控制字 10010000 即用差分方式读 X 坐标
delay(2);
DCLK=1;
_nop_();
_nop_();
_nop_();
_nop_();
DCLK=0;
_nop_();
_nop_();
_nop_();
_nop_();
X=ADS7843_rd(); //读 X 轴坐标
x[i]=X;
ADS7843_wr(0xD0); //送控制字 11010000 即用差分方式读 Y 坐标
DCLK=1;
_nop_();
_nop_();
_nop_();
_nop_(); DCLK=0; _nop_(); _nop_(); _nop_(); _nop_();
Y=ADS7843_rd(); //读 Y 轴坐标 y[i]=Y; CS=1; }
avex=average(x); //X坐标数据处理 a[0]=avex/1000; //发上位机观察结果 a[1]=(avex-a[0]*1000)/100;
a[2]=(avex-a[0]*1000-a[1]*100)/10; a[3]=avex%10; Tranfer(a[0]+48); Tranfer(a[1]+48); Tranfer(a[2]+48); Tranfer(a[3]+48);
avey=average(y); //Y坐标数据处理
a[0]=avey/1000; //发上位机观察结果 a[1]=(avey-a[0]*1000)/100;
a[2]=(avey-a[0]*1000-a[1]*100)/10; a[3]=avey%10; Tranfer(a[0]+48); Tranfer(a[1]+48); Tranfer(a[2]+48); Tranfer(a[3]+48);
for(i=0;i
IE=0x81; }
//开中断
//============================================================ ======================== //函数名称:void init_serial() //函数功能:初始化串口 //入口参数:无 //出口参数:无
//============================================================ ======================== void init_serial() {
TMOD=0x22; //定时器 T1使用工作方式 2 TH1=250; //设置初值 TL1=250; TR1=1; //开始计时 PCON=0x80; //SMOD=1; SCON=0x50; //工作方式 1,波特率 9600bit/s,允许接收 TI=1; }
//============================================================ ======================== //函数名称:void Tranfer(char Data) //函数功能:发送数据程序
//入口参数:Data 要发送的数据 //出口参数:无
//============================================================ ======================== void Tranfer(char Data) {
while(TI==0); SBUF=Data; TI=0; }
//============================================================ ======================== //函数名称:int main() //函数功能:主函数 //入口参数:无 //出口参数:无
//============================================================ ======================== int main() {
// uint b[4];
TCON=0x01; //设置外部中断 0下降沿触发
EX0=1; //开外中断 0 EA=1; //开总中断 init_serial(); while(1); }
//============================================================ ========================
//函数名称:uint average(uint a[8])
//函数功能:数据处理程序,采集 8次的数据,去掉最大值,去掉最小值,然后求 平均
//入口参数:数组首地址 //出口参数:平均值
//============================================================ ======================== uint average(uint a[8]) {
uint max,min,i,ave=0,sum=0;
max=a[0]; min=a[0];
for(i=0;i
if(maxif(min>a[i])min=a[i]; sum+=a[i]; }
ave=(sum-min-max)/6; return ave; }
六、系统测试分析
6.1 测试仪器与设备
基本仪器清单如表1所示。
仪器名称
表1 基本仪器清单 型号 指标
20Hz 60MHZ
100KHz~100KHz
± 3% 10Hz~800kHz
± 10% +5V,+12V, -5V,-12V
50Hz
1 5 位 2
生产厂家 日本岩崎
岩崎台式模拟示波 SS-7802A
器
双通道数字示波器 TDS1002 双通道双指针毫伏 DF2170B 表(低频毫伏表)
数 量 1
Tektronix 公司 1 宁波中策电子有限 1
公司
稳压电源 WD-5
启东市斯迈计算机 1 厂
宁波中策电子有限 1
公司 台湾富贵仪器 1 ESCORT
直流稳压源 台式万用表
DF17305B 3A EDM-3155
A
数万用表 Vc9806+
1 4 位 2
深圳市胜高电子科 1
技公司
6.2 电路的调试
整个系统硬件的调试有以下:
(1)电源电路采用环形变压器,减少电磁干扰,减少纹波系数获得较纯净和稳 定的电源。
(2)显示电路中,为了获得较好的亮度,加上了一个10K 的精密可调电阻,这样 可以调节液晶模块的亮度。
(3)D/A 转换电路中,为了保证D/A 转换器总线在空余方式为高电平,两个DA 转换器都要的数据线和时钟线都接上拉电阻与电源相连,并加一个去耦电容。 (4) 在信号采样电路的的运算放大器的1 脚和2 脚并接一个330P 的钽电 容C80,这样,在高频的时候消除自激现象,电压信号得到明显改善
(5)表笔滑动时覆铜板上的电压很小,AD 采集不到,经过多级精密放大后信号 变大。
系统测试方案与测试结果
将表笔在覆铜板上随意画时,液晶显示屏上能显示接触点的所在象限位置及坐标 但有一定的误差。测试结果如下: 表笔接触次数 第1次 第2次 第3次 第4次 测量点坐标 (1.5、1.2) (2.3、2) (-3.5、3) -4、-4.5 实际点坐标 (1、1) (2、2) (-3、3) (-4、-4)
七、 总结
系统采用STC 系列单片机为核心的触摸手写绘图板系统。它主要包括以下几 个组成部分:1) 绘图板电压采集;2) 屏体显示;3) 数据处理;4)数据采集AD 转换。具体来讲给覆铜板两端加载5伏电压,另两端接地。手写笔一端通过放大 器连接A/D转换电路,A/D转换电路连接单片机。覆铜板相当于滑动变阻器两端, 手写笔相当于变阻器的滑动端。当手写笔在覆铜板上滑动时,相应的手写笔上的 电压会规律性发生变化。由于覆铜板电阻率较低,相应的手写笔上的电压变化值 0-3 毫伏,低电压信号通过多级级联高增益放大器把低电压信号放大后送给 A/D 转换电路数据采集, 51 单片机对采集的数据处理,并在液晶上显示。系统通过 高增益放大器放大微弱信号和精确地数据采样,单片机的数据处理显示。该系统 具有可靠性好,精度高等优点。
结束语:
本次大赛的题目充分体现了当今时代对数字化的高要求,同时要求利用成熟 的技术与新技术结合,充分发挥各自的功能,甚至提高到更高的性能,本着这个 原则,我们充分利用的现有的条件,基本上完成了题目的要求,希望本次大赛能 够圆满成功!
参考文献:
[1] 全国大学生电子设计设计竞赛组委员会. 全国大学生电子设计竞赛训练教
程[M].北京电子工业出版社,2005年 [2] 全国大学生电子设计设计竞赛组委员会. 全国大学生电子设计竞赛获奖作
品汇编(第一届~第五届)[M].北京理工大学出版社,2004年 [3] 李银祥. 数控电流源[R].武汉:武汉理工大学测试中心,2001年 [4] 秦迎春. 利用 AD7542 实现程控电流源[J].国外电子元器件,2003,6:32~ 33
[5] 张智杰.AD574在数据采集中的应用[J].国外电子元器件,2003,6:55~56 [6] 房小翠. 单片机实用系统设计技术[M].北京:国防工业出版社,1999年 [7] 周庆. 高稳定电流比较环节引入的纹波分析[J].云南大学学报,1992, 21:79~81
[8] 刘公志. 新型数字直流电源设计[J].杭州电子工业学院学报,2004, 3(24):19~22
[9] 赵建玉. 智能电流源设计[J].山东建材学院学报,1993,3(13):29~31
[10] 俞俊民. 自制恒流源[J].沈阳电力高等专科学校学报,1997,2(6):13~ 15
[11] 朱传奇. 简易使用的直流电流源[J].山东电力技术,1999,1:75~76
[12] 马云峰. 单片机控制的直流电流源设计[J].潍坊高等专科学校学报,1999, 3:60~61
附录
附录1:电路原理图
VCC
C? Cap 100pF C? Cap 100pF
C? Cap2 100pF
S?
SW-PB
9 31 29 30 10 11 12 13 14 15 16 17
U?
VCC
Y1 12M
19 18
XTAL1 XTAL2
P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P1.0/T2 P1.1/T2EX P1.2/ECI P1.3/CEX0 P1.4/CEX1 P1.5/CEX2 P1.6/CEX3 P1.7/CEX4 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15
40 39 38 37 36 35 34 33 32 1 2 3 4 5 6 7 8
*
21 22 23 24 25 26 27 28
P2.0 P2.1 P2.2 P2.3
5 6 7 8
CS GND DATA REF I/O IN VCC REF TLC1549
4 3 2 1
VCC
C? CapC? 100pF Cap U? 100pF
16
2
1
1 R?A
VCC
Res Pack1 1K
LM336Z5.0
RST EA/VPP PSEN
ALE/PROG P3.0/RxD P3.1/TxD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD
R? RPot 1K
R?A
Res Pack2 1K
20
VSS
P89C51RC2BN/01
图1 单片机于TLC1549连接
+15V
U3
IN FB ON/OFF OUT GND
LM2576HVT-5.0
1 5 3
C1 Cap 100uF
1 U1 IN OUT GND
3
4 2
L? Inductor 10mH D? Diode
Out
+5V
C? Cap 1000uF
LM7815CT
C3 Cap 22uF
1
U4 IN OUT GND
3
+5V
Out
LM7805CT
U2 IN OUT GND
1 3
1
C4 Cap 22uF
U5 IN OUT GND
3
+9V
Out
LM7815CT
LM7809CT
图2 系统供电模块
图3 放大器仿真电路
图4 稳压电路
1
SMG1 1 SMG2 2 SMG3 3 SMG4 4 SMG5 5 SMG6 6 SMG7 7 SMG8 8
D
a b a a a a
J1 c
CON3 d f g b f g b f g b f g b
SMG1 e
e c e c e c e c f d d d d g dp dp dp dp dp SMG
VCC
2 3
VCC
4 5 6
Q5
P0.0 1
LED
P0.1 R5 P0.2
R6
P0.3
SMG4 SMG5 SMG6
P0.5 R9
SMG7
P0.6 R12
P0.7 R13
SMG8
LED7 LED8
LED
R7
P0.4 R8
SMG2 SMG3 SMG1
LED1 LED2
SP1
LED3 LED4
1 2
PNP 1 2
SIP1
J2
R10 10K
GND
VCC VCC
LCD 1602
YJ1 20PIN
D
VCC
GND
Q1 Q2 Q3 Q4 B
R3
1K 9012
1 R4 1K
LED5 LED6
蜂鸣器模块
2 VCC 103
GND
R11 10K
9012
R1 1K
9012
R2 1K
9012
VCC
液晶显示模块
C
J3
1 6 2 7 3 8 4 9 5
DB9
T2 OUT 7
14 R2IN 8
13 15 C1 1046
2 16 C2 104 C7 104
3.3V
J8 1 2 CON2
GND
VCC
3
C20 104
J10 1 2 CON2 U10
AMS 1117 3.3
J15 1838
1838-OUT 1 1 2 GND 2
3
CON2
VCC J12 3.3V 2
U1
T2 OUT T2 IN T1OUT T1 IN R2 IN R2 OUT R1 IN R1 OUT GND C2- V- V+ VCC RS232 VCC
C2+ C1- C1+
10 P1.3 11 P3.1 9 P1.2 12 P3.0 5 4C3 104 3 1
C4 104
SMG
数码管、LED 显示模块
1 6 2 7 3 8 4 9 5
C
J4
VCC
R2 IN T2 OUT
10uF
C5
C6 104
VCC
VCC
3
S1 SW-PB
J6 2 1 4 3 6 5 8 7 10 9 1211 1413 1615 2CON8
1 3 5 7 9 11 13 15
P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0
P2.4
1P0.0 3P0.1 5P0.2 7P0.3 9P0.4 11P0.5 13P0.6 15P0.7
J18 2 1 CON2 3.3V
104 C11
GND
W
J19 S2 SW-PB S3 SW-PB S4 SW-PB S5 SW-PB
P2.5 P2.6 P2.7 P3.2
B
R14 10K R15 10K R16 10K R17 10K R18 10K
串口模块
4
J16 CON3
1838-OUT
1 P3.3
2 2401-MISO 3
DB9
VCC P1.0 2
P1.1 4 P1.2 6
C8 P1.3 8
P1.410
10uF P1.512
P1.614 P1.716
B
1838红外与24L01切换
C21 104
IN OUT
10UFC18
1 2 3 4 5 6 7 8 9
P3.0 2 1 10
11 P3.1 4 3 4 3 12 6 5 R19 P3.2 6 5 8 7 13
10K P3.3 8 7 P3.410 9 14
10 9 P3.512 11 15 1211
P3.614 13 16
1413
P3.716 15 17
1615
18
2CON8*2 19
C9 33pF 20
2 1
4 3 6 5 8 7 10 9 1211 1413 1615 J17
2C 2ON 18 12M C10 33pF
5
J5
1 3 5 7 9 11 13 15
STC1
CLKOUT2/ADC0/P1.0 VCC ADC1/P1.1 P0.0 RXD2/ECI/ADC2/P1.2 P0.1 TXD2/CPP0/ADC3/P1.3 P0.2 SS/CPP1/ADC4/P1.4 P0.3 MOSI/ADC5/P1.5 P0.4 MISO/ADC6/P1.6 P0.5 SCLK/ADC7/P1.7 P0.6 P4.7/RST P0.7 INT/RXD/P3.0 EX_LVD/P4.6/RST2 TXD/P3.1 ALE/P4.5 INT0/P3.2 NA/P4.4 INT1/P3.3 P2.7/A15 CLKOUT0/INT/T0/P3.P2.6/A14 4 P2.5/A13
P2.4/A12 CLKOUT1/INT/T1/P3.
5 RD/P3.7 P2.3/A11 WR/P3.6 XTAL2 P2.2/A10 XTAL1 P2.1/A9
P2.0/A8 GND
STC89C52RC/12C5A60S2
VCC
40 39 38 37 36 35 34 33 32 31
30 VCC 29 28 2 27 4 26 6 25 8 24 10 23 12 22 14 21 16
2
4 6 8 10 12 14 16
J7 2 1 4 3 6 5 8 7 10 9 1211 1413 1615 2CON8
键盘模块
VCC R20 3
J20 4 3 2 1 CON4
GND V CC P1.3 R21 330
J21 3 2 1 CON3
GND P1.4VCC
3.3V 电源模块
VCC
J22 1 2 3 4 USB-B
R22 1k
104 J27 CON2
D1
C12
VCC J25
2 1 CON2
VCC J26
2 1 CON2
C13
LED
VCC
GND
GND
VCC
R23 1K
VCC
D2 LED 3.3V 1Kx 6
R24R25R26 RERS2ES2
8 6 4 2
CPU 最小系统模块
J29
VCC R30
10K CON3 VCC R31
10K
P2.4
3 2 1 J30 3 2 1
103 R33 1K
P1.1
J24 2 1 CON2
R27R28R29 RESR2ERS2ES2
U2
IRQ MISO MOSI SCK CSN CE VCC GND NRF24N01
C14
104
7 5 3 1
VCC C15P1.5 P1.6 104
U3 1 2 3 4 5 HC-SR04
四键无线模块接口
2272J28
A
1
VCC 2
P3.0 3 P3.1 4 C16 5 104 6
7
APC220
U4 SET AUX TXD RXD EN VCC GND
J14
3.3V
1 2 CON2
C17 104 D4 LED
5V
P2.5
VCC
7361角度传感器接口
标题 尺寸 B 日期: 文件: 5
图号
ADC 接口 60S2单片机PWM 输出口
A
J23 2 1 CON2
USB 5V 取电模块
1
2
24L01无线模块接口
HC-SR04/US-100 超声波接口
3
APC220 接口模块
4
CJ31ON3VCC R32 5V
P2.6 10K 3
2 1 CON3
5V
修订
9-Aug-2012 第张 共张
C:\Documents and Settings\Administrator\桌面制\STC12C5A60S2--1.ddb图人:
6
图5 自制的单片机开发板
附录2:作品实物图
图一 显示坐标
图二 精度调试
图三 低功耗设计
2013年全国大学生电子设计竞赛
设计报告
参赛题目:手写绘图板 题目编号: G题
参赛队员:李大猛 闫胜利 袁新超 参赛单位:黄河水利职业技术学院
论文写作:李大猛
G 题 手写绘图板
摘 要
本手写绘图板系统以STC 系列单片机控制为核心,系统由电源模块、电压信 号采样模块、数据采集模块、数据处理模块、精密毫伏电压放大模块、检测电路 模块、液晶显示模块等模块构成。系统基本原理是:覆铜板上变化的电压通过精 密放大器放大后送给A/D转换电路进行数据采集, 根据AD 采集的数据单片机对采 集的数据处理计算出触点的坐标,并在液晶上显示。系统使用通用元器件较好的 实现了题目要求的各项指标。并较好的实现表笔接触点坐标显示,图形显示,轨 迹显示等功能。该系统具有可靠性好,性能稳定,精度较高等优点。
Abstract
The handwriting drawing board system to STC microcontroller as the core, the system is composed of a power supply module, a voltage signal sampling module, data acquisition module, data processing module, precision millivolt voltage amplification module, detection module, LCD display module. The basic principle is: the voltage change on the CCL by precision amplifier for A/D conversion circuit of data acquisition,
according to the AD data processing chip to collect data to calculate the coordinates of the points, and in the liquid crystal display. System uses theuniversalcomponentscanachievetherequirementsofthesubjectindex. Andachievebettercoordinatepencontactpointdisplay,graphicdisplay, trajectory display function. The system has good reliability, stable performance, high precision.
关键词:STC89S52单片机,数据采集,A/D转换,精密毫伏电压放大器,液晶
一、 系统设计
1.1 基本要求:
(1)指示功能:表笔接触铜箔表面时,能给出明确显示。 (2)能正确显示触点位于纵坐标左右位置。 (3)能正确显示触点四象限位置。 (4)能正确显示坐标值。
(5)显示坐标值的分辨率为 10mm, 绝对误差不大于 5mm。
1.2 发挥部分
(1)进一步提高坐标分辨率至 8mm 和 6mm;要求分辨率为 8mm 时,绝对误差 不大于 4mm;分辨率为 6mm 时,绝对误差不大于 3mm。
(2)绘图功能。能跟踪表笔动作,并显示绘图轨迹。在 A 区内画三个直径分别 为 20mm,12mm 和 8mm 不同直径的圆,并显示该圆;20mm 的圆要求能在 10s 内 完成,其它圆不要求完成时间。
(3)低功耗设计。功耗为总电流乘 12V;功耗越低得分越高。要求功耗等于或 小于 1.5W。
(4)其他。如显示文字,提高坐标分辨率等。
二、 总体设计方案
2.1 设计思路
题目要求设计一个利用普通 PCB 覆铜板设计和制作手写绘图输入设备。设计中 利用手写笔在覆铜板上滑动时会有微弱的变化电压信号,采用运算放大器对微弱 信号进行放大使电压相对升高,然后对变化的电压信号采样,采样部分采用运算 放大器和 A/D 转换芯片。然后进行 AD 采集,根据 AD 数据,计算出坐标。显示部分 则用带字库的液晶模块LCD12864,LCD12864 可以直观显示触点位于纵坐标左右 位置,象限位置,触点滑动轨迹。
2.2 方案论证与比较
2.2.1 采样电路的设计方案与选择
方案一:采用并行A/D转换芯片,并行方式一般在转换后可直接接收,转换 时间快但使用芯片的引脚比较多。
方案二:采用串行A/D 转换芯片,串行方式所用芯片引脚少,封装小,在PCB 板上占用的空间也小,但需要软件处理才能得到所需的数据。
综上所述,结合本设计对数据采样的各项要求和单片机引脚的具体情况,采用TI 公司的8 位串行A/D 转换芯片TLC549. 通过单片机AT89S52 产生满足时序要求的 输入/输出时钟,以及对A/D 芯片的片选控制,完成对整个A/D 转换过程的控制。 TLC549具有8位分辨率模数转换,最大转换时间为17us, 每秒访问和转换最多可达
40000次,功耗低,可以满足本设计要求。
2.2.2 显示方式的设计方案论证与选择
方案一:采用LED 数码管显示。如果需要显示的内容较多,过多增加数码管 的个数显然不可行,进行轮流显示则控制复杂,此外,数码管需要较多连线,使 电路复杂,功耗比较大。
方案二:采用带字库的液晶模块LCD12864显示。可以显示字符、图片,利用 单片机直接驱动液晶显示模块,设计简单,且显示界面宽大美观舒适,耗电小。 综上所述,本设计要显示的内容较多,所以选择方案二,采用LCD12864实时显示 波形的型类、频率、占空比和幅度等功能。
2.2.3 稳压电源的设计方案论证于选择
稳压电源电路采用三端固定式稳压器,只要把正输入电压 Ui 加到 3025 (7812,7912)的输入端,3025(7812,7912)的公共端接地,其输出端便能输 出芯片标称正电压 Uo。在电路中,芯片输入端和输出端与地之间除分别接大容 量滤波电容外,另外我们采用 3025 还需在芯片引出脚根部接小容量电容到地, 分别用于抑制芯片的自激振荡和压窄芯片的高频带宽,减小高频噪声。
2.2.4 电源模块的设计方案论证于选择
方案一:采用升压型稳压电路。用两片MC34063芯片分别将3V 的电池电压 进行直流斩波调压,得到+5V的稳压输出。只需使用两节电池,既节省了电
池又减小系统体积重量,但该电路供电电流小,供电时间短,无法保证系统长期 稳定运作。
方案二:采用环形变压器,与普通变压器相比激磁能量和铁心损耗将
减少25%,电效率高达95%以上,漏磁小,电磁辐射小,振动噪声小,无需另加 屏蔽层来屏蔽电磁干扰,适合用在高灵敏度和易受高频影响的电子设备上。加上 三端固定稳压器获得±5V 电源,+5V用LM7805 输出,-5V 用LM7905输出,先在变 压器的输出段用一个用整流二极管组成的整流桥整流,再用电容滤掉高频成 分,这样就可以获得一个纹波系数小、稳定的电压。
综上所述,选择方案二,采用环形变压器三端稳压器电路。
三、系统硬件设计
3.1 系统的总体方案
本系统采用STC 系列单片机为核心的触摸手写绘图板系统。它主要包括以下 几个组成部分:1) 绘图板电压采集;2) 屏体显示;3) 数据处理;4)数据采集 AD 转换。具体来讲给覆铜板两端加载 5 伏电压,另两端接地。手写笔一端通过 放大器连接A/D转换电路,A/D转换电路连接单片机。覆铜板相当于滑动变阻器 两端,手写笔相当于变阻器的滑动端。当手写笔在覆铜板上滑动时,相应的手写 笔上的电压会规律性发生变化。由于覆铜板电阻率较低,相应的手写笔上的电压 变化值0-3毫伏,低电压信号通过多级级联高增益放大器把低电压信号放大后送
给 A/D 转换电路数据采集, 51 单片机对采集的数据处理后计算出坐标,并在液 晶上显示。系统通过高增益放大器放大微弱信号和精确地数据采样,单片机的数 据处理显示。该系统具有可靠性好,精度高等优点。
12V 电源
5V 稳压 9V 稳压 200mA 稳流模块
89C52 单 片 机
A/D 1549
毫伏级放 大 模 块
覆 铜 板
ADS7843
1 2 8 6 4 液 晶 显 示
图3.1系统组成框图
3.2 单元电路(功能模块)的设计
STC89C52单片机最小系统。最小系统包括晶体振荡电路、复位开关和电源部分。
VCC C5
10uF
C6 104
3
J5
VCC P1.0 2
P1.1 4 P1.2 6 P1.3 8 C8
P1.410
10uF P1.512
P1.614 P1.716
P3.0 2 P3.1 4 R19 P3.2 6 10K P3.3 8
P3.410 P3.512 P3.614 P3.716
2 1 4 3 6 5 8 7 10 9 1211 1413 1615 J17
2CON 18 2 4 3 6 5 8 7 10 9 1211 1413 1615
1 3 5 7 9 11 13 15 1 3 5 7 9 11 13 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
STC1
CLKOUT2/ADC0/P1.0 VCC ADC1/P1.1 P0.0
P0.1 RXD2/ECI/ADC2/P1.2
TXD2/CPP0/ADC3/P1.3 P0.2 SS/CPP1/ADC4/P1.4 P0.3
P0.4 MOSI/ADC5/P1.5
P0.5 MISO/ADC6/P1.6
SCLK/ADC7/P1.7 P0.6 P4.7/RST P0.7 INT/RXD/P3.0 EX_LVD/P4.6/RST2 TXD/P3.1 ALE/P4.5 INT0/P3.2 NA/P4.4 INT1/P3.3 P2.7/A15 CLKOUT0/INT/T0/P3.4 P2.6/A14 CLKOUT1/INT/T1/P3.5 P2.5/A13 WR/P3.6 P2.4/A12 RD/P3.7 P2.3/A11 XTAL2 P2.2/A10 XTAL1 P2.1/A9 GND P2.0/A8 STC89C52RC/12C5A60S2
2CON8*2
C9 33pF 12M C10 33pF
5
VCC 40 39 38 37 36 35 34 33 32 31
VCC 30 29 28 2 27 4 26 6 25 8 24 10 23 12 22 14 21 16
J6 2
4 6 8 10 12 14 16
J7 2 1 4 3 6 5 8 7 10 9 1211 1413 1615 2CON8
1 3 5 7 9 11 13 15
P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0
2 1 4 3 6 5 8 7 10 9 1211 1413 1615 2CON8
1P0.0 3P0.1 5P0.2 7P0.3 9P0.4 1P 10.5 1P 30.6 1P 50.7
CPU 最小系统模块
图3.2 STC89C52单片机最小系统
3.3 电源模块的设计
电源电路是用环形变压器三端固定稳压器获得±5V 电源,+5V用7805输出, -5V 用7905 输出,环形变压器的电压经过三端固定稳压器,再经整流桥整流, 用电容滤掉高频成分。如图3.3.1
图3.3.1 ±5V 稳压电源电路
+15V
U3
IN FB
ON/OFF OUT GND
LM2576HVT-5.0
1 5 3
C1 Cap 100uF
1 U1 IN OUT GND
3
4 2
L? Inductor 10mH D? Diode
Out
+5V
C? Cap 1000uF
LM7815CT
C3 Cap 22uF
1
U4 IN OUT GND
3
+5V
Out
LM7805CT
U2 IN OUT GND
1 3
1
C4 Cap 22uF
U5 IN OUT GND
3
+9V
Out
LM7815CT
LM7809CT
图3.3.2 系统供电模块
3.4 输出微弱信号采样电路模块设计
输出信号采样电路模块设计由一片MAX414 和TLC159 构成,分别与单片机 P3.5、P3.6 和 P3.7 脚连接,如图,其中MAX414 将输出模拟信号放大,模拟输 入信号(ANALOGIN )经过TLC549 内部采样/保持器至8-bit 逐次比较式A/D转换 器。片选控制端(CS_,低有效)和输入/输出时钟端(I/O CLOCK)与独立的内 部系统时钟通过内部逻辑控制电路,实现外部接口与内部的数据传输,通过单片 机从而实现波形幅度的控制。
图3.4.1 输出信号采样电路模块设计
3.5 数据采集模块
数据采集模块数据采集系统如图,采用AD1549 模数转换器及89C52 控制数 据采集。A/D转换器是数字信号处理的基础,是数据采集系统、测量仪器仪表及 工业控制设备等测控装置与测控系统中应用比较广泛的器件。随着大规模集成电 路技术的发展,各种高精度、低功耗、可编程、低成本的A/D转换器不断推出, 使得测控系统的电路更加简洁,可靠性更高。本系统采用芯片TLC1549IP 是美国 TI 公司生产的10位开关电容型逐次逼近A/D转换器,其简单的串行输出接口可方 便地与各类微机进行连接,是10位数据采集系统的理想器件。
TLC1549基本工作原理:TLC1549IP 是带有串行输出接口的10位8引出脚A/D 转换器,主要由采样-保持电路,逐次逼近式A/D变换器,节拍发生器与逻辑控制 器单元,数据寄存器,数据选择器与串行输出电路单元,内部电源等组成。它的 核心是逐次逼近式A/D变换器。在逻辑控制电路与节拍发生器产生的时钟信号的 共同作用下,首先由采样-保持电路对输入的模拟信号进行样本值采集并由保持 电路将采样的电平值保持到下一个采样时刻。接下来由逐级比较式A/D变换器完 成量化编码处理,模拟信号被变换成数字信号并被送入数据寄存器,完成一次模 /数变换。在该次变换完成后,位于串行输出电路之前的数据选择器开始依次从 数据寄存器中读出信息位并按顺序把它们送到串行数据输出端(DATA?OUT )。这 里,选择和形成输出脉冲的频率由外部时钟信号(I/O?CLOCK)决定。。TLC1549IP 的内部结构框图如图3.5.1所示。
图3.5.1 TLC1549功能结构图
VCC
C? Cap 100pF C? Cap 100pF
C? Cap2 100pF
9 31 29 30 10 11 12 13 14 15 16 17
U?
VCC
Y1 12M
19 18
XTAL1 XTAL2
P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P1.0/T2 P1.1/T2EX P1.2/ECI P1.3/CEX0 P1.4/CEX1 P1.5/CEX2 P1.6/CEX3 P1.7/CEX4 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15
40 39 38 37 36 35 34 33 32 1 2 3 4 5 6 7 8 21 22 23 24 25 26 27 28
P2.0 P2.1 P2.2 P2.3
5 6 7 8 *
CS GND DATA REF I/O IN VCC REF TLC1549
4 3 2 1
VCC
C? CapC? 100pF Cap U? 100pF
1 R?A
16 2 1
VCC
Res Pack1 1K
LM336Z5.0
S?
SW-PB
RST EA/VPP PSEN
ALE/PROG P3.0/RxD P3.1/TxD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD
R? RPot 1K
R?A
Res Pack2 1K
20
VSS
P89C51RC2BN/01
图3.5.2 TLC1549 A/D串行接口应用原理图
3.6测量毫伏电压放大模块
测量放大器是信息检索与数据采集系统中常用的前置放大器,通常用在自动 控制及精密仪器等电子系统中。同时是一种高增益、直流耦合放大器,它具有差 分输入、单端输出、高输入阻抗和高共模抑制比等特点,能够将微弱的电信号进 行放大。
本系统放大电路用用集成电路OP07搭建,OP07是一种高精度单片运算放大
器,具有很低的输入失调电压和漂移。OP07 的优良特性使它特别适合作前级放 大器,放大微弱信号。
图3.6 OP07放大电路
该电路中用三个 OP07 集成运放,电路设计满足同相并联差值比例输入级和 差分放大输出级,其中U1与U2为两个性能一致(主要指输入阻抗、共模抑制比 和开环增益)的集成运放 OP07,工作于同相放大方式,构成平衡对称的差动放 大输入级,U3采用集成运放OP07,工作于差动放大方式,用来进一步抑制U1、 U2的共模信号,并接成单端输出方式适应接地负载的需要。R10与R8、R9组成 反馈网络,引入了负反馈,直接耦合多级放大电路中,放大级数越多,放大倍数 也越大,该放大电路不但增益稳定,而且噪声、失真、输出阻抗都降低了,输入 阻抗也增大了,满足放大电路的性能指标。电路中通过对电位器的调节,来实现 该测量放大器放大倍数的调节。
器件选择:元器件的选择是高性能放大的保证,电路中运放U1、U2和U3均 选用集成运放OP07。U1和U2的参数必须尽可能相同其输入阻抗、共模抑制比和 开环增益一致,这样,电路中除了具有差模、共模输入电阻大的特点外,两运放 的共模增益、失调及漂移产生的误差也相互抵消。同时,为提高共模抑制比,对 称的电阻必须精密配置,通过调试电路,及在电路中用电位器代替电阻的方式, 满足本毕业设计要求的基本原则下,最终确定RW 的电阻值及R 的电阻值。
集成运放按供电方式可被分为双电源供电和单电源供电,在双电源供电中又 分为单运放、双运放和四运放。按制造工艺可将运放分为双极性、CMOS 型和BiFET 型,双极性运放一般输入偏置电流及器件功耗较大,但由于采用多种改进技术, 所以种类多,功能强;CMOS 型运放输入阻抗高、功耗小,可在低点源电压下工 作,初期产品精度低、增益小、速度慢,但目前已有低失调电压、低噪声、高速
度、强驱动能力的产品;BiFET 型运放采用双极型管和单级型管混合搭配的生产 工艺,以场效应管作输入级,使输入电阻高达 1012Ω 以上,目前有电参数各不 相同的多种产品。
对于本次设计中的前级运放 U1、U2 两个运放,要选择两个参数一样,最好 选择双差分对管,即在一个集成芯片上有两个参数一样的差分放大器。且要求输 入阻抗(Ri )大,至少大于2MΩ,温漂要小,差模放大倍数(AVD )要大,共模 抑制比(KCMR )要大的场效应管,例如OP07。 OP07作为常用运放的功能特点
OP07 芯片是一种低噪声,非斩波稳零的双极性运算放大器集成电路[11]。 具有低失调、低漂移、低噪声、偏置电流小等优点。由于 OP07 具有非常低的输 入失调电压(对于OP07A 最大为25μV),所以OP07在很多应用场合不需要额外 的调零措施。OP07同时具有输入偏置电流低(OP07A 为±2nA )和开环增益高(对 于 OP07A 为 300V/mV)的特点,这种低失调、高开环增益的特性使得 OP07 特别 适用于高增益的测量设备和放大传感器的微弱信号等方面。 有如下特点:
(1)低的输入噪声电压幅度-0.35uvp-p (0.1hz-10hz ) (2)极低的输入失调电压-10uv (3)极低的输入失调电压温漂-0.2uf/c (4)具有长期的稳定性-0.2uv/mo (5)低的输入偏置电流+1na~-1na (6)高的共模抑制比-126db
(7)宽的共模输入电压范围+14v~-14v (8)宽的电源电压范围±3v ~±22v (9)可替代725,108A ,741,AD510等电路
3.7 检测电路设计模块
覆铜板,是指纸和玻纤布等基材,浸以树脂,制成粘结片(胶纸和胶布) ,由 数张粘结片组合后,单面或双面配上铜箔,经热压固化,制成的板状产品,图3.7.1 所示。设计手写绘图板时最重要的问题是确定触摸点的坐标位置, 通过单片机控 制A/D准确地采样到被接触点电压的变化的坐标位置, 至于该点响应何种按键只 是交给相应的处理软件进行处理即可。
铜箔
粘结片
图3.7.1 覆铜板构造
测量X 坐标时:
1)在X+,X-两电极加上一个电压Vref ,Y+接一个高阻抗的ADC 。
2)两电极间的电场呈均匀分布,方向为X+到X-。
3)手触摸时,两个导电层在触摸点接触,触摸点X 层的电位被导至 Y层所接的ADC , 得到电压Vx 。
4)通过Lx/L=Vx/Vref,即可得到x 点的坐标。
Y 轴的坐标可同理将Y+,Y-接上电压Vref ,然后X+电极接高阻抗ADC 得到。
X1
Y0 Y1
覆铜板
X0
图3.7.2 覆铜板点触屏坐标
图3.7.3 覆铜板连接电路
普通的覆铜板一般由三部分组成,上下两层的阻性覆铜导体层、两层导体之
间的隔离层。近似等效为电阻触摸屏。
图3.7.4 覆铜板触点屏
电路工作时,覆铜板上下导体层相当于电阻网络,如图2所示。当某一层电
极加上电压时,会在该网络上形成电压梯度。如有外力使得上下两层在某一点接
触,则在电极未加电压的另一层可以测得接触点处的电压,从而知道接触点处的 坐标。比如,在顶层的电极(X+,X-) 上加上电压,则在顶层导体层上形成电压梯 度,当有外力使得上下两层在某一点接触,在底层就可以测得接触点处的电压, 再根据该电压与电极(X+)之间的距离关系,知道该处的X 坐标。然后,将电压切
换到底层电极(Y+,Y-)上,并在顶层测量接触点处的电压,从而知道Y 坐标。
覆铜板和表笔作为一个输入设备,对其控制用专门的芯片,控制覆铜板检测
电路的芯片要完成两件事情:其一,是完成电极电压的切换;其二,是采集接触 点处的电压值(即A/D)。本检测电路系统用ADS7843控制的实现。ADS7843是
一个内置12位模数转换、低导通电阻模拟开关的串行接口芯片。供电电压
2.7~5 V,参考电压VREF 为1 V~+VCC,转换电压的输入范围为~ VREF,最高
转换速率为125 kHz。表1为引脚功能说明,图3.7.5为其典型应用。
图3.7.5 ADS7843典型应用
ADS7843的内部结构及参考电压模式选择如图所示
图3.7.6 ADS7843引脚功能说明
ADS7846是一个典型的逐次逼近型AD 转换器,其结构是基于电荷再分配的比例电容阵
列结构,这种结构本身具有采样保持功能图3.7.7显示了ADS7846的基本工作结构 。
ADS7846工作电压可以从2.7V 到5.25V ,需要外部时钟来提供转换时钟和串口时钟,
同时还包含了一个内部2.5V 的基准电压电路,内部基准可以被外部的,低阻抗电压源驱动, 基准电压范围为1V 到+VCC,基准电压值决定了AD 转换器的输入范围。
覆铜板等效电阻屏
图3.7.7 ADS7846的基本工作结构
ADS7843之所以能实现对触摸屏的控制,是因为其内部结构很容易实现电极
电压的切换,并能进行快速A/D转换。A2~A0和SER/为控制寄存器中的控制位,
用来进行开关切换和参考电压的选择。
STC89C51
P2.0
P2.1
P2.2
P2.3
P2.3
INTO ADS7846 D1 D0 CK CS /PIN 显 示 屏 覆铜板
图3.7.8 ADS7846系统接人如图
ADS7846是四线式触摸屏的控制器:控制器的主要功能是分别向X 、Y 电极对
施加电压.并把测量电极上的电压信号转换为相应触点的X 坐标,通过中断请求 向P89C669表示有触摸发生。89C51通过P1.3、P1.4和P1.2、P1.1的配合来获取
坐标数据。系统接人如图所示。
当液晶屏上显示出需要操作的画面,我们通过表笔进行操作时。用户在覆铜
板屏上的有效区域点击,触摸屏的X 方向输出电阻和Y 方向输出电阻分别随X 和Y 呈线性变化,ADS7846控制器将其分别转换为12位数据,通过中断告知单片机需
要接收数据。单片机接收到数据后进行处理。首先进行触点数据是否有效的判断, 包括:a) 是否是人的误操作,即是否是由于人的抖动而产生的错误数据。
b)ADS7846传过来的数据是否有效.由于刚开始传过来的第一个坐标是用户开始
接触触摸屏时产生的。所以电阻并不准确.从而导致数据也不准确,通常要去掉: 在接收过程中。通常是采用多次平均的方法。假如有一次接收的数据和平均值的 差别很大,则这次测量就作废了.需要重新测量。一旦数据有效。单片机就会继 续解算触点坐标落在液晶屏上的位置.并根据解算的结果来判断执行相应的功能 函数。使触摸屏和液晶屏有机地结合起来.建立一定的逻辑关系.交互地进行信 息存取和输出。
3.8 液晶显示模块
液晶显示模块是128×64 点阵的汉字图形型液晶显示模块,可显示汉字及图
形,内置国标GB2312 码简体中文字库(16X16 点阵)、128 个字符(8X16 点阵) 及64X256点阵显示RAM (GDRAM )。可与CPU 直接接口,提供两种界面来连接微处 理机:8-位并行及串行两种连接方式。具有多种功能:光标显示、画面移位、睡 眠模式等
1.显示资料RAM (DDRAM )
显示资料RAM 提供64×2 个位元组的空间,最多可以控制4 行16字(64个字)的
中文字型显示,当写入显示资料RAM 时,可以分别显示CGROM 、HCGROM 与CGRAM 的
字型;ST7920A 可以显示三种字型,分别是半宽的HCGROM 字型、CGRAM 字型及中 文CGROM 字型,三种字型的选择,由在DDRAM 中写入的编码选择,在0000H —0006H 的编码中将自动的组成两个位元组的编码达成中文字型的编码(A140—D75F ), 各种字型详
细编码如下:
1.显示半宽字型:将8 位元资料写入DDRAM 中,范围为02H —7FH 的编码。
2.显示CGRAM 字型:将16位元资料写入DDRAM 中,总共有0000H ,0002H ,0004H , 0006H 四种编码参考信号相位累加器相位加法器波形存储器数 字乘法波器
单片机接受键盘的中断申请,根据不同的按键执行不同的功能,将执行的结果在 LCD 上显示出来.在显示的时候,由于LCD 只接受相应字符的字形码,所以对于 固定不变的提示信息和标题,将字型码存储在单片机ROM 的字库内.对于变化的 数值的字型码,则在显示以前通过查字库,将字库内存储的数字的字型码复制到 自己的存储单元.然后将自己的存储单元的字型码送入LCD 显示缓存中显示。由 单片机P2.0~P2.7 口控制D7~D0S 数据的输入输出,RS 为数据选择信号由P3.0
控制,E 为读写使能端,高电平有效,下降沿锁定数据由P3.2控制,R/W为读写 选择端,高电平:读数据,低电平:写数据,由单片机P3.1口控制。液晶显电路 如图3.8所示。
图3.8 液晶显示电路
四、系统软件设计及分析
4.1 主体程序流程图
开 始
初 始 化
覆 铜 板 电 压 变 化
T L C 1 5 4 9 采 样
A / D 转 换 电 路
单 片 机
液
晶 显 示
图4.1主体程序流程
五、部分程序
5.1 采样程序
5.1.1 主程序。主程序包含有A/D 采样子程序。在AD 采样读取成功后对数
据进行
分析,并选择合适的基准源。该过程结束后进入低功耗模式,等待下一个采样周 期的到来。
5.2.2 A/D 采样子程序。A/D 使用通道0 进行电流检测。单片机给A/D 发
出通道选择信号,然后等待A/D芯片转换数据,最后读取其数据
图5.1采样程序流程
TLC1549串行A/D转换程序
#include
#include
#define uchar unsigned char
#define uint unsigned int
/*****************************************/
/* 12864引脚定义 */
/*****************************************/
sbit CS_12864=P3^5; //片选信号线
sbit SID_12864=P3^6; //串行数据线
sbit SCLK_12864=P3^4; //串行同步时钟线,上升沿有效
sbit RST_12864=P1^3; //RST复位信号, 接高电平
sbit CH_12864=P3^7; //并行,串行选择信号,高电平并行;低电平串行, 接低电平
/*****************************************/
/* TLC1549引脚定义
/*****************************************/
sbit TLC1549_CS=P1^3; //片选端
sbit TLC1549_DAT=P1^4;//数据端
sbit TLC1549_CLK=P1^5;//时钟端
/*****************************************/
/* 12864显示内容 */
/*****************************************/
uchar code dis1[]={" 电压采集 "};
uchar dis2[]={"电压:0.0000V"};
uchar dis3[]={"采集:0000"};
/*****************************************/
/* 毫秒延时函数 */
/*****************************************/
void delay_ms(uint xms)
{
uint i,j;
for(i=0;i
for(j=0;j
}
/*****************************************/
/* 微妙延时函数 */
/*****************************************/
void delay_us(uint i)
{
while(i--); //延时时间为(i*2+5)微秒,除0外
}
/*****************************************/
/* TLC1549初始化 */
*/
/*****************************************/
void init_TLC1549()
{
uchar i;
TLC1549_CS=0;
TLC1549_CLK=0;
TLC1549_DAT=1;
for(i=10;i>0;i--)
{
TLC1549_CLK=1;
delay_us(2);
TLC1549_CLK=0;
delay_us(2);
}
TLC1549_CS=1;
delay_us(20);
}
/*****************************************/
/* 获取TLC1549转换结果 */
/*****************************************/
uint get_TLC1549()
{
uint tmp=0;
uchar a;
float temp;
TLC1549_CS=1;
delay_us(53);//
TLC1549_CS=0;
delay_us(1);
for(a=10;a>0;a--) //读取AD 转换后的十位数据
{
tmp
if(TLC1549_DAT)
tmp|=1; //如果数据输出是1,或上tmp, 再赋给tmp ,这样就读的数
据口数据
TLC1549_CLK=1;
delay_us(2);
TLC1549_CLK=0;
}
TLC1549_CS=1;
delay_us(20);
/*if(tmp>1004)
temp=tmp+;
else if(tmp>983)
temp=tmp+;
else if(tmp>962)
temp=tmp+;
else if(tmp>941)
temp=tmp;
else if(tmp>920)
temp=tmp;
else if(tmp>900)
temp=tmp*1.02225+0.5;
else if(tmp>879)
temp=tmp*1.0223+0.5;
else if(tmp>858)
temp=tmp*1.02235+0.5;
else if(tmp>837)
temp=tmp*1.0224+0.5;
else if(tmp>550)
temp=tmp*1.02155+0.5;
else if(tmp>500)
temp=tmp*1.0216+0.5;
else if(tmp>450)
temp=tmp*1.02315+0.5;
else if(tmp>400)
temp=tmp*1.0232+0.5;
else if(tmp>350)
temp=tmp*1.02465+0.5;
else if(tmp>300)
temp=tmp*1.0247+0.5;
else if(tmp>250)
temp=tmp*1.0275+0.5;
else if(tmp>200)
temp=tmp*1.028+0.5;
else if(tmp>150)
temp=tmp*1.0355+0.5;
else if(tmp>100)
temp=tmp*1.0366+0.5;
else if(tmp>80)
temp=tmp*1.052+0.5;
else if(tmp>60)
temp=tmp*1.1+0.5;
else if(tmp>40)
temp=tmp*1.18+0.5;
else if(tmp>20)
temp=tmp*1.38+0.5;
else if(tmp>10)
temp=tmp*1.5+0.5;
else if(tmp>5)
temp=tmp*1.7+0.5;
else
temp=5;
tmp=(uint)temp;
if(tmp>1023)
tmp=1023; */
return tmp;
}
/*写指令到LCD12864,输入有*/
void write_cmd_12864(uchar command_data)
{
uchar i;
uchar i_data;
i_data=0xf8;
CS_12864=1;
SCLK_12864=0;
for(i=0;i
{
SID_12864=(bit)(i_data&0x80);
SCLK_12864=0;
SCLK_12864=1;
i_data=i_data
delay_ms(1);
}
i_data=command_data;
i_data&=0xf0;
for(i=0;i
{
SID_12864=(bit)(i_data&0x80);
SCLK_12864=0;
SCLK_12864=1;
i_data=i_data
delay_ms(1);
}
i_data=command_data;
i_data
for(i=0;i
{
SID_12864=(bit)(i_data&0x80);
SCLK_12864=0;
SCLK_12864=1;
i_data=i_data
delay_ms(1);
}
CS_12864=0;
delay_ms(10);
}
/*写显示数据到LCD, 输入有*/
void write_data_12864(uchar command_data)
{
uchar i;
uchar i_data;
i_data=0xfa;
CS_12864=1; SCLK_12864=0;
for(i=0;i
{
SID_12864=(bit)(i_data&0x80);
SCLK_12864=0;
SCLK_12864=1;
i_data=i_data
delay_ms(1);
}
i_data=command_data;
i_data&=0xf0;
for(i=0;i
{
SID_12864=(bit)(i_data&0x80);
SCLK_12864=0;
SCLK_12864=1;
i_data=i_data
delay_ms(1);
}
i_data=command_data;
i_data
for(i=0;i
{
SID_12864=(bit)(i_data&0x80);
SCLK_12864=0;
SCLK_12864=1;
i_data=i_data
delay_ms(1);
}
CS_12864=0;
delay_ms(10);
}
/*设定显示位置输入有:X 和 Y,X表示每行的首地址,Y 表示从第几个字开始*/
void lcd12864_pos(uchar X,uchar Y)
{
uchar pos;
if(X==0)
X=0x80;
else
if(X==1)
X=0x90;
else
if(X==2)
X=0x88;
else
if(X==3)
X=0x98;
pos=X+Y;
write_cmd_12864(pos); //显示地址
}
/*lcd 12864初始化*/
void lcd12864_init()
{
delay_ms(10);
write_cmd_12864(0x30);//基本指令操作
delay_ms(5);
write_cmd_12864(0x0c);//显示开,光标关
delay_ms(5);
write_cmd_12864(0x01);//清除led 显示内容
}
/*****************************************/
/* 12864显示函数 */
/*****************************************/
void display()
{
uchar i;
lcd12864_pos(0,0); //设置显示位置为第一行的第一个字符
i=0;
while(dis1[i]!='\0')
{
write_data_12864(dis1[i]);
i++;
}
lcd12864_pos(1,0); //设置显示位置为第二行的第一个字符
i=0;
while(dis2[i]!='\0')
{
write_data_12864(dis2[i]); //显示字符
i++;
}
lcd12864_pos(2,0); //设置显示位置为第二行的第一个字符
i=0;
/*while(dis3[i]!='\0')
{
write_data_12864(dis3[i]); //显示字符
i++;
}*/
}
/*****************************************/
/* 对采集后数据处理,转换实际电压值 */
/*****************************************/
void deal_TLC1549(uint dianya)
{
//uint dianya;
//dianya=get_TLC1549();
//dianya=(dianya*(500/255))*100;//
float dianya1;
dianya1=dianya;
dis3[5]=(dianya/500+0x30);
dis3[6]=(dianya/50%5 +0x30);
dis3[7]=(dianya/5%5+0x30);
dis3[8]=(dianya%5+0x30);
dianya1=dianya1*25000/1023;//注意:dianya=(dianya*(50000/1023))与
dianya=(dianya*(5/1023))*10000的结果是不一样的
dianya=(uint)dianya1;
dis2[5]=(dianya/5000+0x30);
dis2[7]=(dianya/500%5+0x30);
dis2[8]=(dianya/50%5+0x30);
dis2[9]=(dianya/5%5+0x30);
dis2[10]=(dianya%5+0x30);
//dianya=dianya*50000/1023;//
//dis2[5]=(dianya/10000+0x30);
//dis2[7]=(dianya/1000%10+0x30);
//dis2[8]=(dianya/100%10+0x30);
//dis2[9]=(dianya/10%10+0x30);
//dis2[10]=(dianya%10+0x30);
}
void main()
{ CH_12864=0;
delay_ms(10); //延时
lcd12864_init(); //初始化lcd
init_TLC1549();
while(1)
{
deal_TLC1549(get_TLC1549());
display();
}
}
5.3 检测电路AD7846控制覆铜板触点位置程序
图5.3 检测电路AD7846控制覆铜板触点位置程序
ADS7843驱动程序
ADS7843是一个内置 12位模数转换、低导通电阻模拟开关的串行接口芯片。供
电电压 2.7~5 V,参考电压 VREF 为 1 V~+VCC,转换电压的输入范围为 0~ VREF, 最高转换速率为 125 kHz。
// ADS7843 驱动程序(串行)
//硬件连接: DCLK ——P0^0;
// CS ——P0^1;
// DIN ——P0^2;
// BUSY ——P0^3
// DOUT ——P0^4
// PENIRQ ——P3^2;
// VDD--逻辑电源(+5V)
VSS--GND(0V) //
//ADS7843.c
#include
#include //STC单片机头文件
#define uint unsigned int
#define uchar unsigned char
sbit DCLK = P0^0;
sbit CS = P0^1;
= P0^2; sbit DIN
sbit BUSY = P0^3;
sbit DOUT = P0^4;
sbit PENIRQ = P3^2;
void Tranfer(char Data);
uint average(uint a[8]);
//============================================================ ========================
//函数名称:void delay(uint us)
//函数功能:延时子函数
//入口参数:us 延时时间
//出口参数:无
//============================================================ ========================
void delay(uint us)
{
while(us--);
}
//============================================================ ========================
//函数名称:void ADS7843_start(void)
//函数功能:ADS7843启动
//入口参数:无
//出口参数:无
//============================================================ ========================
void ADS7843_start(void)
{
DCLK=0;
CS=1;
DIN=1;
DCLK=1;
CS=0;
} //时钟信号,下降沿有效 //片选信号,低电平有效 //串行数据输入 //忙信号 //串行数据输出 //键盘中断请求信号,低电平(负边沿)有效
//============================================================ ========================
//函数名称:void ADS7843_wr(uchar dat)
//函数功能:写 ADS7843
//入口参数:dat 写入的数据
//出口参数:无
//============================================================ ========================
void ADS7843_wr(uchar dat)
{
uchar count;
DCLK=0;
for(count=0;count
{
dat
DIN=CY;
DCLK=0;
_nop_();
_nop_();
_nop_();
DCLK=1;
_nop_();
_nop_();
_nop_();
}
}
//============================================================ ========================
//函数名称:uint ADS7843_rd(void)
//函数功能:读 ADS7843
//入口参数:无
//出口参数:读回的坐标值
//============================================================ ========================
uint ADS7843_rd(void)
{
uchar count=0;
uint dat=0;
for(count=0;count
{
dat
DCLK=1; _nop_();_nop_();_nop_(); //下降沿有效
DCLK=0; _nop_();_nop_();_nop_();
if(DOUT)
dat++;
}
return(dat);
}
//============================================================ ========================
//函数名称:void intr0_int()
//函数功能:外中断 0中断服务函数
//入口参数:无
//出口参数:无
//============================================================ ========================
void intr0_int() interrupt 0 using 2
{
uint X=0,Y=0,a[4],i, avex,avey,x[8],y[8];
IE=0; //关中断
delay(100); //中断后延时以消除抖动,使得采样数据更准确
if(!PENIRQ)
{
for(i=0;i
{
ADS7843_start();
delay(2);
ADS7843_wr(0x90);//送控制字 10010000 即用差分方式读 X 坐标
delay(2);
DCLK=1;
_nop_();
_nop_();
_nop_();
_nop_();
DCLK=0;
_nop_();
_nop_();
_nop_();
_nop_();
X=ADS7843_rd(); //读 X 轴坐标
x[i]=X;
ADS7843_wr(0xD0); //送控制字 11010000 即用差分方式读 Y 坐标
DCLK=1;
_nop_();
_nop_();
_nop_();
_nop_(); DCLK=0; _nop_(); _nop_(); _nop_(); _nop_();
Y=ADS7843_rd(); //读 Y 轴坐标 y[i]=Y; CS=1; }
avex=average(x); //X坐标数据处理 a[0]=avex/1000; //发上位机观察结果 a[1]=(avex-a[0]*1000)/100;
a[2]=(avex-a[0]*1000-a[1]*100)/10; a[3]=avex%10; Tranfer(a[0]+48); Tranfer(a[1]+48); Tranfer(a[2]+48); Tranfer(a[3]+48);
avey=average(y); //Y坐标数据处理
a[0]=avey/1000; //发上位机观察结果 a[1]=(avey-a[0]*1000)/100;
a[2]=(avey-a[0]*1000-a[1]*100)/10; a[3]=avey%10; Tranfer(a[0]+48); Tranfer(a[1]+48); Tranfer(a[2]+48); Tranfer(a[3]+48);
for(i=0;i
IE=0x81; }
//开中断
//============================================================ ======================== //函数名称:void init_serial() //函数功能:初始化串口 //入口参数:无 //出口参数:无
//============================================================ ======================== void init_serial() {
TMOD=0x22; //定时器 T1使用工作方式 2 TH1=250; //设置初值 TL1=250; TR1=1; //开始计时 PCON=0x80; //SMOD=1; SCON=0x50; //工作方式 1,波特率 9600bit/s,允许接收 TI=1; }
//============================================================ ======================== //函数名称:void Tranfer(char Data) //函数功能:发送数据程序
//入口参数:Data 要发送的数据 //出口参数:无
//============================================================ ======================== void Tranfer(char Data) {
while(TI==0); SBUF=Data; TI=0; }
//============================================================ ======================== //函数名称:int main() //函数功能:主函数 //入口参数:无 //出口参数:无
//============================================================ ======================== int main() {
// uint b[4];
TCON=0x01; //设置外部中断 0下降沿触发
EX0=1; //开外中断 0 EA=1; //开总中断 init_serial(); while(1); }
//============================================================ ========================
//函数名称:uint average(uint a[8])
//函数功能:数据处理程序,采集 8次的数据,去掉最大值,去掉最小值,然后求 平均
//入口参数:数组首地址 //出口参数:平均值
//============================================================ ======================== uint average(uint a[8]) {
uint max,min,i,ave=0,sum=0;
max=a[0]; min=a[0];
for(i=0;i
if(maxif(min>a[i])min=a[i]; sum+=a[i]; }
ave=(sum-min-max)/6; return ave; }
六、系统测试分析
6.1 测试仪器与设备
基本仪器清单如表1所示。
仪器名称
表1 基本仪器清单 型号 指标
20Hz 60MHZ
100KHz~100KHz
± 3% 10Hz~800kHz
± 10% +5V,+12V, -5V,-12V
50Hz
1 5 位 2
生产厂家 日本岩崎
岩崎台式模拟示波 SS-7802A
器
双通道数字示波器 TDS1002 双通道双指针毫伏 DF2170B 表(低频毫伏表)
数 量 1
Tektronix 公司 1 宁波中策电子有限 1
公司
稳压电源 WD-5
启东市斯迈计算机 1 厂
宁波中策电子有限 1
公司 台湾富贵仪器 1 ESCORT
直流稳压源 台式万用表
DF17305B 3A EDM-3155
A
数万用表 Vc9806+
1 4 位 2
深圳市胜高电子科 1
技公司
6.2 电路的调试
整个系统硬件的调试有以下:
(1)电源电路采用环形变压器,减少电磁干扰,减少纹波系数获得较纯净和稳 定的电源。
(2)显示电路中,为了获得较好的亮度,加上了一个10K 的精密可调电阻,这样 可以调节液晶模块的亮度。
(3)D/A 转换电路中,为了保证D/A 转换器总线在空余方式为高电平,两个DA 转换器都要的数据线和时钟线都接上拉电阻与电源相连,并加一个去耦电容。 (4) 在信号采样电路的的运算放大器的1 脚和2 脚并接一个330P 的钽电 容C80,这样,在高频的时候消除自激现象,电压信号得到明显改善
(5)表笔滑动时覆铜板上的电压很小,AD 采集不到,经过多级精密放大后信号 变大。
系统测试方案与测试结果
将表笔在覆铜板上随意画时,液晶显示屏上能显示接触点的所在象限位置及坐标 但有一定的误差。测试结果如下: 表笔接触次数 第1次 第2次 第3次 第4次 测量点坐标 (1.5、1.2) (2.3、2) (-3.5、3) -4、-4.5 实际点坐标 (1、1) (2、2) (-3、3) (-4、-4)
七、 总结
系统采用STC 系列单片机为核心的触摸手写绘图板系统。它主要包括以下几 个组成部分:1) 绘图板电压采集;2) 屏体显示;3) 数据处理;4)数据采集AD 转换。具体来讲给覆铜板两端加载5伏电压,另两端接地。手写笔一端通过放大 器连接A/D转换电路,A/D转换电路连接单片机。覆铜板相当于滑动变阻器两端, 手写笔相当于变阻器的滑动端。当手写笔在覆铜板上滑动时,相应的手写笔上的 电压会规律性发生变化。由于覆铜板电阻率较低,相应的手写笔上的电压变化值 0-3 毫伏,低电压信号通过多级级联高增益放大器把低电压信号放大后送给 A/D 转换电路数据采集, 51 单片机对采集的数据处理,并在液晶上显示。系统通过 高增益放大器放大微弱信号和精确地数据采样,单片机的数据处理显示。该系统 具有可靠性好,精度高等优点。
结束语:
本次大赛的题目充分体现了当今时代对数字化的高要求,同时要求利用成熟 的技术与新技术结合,充分发挥各自的功能,甚至提高到更高的性能,本着这个 原则,我们充分利用的现有的条件,基本上完成了题目的要求,希望本次大赛能 够圆满成功!
参考文献:
[1] 全国大学生电子设计设计竞赛组委员会. 全国大学生电子设计竞赛训练教
程[M].北京电子工业出版社,2005年 [2] 全国大学生电子设计设计竞赛组委员会. 全国大学生电子设计竞赛获奖作
品汇编(第一届~第五届)[M].北京理工大学出版社,2004年 [3] 李银祥. 数控电流源[R].武汉:武汉理工大学测试中心,2001年 [4] 秦迎春. 利用 AD7542 实现程控电流源[J].国外电子元器件,2003,6:32~ 33
[5] 张智杰.AD574在数据采集中的应用[J].国外电子元器件,2003,6:55~56 [6] 房小翠. 单片机实用系统设计技术[M].北京:国防工业出版社,1999年 [7] 周庆. 高稳定电流比较环节引入的纹波分析[J].云南大学学报,1992, 21:79~81
[8] 刘公志. 新型数字直流电源设计[J].杭州电子工业学院学报,2004, 3(24):19~22
[9] 赵建玉. 智能电流源设计[J].山东建材学院学报,1993,3(13):29~31
[10] 俞俊民. 自制恒流源[J].沈阳电力高等专科学校学报,1997,2(6):13~ 15
[11] 朱传奇. 简易使用的直流电流源[J].山东电力技术,1999,1:75~76
[12] 马云峰. 单片机控制的直流电流源设计[J].潍坊高等专科学校学报,1999, 3:60~61
附录
附录1:电路原理图
VCC
C? Cap 100pF C? Cap 100pF
C? Cap2 100pF
S?
SW-PB
9 31 29 30 10 11 12 13 14 15 16 17
U?
VCC
Y1 12M
19 18
XTAL1 XTAL2
P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P1.0/T2 P1.1/T2EX P1.2/ECI P1.3/CEX0 P1.4/CEX1 P1.5/CEX2 P1.6/CEX3 P1.7/CEX4 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15
40 39 38 37 36 35 34 33 32 1 2 3 4 5 6 7 8
*
21 22 23 24 25 26 27 28
P2.0 P2.1 P2.2 P2.3
5 6 7 8
CS GND DATA REF I/O IN VCC REF TLC1549
4 3 2 1
VCC
C? CapC? 100pF Cap U? 100pF
16
2
1
1 R?A
VCC
Res Pack1 1K
LM336Z5.0
RST EA/VPP PSEN
ALE/PROG P3.0/RxD P3.1/TxD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD
R? RPot 1K
R?A
Res Pack2 1K
20
VSS
P89C51RC2BN/01
图1 单片机于TLC1549连接
+15V
U3
IN FB ON/OFF OUT GND
LM2576HVT-5.0
1 5 3
C1 Cap 100uF
1 U1 IN OUT GND
3
4 2
L? Inductor 10mH D? Diode
Out
+5V
C? Cap 1000uF
LM7815CT
C3 Cap 22uF
1
U4 IN OUT GND
3
+5V
Out
LM7805CT
U2 IN OUT GND
1 3
1
C4 Cap 22uF
U5 IN OUT GND
3
+9V
Out
LM7815CT
LM7809CT
图2 系统供电模块
图3 放大器仿真电路
图4 稳压电路
1
SMG1 1 SMG2 2 SMG3 3 SMG4 4 SMG5 5 SMG6 6 SMG7 7 SMG8 8
D
a b a a a a
J1 c
CON3 d f g b f g b f g b f g b
SMG1 e
e c e c e c e c f d d d d g dp dp dp dp dp SMG
VCC
2 3
VCC
4 5 6
Q5
P0.0 1
LED
P0.1 R5 P0.2
R6
P0.3
SMG4 SMG5 SMG6
P0.5 R9
SMG7
P0.6 R12
P0.7 R13
SMG8
LED7 LED8
LED
R7
P0.4 R8
SMG2 SMG3 SMG1
LED1 LED2
SP1
LED3 LED4
1 2
PNP 1 2
SIP1
J2
R10 10K
GND
VCC VCC
LCD 1602
YJ1 20PIN
D
VCC
GND
Q1 Q2 Q3 Q4 B
R3
1K 9012
1 R4 1K
LED5 LED6
蜂鸣器模块
2 VCC 103
GND
R11 10K
9012
R1 1K
9012
R2 1K
9012
VCC
液晶显示模块
C
J3
1 6 2 7 3 8 4 9 5
DB9
T2 OUT 7
14 R2IN 8
13 15 C1 1046
2 16 C2 104 C7 104
3.3V
J8 1 2 CON2
GND
VCC
3
C20 104
J10 1 2 CON2 U10
AMS 1117 3.3
J15 1838
1838-OUT 1 1 2 GND 2
3
CON2
VCC J12 3.3V 2
U1
T2 OUT T2 IN T1OUT T1 IN R2 IN R2 OUT R1 IN R1 OUT GND C2- V- V+ VCC RS232 VCC
C2+ C1- C1+
10 P1.3 11 P3.1 9 P1.2 12 P3.0 5 4C3 104 3 1
C4 104
SMG
数码管、LED 显示模块
1 6 2 7 3 8 4 9 5
C
J4
VCC
R2 IN T2 OUT
10uF
C5
C6 104
VCC
VCC
3
S1 SW-PB
J6 2 1 4 3 6 5 8 7 10 9 1211 1413 1615 2CON8
1 3 5 7 9 11 13 15
P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0
P2.4
1P0.0 3P0.1 5P0.2 7P0.3 9P0.4 11P0.5 13P0.6 15P0.7
J18 2 1 CON2 3.3V
104 C11
GND
W
J19 S2 SW-PB S3 SW-PB S4 SW-PB S5 SW-PB
P2.5 P2.6 P2.7 P3.2
B
R14 10K R15 10K R16 10K R17 10K R18 10K
串口模块
4
J16 CON3
1838-OUT
1 P3.3
2 2401-MISO 3
DB9
VCC P1.0 2
P1.1 4 P1.2 6
C8 P1.3 8
P1.410
10uF P1.512
P1.614 P1.716
B
1838红外与24L01切换
C21 104
IN OUT
10UFC18
1 2 3 4 5 6 7 8 9
P3.0 2 1 10
11 P3.1 4 3 4 3 12 6 5 R19 P3.2 6 5 8 7 13
10K P3.3 8 7 P3.410 9 14
10 9 P3.512 11 15 1211
P3.614 13 16
1413
P3.716 15 17
1615
18
2CON8*2 19
C9 33pF 20
2 1
4 3 6 5 8 7 10 9 1211 1413 1615 J17
2C 2ON 18 12M C10 33pF
5
J5
1 3 5 7 9 11 13 15
STC1
CLKOUT2/ADC0/P1.0 VCC ADC1/P1.1 P0.0 RXD2/ECI/ADC2/P1.2 P0.1 TXD2/CPP0/ADC3/P1.3 P0.2 SS/CPP1/ADC4/P1.4 P0.3 MOSI/ADC5/P1.5 P0.4 MISO/ADC6/P1.6 P0.5 SCLK/ADC7/P1.7 P0.6 P4.7/RST P0.7 INT/RXD/P3.0 EX_LVD/P4.6/RST2 TXD/P3.1 ALE/P4.5 INT0/P3.2 NA/P4.4 INT1/P3.3 P2.7/A15 CLKOUT0/INT/T0/P3.P2.6/A14 4 P2.5/A13
P2.4/A12 CLKOUT1/INT/T1/P3.
5 RD/P3.7 P2.3/A11 WR/P3.6 XTAL2 P2.2/A10 XTAL1 P2.1/A9
P2.0/A8 GND
STC89C52RC/12C5A60S2
VCC
40 39 38 37 36 35 34 33 32 31
30 VCC 29 28 2 27 4 26 6 25 8 24 10 23 12 22 14 21 16
2
4 6 8 10 12 14 16
J7 2 1 4 3 6 5 8 7 10 9 1211 1413 1615 2CON8
键盘模块
VCC R20 3
J20 4 3 2 1 CON4
GND V CC P1.3 R21 330
J21 3 2 1 CON3
GND P1.4VCC
3.3V 电源模块
VCC
J22 1 2 3 4 USB-B
R22 1k
104 J27 CON2
D1
C12
VCC J25
2 1 CON2
VCC J26
2 1 CON2
C13
LED
VCC
GND
GND
VCC
R23 1K
VCC
D2 LED 3.3V 1Kx 6
R24R25R26 RERS2ES2
8 6 4 2
CPU 最小系统模块
J29
VCC R30
10K CON3 VCC R31
10K
P2.4
3 2 1 J30 3 2 1
103 R33 1K
P1.1
J24 2 1 CON2
R27R28R29 RESR2ERS2ES2
U2
IRQ MISO MOSI SCK CSN CE VCC GND NRF24N01
C14
104
7 5 3 1
VCC C15P1.5 P1.6 104
U3 1 2 3 4 5 HC-SR04
四键无线模块接口
2272J28
A
1
VCC 2
P3.0 3 P3.1 4 C16 5 104 6
7
APC220
U4 SET AUX TXD RXD EN VCC GND
J14
3.3V
1 2 CON2
C17 104 D4 LED
5V
P2.5
VCC
7361角度传感器接口
标题 尺寸 B 日期: 文件: 5
图号
ADC 接口 60S2单片机PWM 输出口
A
J23 2 1 CON2
USB 5V 取电模块
1
2
24L01无线模块接口
HC-SR04/US-100 超声波接口
3
APC220 接口模块
4
CJ31ON3VCC R32 5V
P2.6 10K 3
2 1 CON3
5V
修订
9-Aug-2012 第张 共张
C:\Documents and Settings\Administrator\桌面制\STC12C5A60S2--1.ddb图人:
6
图5 自制的单片机开发板
附录2:作品实物图
图一 显示坐标
图二 精度调试
图三 低功耗设计