摘 要:本设计基于单片机控制技术,系统以单片机AT89S51为核心,TLC5615,TLC1549,ZLG7289等元件构成辅助电路,采用D/A转换输出可变电压和利用压控恒流源,差动放大与信号调节电路实现对数控直流电流源的控制。系统可预置输出电流,通过采样将实际输出反馈到单片机中构成闭环系统,进行比较、调整,提高了电流的输出精度 。
关键词:单片机、压控恒流源、D/A转换
Abstract: This design based on the Singlechip Control Technology. The system takes singlechip AT89S51 as the core, and takes the TLC5615, TLC1549, ZLG7289 and other devices to constitute the auxiliary circuit. It produces changeable voltage by using D/A conversion. It implements the control to the numerical controlled direct current source by using the voltage controlled constant current source, differential amplification and signal adjustment circuit. The system can preset output current, feed back the actual output through sampling to the singlechip to constitute the closed loop system, carry on comparison and adjustment, and increase the electric current output precision.
Keywords: singlechip, voltage controlled constant current source, D/A conversion.
第 1 页 共 21 页
目录
1. 系统设计 …………………………………………………………………………………… 3 1.1 设计要求 …………………………………………………………………………………… 3 1.2 总体设计方案 ……………………………………………………………………………… 3 1.2.1 设计思路 ………………………………………………………………………………… 3 1.2.2 方案论证与比较 ………………………………………………………………………… 3 1.2.3 系统组成 ………………………………………………………………………………… 5 2. 单元电路设计 ……………………………………………………………………………… 5 2.1 D/A转换电路 … … ……………………………………………………………………… 5 2.2键盘显示电路 …………………………………………………………………………… 62.3 压控恒流源电路 …………………………………………………………………………… 6 2.4电源电路……………………………………………………………………………………… 7 3. 软件流程设计 ……………………………………………………………………………… 8 4. 系统测试 …………………………………………………………………………………… 9 4.1 测试使用的仪器 …………………………………………………………………………… 9 4.2 指标测试和测试结果 ……………………………………………………………………… 9 4.2.1 输出电流的测试…………………………………………………………………………9 4.2.2输出电流与给定值偏差的绝对值的测试 … …………………………………… 9 4.2.3 步进值的测试………………………………………………………………………… 10 4.3 误差分析 ……………………………………………………………………………………10 5. 结束语 ………………………………………………………………………………………11 参考方献 ………………………………………………………………………………………11 附录1 元器件明细表 ……………………………………………………………………… 11 附录2 程序清单……………………………………………………………………………… 12 附录3 系统使用说明………………………………………………………………………… 20
第 2 页 共 21 页
1.系统设计
1.1设计要求
1、基本要求
(1)输出电流范围:200mA~2000mA;
(2)可设置并显示输出电流给定值,要求输出电流与给定值偏差的绝对值≤给定值的
1%+10 mA;
(3)具有“+”、“-”步进调整功能,步进≤10mA;
(4)改变负载电阻,输出电压在10V以内变化时,要求输出电流变化的绝对值≤输出
电流值的1%+10 mA; (5)纹波电流≤2mA; (6)自制电源。 2、发挥部分
(1)输出电流范围为20mA~2000mA,步进1mA;
(2)设计、制作测量并显示输出电流的装置 (可同时或交替显示电流的给定值和实测
值),测量误差的绝对值≤测量值的0.1%+3个字;
(3)改变负载电阻,输出电压在10V以内变化时,要求输出电流变化的绝对值≤输出
电流值的0.1%+1 mA; (4)纹波电流≤0.2mA; (5)其他。
1.2总体设计方案
1.2.1 设计思路
题目要求设计一个数控直流电流源。输入交流200~240V,50Hz;输出直流电压≤10V。设计中运用单片机控制技术,采用键盘/显示器接口控制器ZLG7289,单片机D/A转换和压控恒流源完成对数控直流电流源的控制。采用压控恒流源是用电压来控制电流的变化。显示部分采用了键盘/显示器接口控制器ZLG7289.不仅简化接口引线,而且减小了软件对键盘/显示器的查询时间,提高了CPU的利用率。
1.2.2 方案论证与比较
(1)数控模块方案论证与选择
方案一:采用中、小规模器件实现系统的数控部分。那么使用的芯片要很多,造成控制电路
内部接口信号繁琐,中间相互关联多,抗干扰能力差。
方案二:采用单片机ZLG7289和AT89S51构成控制电路来完成整个数控部分的功能。输出部
第 3 页 共 21 页
分也不再采用传统的调整管方式,而是在D/A转换之后,因为使用了单片机,整个系统可编程,使得系统灵活性大大增加。同时,AT89S51作为一个智能化的编程器件,便于系统功能的扩展。 综上所述,采用方案二。
(2)电流源方案论证与选择
方案一:采用塑封的CW 317, CW 337 两种集成稳压器完成恒流源电路。恒流的原理是通过
CW 317 的②和①端输出一个恒定的1. 25V 的基准电压, 在其两端并联一个电阻, 则其电流为1. 25 VöR , 当R 不变时, 其电流不变, 不管串接的负载电阻如何变化, 负载上电流恒定不变, 具有良好的负载特性。但输出电流只能从0~ 100 mA,远达不到题目要求,电路也比较复杂。
方案二:采用压控恒流源。压控恒流源的功能是用电压来跟踪控制电流的变化,通过对运
算放大器、大功率场子效应管、采样电阻、基准电阻等参数的设置来完成,且此设计电路简单,亦能实现压控恒流。
综上所述,采用方案二。
(3) 显示方案论证与选择 方案一:采用显示输出是对电流量化值直接进行译码显示输出,显示值为D/A变换的输入量,
由于D/A变换与功率驱动电路引入的误差,显示值与电源实际输出值之间可能出现较大偏差。
方案二:采用对输出电流进行软件校正的方法对输出电流值进行采样并显示输出实际电流
值,一旦系统工作异常,出现预置与输出值偏差过大,用户可以根据该信息进行精度校正。
综上所述,选择方案二。
(5)电源方案论证与选择
系统需要1个能提供两个不同值的电源,为了保持压控恒流源电路的精度,压控恒流源电路需要5V和15V的稳压电源。
方案一:采用升压型稳压电路。用两片MC34063芯片分别将3V的电池电压进行直流斩
波调压,得到5V和12V的稳压输出。只需使用两节电池,既节省了电池,又减小了系统体积重量,但该电路供电电流小,供电时间短,系统工作不稳定,精度不高。
方案二:采用,三端稳压LM317,功率有所提高,允许通过的最大电流可达1.5A,但对
于题目要求来讲要承受2A电流,故在此不合使用的。
方案三:采用三端稳压集成7812、7912和7805分别得到+12V、-12V和+5V的稳定电压。
利用该方法方便简单,工作稳定可靠。
综上所述,选择方案三,采用三端稳压器电路。
1.2.3 系统组成
经过上述各单元方案的比较、论证,定出设计系统原理框图如图1.2.3所示
第 4 页 共 21 页
键盘数码显示键盘显示接口ZLG7289389S52单片机 图1.2.3 电流预置4D/A转换压控恒流源 2. 单元电路设计 2.1 D/A转换电路的设计 图2.1为0832在单缓冲方式下与89S52单片机的接口电路,ILE接+5V,片选信号线和数据传送控制信号线都接到P2.7。这样,当无地址线P2.7选通DAC0832后,只要输出信号,则DAC0832就能一步完成数字量的输入锁存和D/A转换输出。 ____csWR______VCC22uFVCCRSTP1.1P1.2P1.3X1X280S5112MHz30P30P10KDINSCLK/CSDOUTVDDOUTRERINAGND0.01u2002.4VTLC5615 图2.1 2.2 键盘显示电路的设计 在设计键盘/显示器接口电路时,我们使用ZLG7289键盘/显示器控制器,它I/O口少,第 5 页 共 21 页 占用主机工作时间少,功能强大,能同时显示8个数码管和64个按键使用。能实现对键盘的自动扫描、防抖,并对显示器进行自动刷新。这样做不仅减少了硬件工作量,也使软件编程大大简化,减小了软件对键盘/显示器的查询时间,提高了CPU的利用率。其接口电路如图2.2所示。
图2.2
第 6 页 共 21 页
2.3压控恒流源电路的设计 压控恒流源是系统的重要组成部分它的功能是用电压来控制电流的变化,其电路原理图如图2.3所示。由运算放大器、大功率场子效应管V1、采样 电阻Rs、基准电阻Rb等组成。 根据运放特性,Vi=Vs,场效应管Id=Is(栅极电流相对很小,忽略不计)。Is=Vi/Rb,所以Io=Is=Vs/Rb= Vi/Rb. 设计中应根据负载电阻最大值RLmax,电流输出最大值Imax,确定外接电源值UC>(RLmax+Rs+Rb)xImax 正因为Io=Vi/Rb,电路输入电压Vi控制电流Io不随RL的变化而变化,从而实现压控恒流。 +12v20v负载电阻 RLDL1Ui37LF3566GR1IRF530SV12415R2-12v 图2.3 2.4 电源电路的设计 本供电电源取用环形变压器输出18V电压,再经全波整流,再接到时三端稳压管7812和7912,从而输出+12V和-12V,7812的输出端再接到7805的输入端从面输出5V。其原理图如图2.4 第 7 页 共 21 页 20V13300u/50v+123KBP3073781220.1u+12v3300u/50v+1780520.1u30.1u+5v0.1u变压器3. 软件设计 预置的主要功能是根据用户的要求设置该电流源的输出值,主要通过面板上的预置、上调、下调、确认键完成。软件流程图如图3 入口显示Y数字量值加443300u/50v+0.1u1279123-12v0.1u 图2.4 有键按下吗?Y锁存健值N对键值进行判断N为加键盘吗?N为减键吗?N为确认键吗?N为复位键YD/A转换数字量值减4显示TitleSizeBN返回初始化 452 3ZLG7289芯片工作流程图 第 8 页 共 21 页
Date:File:9-SE:\\p入口Up上调? 下调?Down送D/A的数字量增加(步进值勤)送D/A的数字量减少(步进值勤)显示c预置电流值N确认键按下吗?Y读取j量程开关的状态D/A转换送压控恒流源输入口返回
软件主流程图
4. 系统测试
4.1 测试使用的仪器
测试使用的仪器设备如表4.1所示。
序号 1 2 3 4 5 6 7 名称、型号、规格 TH2811C型LCR 数字电桥 GOS---620 20MHz示波器 GDS-820 数字存储示波器 DT9203 数字万用表 DF1930A 全自动数字交流毫伏表 SK1701S(多路)系列 可调式直流稳压稳流电源 SP1624B型 函数信号发生器/计数器 表4.1 测试使用的仪器设备
数量(台) 1 1 1 1 1 1 1 4.2 指标测试和测试结果
第 9 页 共 21 页
题目要求输出电流范围: 200mA~2000mA;可设置并显示输出电流给定值,要求输出电流与给定值偏差的绝对值≤给定值的1%+10 mA;步进≤10mA;改变负载电阻,输出电压在10V以内变化时,要求输出电流变化的绝对值≤输出电流值的1%+10 mA
测试结果如图4.2所示
(1)输出电流范围200mA-2000mA的测试结果: 213.3mA-1935.7mA 214.3mA-1936.8mA 214.4mA-1943.0mA
(2)输出电流与给定值偏差的绝对值的测试结果: 给定值 实际值 偏差绝对值 给定值*1%+10mA 208 217.6 9.6 12.08 280 289.5 9.5 12.80 344 351.5 7.5 13.44 376 382.5 6.5 13.76 432 438.3 6.3 14.32 520 526.0 6.0 15.20 576 580.1 4.1 15.76 696 701.3 5.3 16.96 752 756.5 4.5 17.52 824 827.0 3.0 18.24 952 953.3 1.3 19.52 1040 1041.1 1.1 20.40 1144 1141.4 2.6 21.44 1216 1211.9 4.1 22.16 1328 1321.0 7.0 23.28 1448 1438.0 10.0 24.48 1536 1525.1 10.9 25.36 1624 1604.7 19.3 26.24 1736 1706.4 29.6 27.36 1848 1807.2 31.1 28.48 1976 1906.4 69.6 29.76 2000 1918.5 81.5 30.00
(3)步进值的测试 给定值 实际值 步进值 208 220.4 7.8 216 228.2
第 10 页 共 21 页
320 328 432 440 616 624 824 830 1032 1040 1256 1264 1520 1528 1736 1744 331.8 339.9 442.8 450.9 625.0 632.4 830.3 837.2 1034.5 1041.4 1253.9 1260.3 1511.2 1517.1 1710.4 1715.6 8.1 8.1 7.4 6.9 6.9 6.4 5.9 5.2
图4.2
4.3 误差分析
(1).由于D/A转换输出的电压有一定的偏差,而且偏差不一定是线性的, 这样就造成设置的
电压跟实际送到压控恒流源的电压误差.
(2).由于基准电阻会随电流的增大而发热,发热会引起电阻的变化,基准电阻变了,输出的电
流就会出现误差.
(3)电路捍接也是影响纹波电流的误差的原因之一。
5. 结束语
本设计制作完成了题目要求的基本部分6项中的5项要求,基本达到设计的基本要求。数控直流电流源可以实现以下功能: (1)输出电流范围:200mA~2000mA;
(2)可设置并显示输出电流给定值,要求输出电流与给定值偏差的绝对值≤给定值的1%
+10 mA;
3)具有“+”、“-”步进调整功能,步进≤10mA;
(4)改变负载电阻,输出电压在10V以内变化时,要求输出电流变化的绝对值≤输出电
流值的1%+10 mA; (6)自制电源。
基本要求第5项的纹波电流要求小于或等于2mA,但由于电路捍接原因纹波电流只能达到3mA。
第 11 页 共 21 页
参考文献
1.周立功单片机.ZLG7289B 串行接口LED 数码管及键盘管理器件数据手册.
2.马忠梅.戚军.刘滨.马岩.单片机C 语言 Windows 环境编程宝典.北京航空航天 大学出版社.2003
3.何立民.单片机应用系统设计.北京;北京航空航天大学出版社.1995
4.黄智伟.王彦.陈文光.朱卫华.全国大学生电子设计竞赛训练教程.电子工业出版社. 5.全国大学生电子设计竞赛组委会。全国大学生电子设计竞赛获奖作品汇编(第一届~第五届)。
6.赵动庆.徐丽香.电子电路.科学出版社.
7.韩广兴.电子元器件与实用电路基础.电子工业出版社.
附 录
附录1 主要元器件明细表 名称 娈压器 桥堆 场效应管 三端稳压管 三端稳压管 三端稳压管 单片机 单片机 D/A转换 电电解容 瓷片电容104 晶振 晶振 散热片 金属电阻 四联数码管 运算放大器 开关按钮 其它电阻、电容 规格及型号 18V/50W KBP307 IRF530 7812 7912 7805 AT89S51 ZLG7289 TLC5615 3300u/50V 12MHz 16MHz LF356 数量 1个 1个 1个 1个 1个 1个 1个 1个 1个 3个 4个 1个 1个 2块 1个 1块 1个 16个 若干
附录2 程序清单
bit_count data 07fh ;定义7289 timer data 07eh
第 12 页 共 21 页
timer1 data 07dh ten data 07ch data_in data 020h data_out data 021h
cs bit p1.0 ;i/o定义 clk bit p1.1 dat bit p1.2 key bit p1.3
din5615 bit p1.4 ;定义5615 sclk5615 bit p1.5 cs5615 bit p1.6
org 0000h ajmp main org 0100h main: mov sp,#60h mov 50h,#00h mov 51h,#00h mov 52h,#00h mov 53h,#00h mov 54h,#00h mov 55h,#00h
mov 56h,#00h ;--------------------------------- mov 57h,#00h
mov 58h,#00h ;--------------------------------- mov 59h,#00h mov 22h,#00h mov 23h,#00h
mov 24h,#03h ;百位一上电显示200毫安 mov 25h,#01h mov 26h,#00h mov 27h,#00h mov 28h,#00h
mov data_out,#10100100b ;复位指令 call send ;发指令 setb cs lcall delay mov 51h,#100 mov r1,#00h mov r2,#100 lcall dac
第 13 页 共 21 页
mov 26h,#11001000b ;下载数据且按方式1译码,并在第0位显示 mov 27h,#00 lcall show
mov 26h,#11001001b ;下载数据且按方式1译码,并在第1位显示 mov 27h,#02 lcall show
mov 26h,#11001010b ;下载数据且按方式1译码,并在第2位显示 mov 27h,#00 lcall show
mov 26h,#11001011b ;下载数据且按方式1译码,并在第3位显示 mov 27h,#00 lcall show main1: jb key,main1
mov data_out, #00010101b ;有键按下,发读键盘指令 call send call receive setb cs
mov 50h,data_in ;从键盘读到的值存在50h中
;********************************************************************* addone: mov a,50h
cjne a,#00h,down ;键值为0为增加键 ljmp loop
down: cjne a,#01h,sure ;键值为1为减少键 ljmp loop_
sure: cjne a,#02h,reset ;键值为2为确认键 mov a,52h ;高四位处理 rl a rl a
mov 58h,a mov 57h,51h mov a,57h
anl a,#11000000b rl a rl a
orl a,58h
mov r1,a ;高四位在R1中
mov 59h,51h
anl 59h,#00111111b mov a,59h
第 14 页 共 21 页
rl a rl a mov r2,a lcall dac lcall dac
wait: jnb key, wait ;等待按键松开 ljmp main1
reset: cjne a,#03h,reset1 wait2: jnb key, wait2 ljmp main
reset1: jnb key,reset1 ljmp main1
;********************************************************************** ; 按 增 键
;********************************************************************** loop: inc 22h ;个位用22H记忆 mov a,22h
cjne a,#06h,loop1 mov 22h,#01h ajmp loop2
loop1: inc 23h ;十位用23H记忆 loop2: mov a,23h
cjne a,#0bh,loop3 mov 23h,#01h inc 24h loop3: mov a,24h
cjne a,#0bh,loop4 mov 24h,#01h inc 25h
loop4: mov a,53h ;要加的数字信号,53h用来判断是第一次吗? cjne a,#00h,loop5 ;控制第一次时只加3 mov 53h,#05h inc 51h inc 51h inc 51h ajmp loop6 loop5: inc 51h inc 51h
第 15 页 共 21 页
inc 51h inc 51h loop6: mov a,51h
cjne a,#0ffh,loop10 mov 53h,#00h inc 54h mov a,54h
cjne a,#01h,loop7 mov 52h,#01h mov 51h,#00h
loop7: cjne a,#02h,loop8 mov 52h,#02h mov 51h,#00h
loop8: cjne a,#03h,loop9 mov 52h,#03h mov 51h,#00h
loop9: cjne a,#04h,loop10 mov 52h,#03h mov 54h,#00h loop10: ljmp ge
;********************************************************************** ; 按 减 键
;********************************************************************** loop_: dec 22h mov a,22h
cjne a,#00h,loop1_ mov 22h,#05h ajmp loop2_ loop1_: dec 23h loop2_: mov a,23h
cjne a,#00h,loop3_ mov 23h,#0ah dec 24h loop3_: mov a,24h
cjne a,#00h,loop4_ mov 24h,#0ah dec 25h
loop4_: mov a,55h ;要减的数字信号,55h用来判断是第一次吗 cjne a,#00h,loop5_ ;控制第一次时只加3 mov 55h,#05h
第 16 页 共 21 页
dec 51h dec 51h dec 51h ajmp loop6_ loop5_: dec 51h dec 51h dec 51h dec 51h loop6_: mov a,51h
cjne a,#00h,loop9_ mov 56h,52h mov a,56h
cjne a,#01h,loop7_ mov 52h,#00h mov 51h,#0ffh
loop7_: cjne a,#02h,loop8_ mov 52h,#01h mov 51h,#0ffh
loop8_: cjne a,#03h,loop9_ mov 52h,#02h mov 51h,#0ffh loop9_: ljmp ge
;********************************************************************** ; 显示个位,十位,百位,千位
;**********************************************************************
ge: mov dptr,#tab mov a,22h
movc a,@a+dptr
mov 26h,#11001011b ;下载数据且按方式1译码,并在第3位显示 mov 27h,a lcall show
shi: mov dptr,#tab1 mov a,23h
movc a,@a+dptr
mov 26h,#11001010b ;下载数据且按方式1译码,并在第2位显示 mov 27h,a lcall show
bai: mov dptr,#tab1 mov a,24h
第 17 页 共 21 页
movc a,@a+dptr
mov 26h,#11001001b ;下载数据且按方式1译码,并在第1位显示 mov 27h,a lcall show
qian: mov dptr,#tab1 mov a,25h
movc a,@a+dptr
mov 26h,#11001000b ;下载数据且按方式1译码,并在第0位显示 mov 27h,a lcall show
wait1: jnb key, wait1 ;等待按键松开 ljmp main1
;********************************************************************** ; 子 程 序
;**********************************************************************
;发送一个字节到ZLG7289A,高位在前
send: mov bit_count, #8 ;记数器设定 clr cs
call long_delay ;长延时子程序 send_loop:mov c, data_out.7 ;输出1位 mov dat, c setb clk
mov a, data_out rl a
mov data_out, a call short_delay clr clk
call short_delay
djnz bit_count, send_loop ;8位是否发送完毕 clr dat ;发送完毕,返回 ret
;接收一个字节到ZLG8279A,高位在前
receive: mov bit_count, #8 ;记数器设定 setb dat ;高电平输入状态 call long_delay receive_loop :setb clk
call short_delay
mov a, data_in ;数据左移
第 18 页 共 21 页
rl a
mov data_in, a
mov c, dat ;读取一位数据 mov data_in.0, c clr clk
call short_delay
djnz bit_count,receive_loop
clr dat ; 重设DAT口为低电平(输出状态) ret
;5615D/A转换 5615D/A转换 5615D/A转换 dac: setb cs5615 nop nop
clr din5615 clr sclk5615 clr cs5615 nop nop nop nop nop nop nop nop nop nop nop
mov r3,#08h mov a,r1
aa: rlc a ;发送数据时高位先送,放在R1中,R1的高四位不关心 mov din5615,c nop nop
setb sclk5615 ;上升沿输入数据 nop nop
clr sclk5615 nop nop
djnz r3,aa mov r3,#08h
第 19 页 共 21 页
mov a,r2 ;低位后送放在R2中,R2的低二位不关心 bb: rlc a
mov din5615,c nop nop
setb sclk5615 nop nop
clr sclk5615 nop nop
djnz r3,bb setb cs5615 clr sclk5615 clr din5615 ret
;延时子程序
long_delay: mov timer, #25 ;设定延时时间为50μs delay_loop: djnz timer, delay_loop ret
short_delay: mov timer,#4 ;设定延时时间为50μs short_lp: djnz timer, short_lp ret
delay: mov r5,#50 ;延时0.050秒 lop1: mov r6,#20 lop2: mov r7,#25 lop3: djnz r7,lop3 djnz r6,lop2 djnz r5,lop1 ret
show: mov data_out,26h ;下载数据且按方式?译码,并在第?位显示的子程序 call send mov a, 27h
anl a,#01111111b ;灭小数点 mov data_out, a call send setb cs ret
;********************************************************************** ; 表 格 数 据
第 20 页 共 21 页
;********************************************************************** tab:db 0ffh,08,06,04,02,00
tab1:db 0ffh,00,01,02,03,04,05,06,07,08,09 ;24h值先给3 25h先给1 end
附录3 系统使用说明
本系统是以单片机、压控恒流源为主要核心的。当本机按加键时输出电流值步进加8ma,按减键时步进电流值减8ma,按确定键时才输出,按复位键时复位初始值200ma。通过软件对电流进行预置,测量负载电流时,把真实值与基准相比较。
第 21 页 共 21 页
因篇幅问题不能全部显示,请点此查看更多更全内容