数控直流电流源程序

合集下载

数控直流电流源完整版(电路+程序)

数控直流电流源完整版(电路+程序)

题目名称:数控直流电流源摘要:该数控直流电流源以精密压控电流源为核心、用单片机、DAC组成控制电路,引入“S类”反馈控制功率放大电路,实现超精密电流控制、具备精准的扩流能力、低失调、有步进、同时带有丰富扩展功能的精密电流源。

经过ADC采样,完成输出电流显示功能,并使输出范围覆盖0~2A,是理想的电流源解决方案。

关键词:精密电流源低失调S类功率放大器Abstract:The direct current source of numerical control bases on accurate VCCS, using MCU and DAC as controller kernel, importing circuit of power amplification of type S with feedback control; achieves ultra accurate current control; has low offset and excellent capacity for current enlarging; has step by step motion. At the same time, it provides abundance extended functions. According to the ADC sampling, it carries out the function of displaying the current output, meanwhile it achieves a range of 0 to 2A. Above all, it is an ideal solution of current source.Keyword: accurate current source , low offset , power amplification of type S目录1方案论证与比较 (3)1.1精密压控电流源方案论证 (3)1.2扩流模块方案论证 (3)1.3电流检测方案论证 (4)1.4功率输出级电源方案论证 (4)1.5其它模块电源方案论证 (4)2 系统设计 (5)2.2单元电路设计 (6)2.2.1 压控电流源单元电路设计 (6)2.2.2S类功率放大器电路设计(理论推导和证明) (7)2.2.3 数控电路设计 (10)2.2.4 大功率电源模块 (11)3 软件设计 (11)4系统测试 (13)4.1测试仪器 (13)4.2测试方法 (13)4.3测试数据 (14)5 结论 (15)参考文献: (15)附录: (16)附1:元器件明细表 (16)附2:仪器设备清单 (16)附3:电路图图纸 (16)附4:程序清单 (19)附5:使用说明 (24)1方案论证与比较本系统主要由精密的电流源模块、S类扩流模块、电流检测模块、数控模块、以及大功率的电源模块组成,如图1所示。

(数控加工)数控直流电流源设计报告精编

(数控加工)数控直流电流源设计报告精编

(数控加工)数控直流电流源设计报告数控直流电流源一、设计任务和技术要求1.设计壹个数控直流电流源。

2.输出电流0~99mA,手动步进1mA增、减可调,误差不大于0.01mA。

3.具有输出电流大小的数码显示。

4.负载供电电压+12V,负载等效阻值100Ω。

5.电路应具有对负载驱动电流较好的线性控制特性。

6.设计电路工作的直流供电电源电路。

二、系统原理概述本设计要求设计出壹个数控的直流电源,且且输出电流为0~99mA,能够手动控制增减。

在此采用数模转换的原理,只要产生和0~99mA电流相对应的数字量(我们取数字量为0~99),再使用D/A转换器转换为模拟电压量,最后再用V/I转换器将电压量转换为和电压量相对应的电流量即可。

为控制输出电流手动步进为1mA增、减可调,我们只要保证数字量(0~99)——电压量(0~9.9V)——电流量(0~99mA)相对应,通过控制数字量手动增减步进为1可调即可。

综上,整个系统的原理框图如图壹所示:图一系统原理框图三、方案论证1.直流稳压电源电路单元小功率稳压电源由电源变压器、整流电路、滤波电路和稳压电路四个部分组成。

如图二所示:图二稳压电源组成示意图方案壹:输出可调的开关电源开关电源的功能元件工作在开关状态,因而效率高,输出功率大;且容易实现短路保护和过流保护,可是电路比较复杂,设计繁琐,在低输出电压时开关频率低,纹波大,稳定度极差,因此在本设计中不适合此方案。

方案二:由固定式三端稳压器组成由固定式三端稳压器(7805、7812、7912)输出脚V0、输入脚V i和接地脚GND组成,它们的输入端接电容能够进壹步滤波,输出端接电容能够改善负载的瞬间影响,且且此电路也比较稳定,实现简单。

因此在此采用方案二,电路原理图如图三所示:图三固定三端式直流稳压电源电路2.手动增减数字量产生单元方案壹:74LS163为可预置的4位二进制同步加法计数器。

采用俩片74LS163运用反馈清零或者反馈置数法构成十进制计数器,再将俩片73LS163构成2位十进制加法计数器。

数控直流电流源课程设计与制作

数控直流电流源课程设计与制作

课程设计任务书一、设计题目:数控直流电流源的设计与制作二、主要内容及要求1.功能与主要技术指标(1)输出电流:0∽1A步进可调,调整步距4mA;误差≤0.1mA(2)输入电压:12V;(3)显示:输出电压值用LED数码管显示;(4)电流调整:由“+”、“-”两按键分别控制输出电流的步进增减;(5)输出电流预置:输出电流可预置在0∽1A之间的任意一个值;(6)其它:自制电路工作所需的直流稳压电源,输入电压为±12V,+5V;三、进度安排任务设计2012年3月12日—2012年3月16日练习制作2012年3月19日—2012年3月23日数控直流电流源设计与制作一、设计任务和技术要求1、设计一个数控直流电流源2、输出电流0~1A,手动步进4mA增、减可调,误差不大于0.1mA;3、负载供电电压+12V,负载等效阻值10欧姆;4、电路应具有对负载驱动电流较好的线性控制特性;二、总体设计方案原理及结构框图数控直流电流源共有六部分组成,其中输出电流的调节是通过“+” 和“-”两个按键来操作的;步进电流精确到0.1A以手动控制可逆计数器分别作加,减计数;控制数字量为8位二进制码:00000000~11111111增、减变化。

可逆计数器的二进制数字输出分两路运行,一路用于驱动数字显示电路,精确显示当前输出电流值;另一路进入数模转换电路(D/A转换电路);数模转换电路将数字量按比例,转换成模拟电流,然后经过射极跟随器的控制,调整输出级,使输出稳定直流电流。

图2-1电路结构原理框图三、部分模块原理及结构图1、74LS193芯片74LS193具有同步可逆计数功能、异步清零功能、异步并行置数和保持功能。

与是为74LS193级联时使用的。

级联时只要把低位的端、端分别与高位的CP U、CP D连接起来,各芯片的CR 端连接在一起, 端连接在一起,就可以了。

图3-1 74LS193引脚排列图和逻辑功能示意图CR异步清零端,高电平有效;异步置数,低电平有效;CPU加法计数脉冲输入端,上升沿触发;CPD减法计数脉冲输入端,上升沿触发;进位脉冲输出端;BO COBOCOLDLDCO借位脉冲输出端。

数控直流电流源F

数控直流电流源F

数控直流电流源(F题)设计与总结报告摘要:本设计基于单片机控制技术,系统以单片机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. 系统设计 (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键盘显示电路 (6)2.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)1.系统设计1.1设计要求1、基本要求(1)输出电流范围:200mA~2000mA;(2)可设置并显示输出电流给定值,要求输出电流与给定值偏差的绝对值≤给定值的1%+10 mA;(3)具有“+”、“-”步进调整功能,步进≤10mA;(4)改变负载电阻,输出电压在10V以内变化时,要求输出电流变化的绝对值≤输出电流值的1%+10 mA;(5)纹波电流≤2mA;(6)自制电源。

数控直流源的设计

数控直流源的设计

简易数控直流电流源摘要基于STC89C52单片机作为整机的控制单元,通过功率放大电路、ICL7107电压测量等设计实现了一个简易数控直流电源。

其电压可预置,步进为0.1V,输出电压范围 0—9.9V。

输出电流为500mA。

步进调节输出电压幅度、预置电压和实测电压均可通过数码管显示。

本系统调整速度快,效率高,通用,输出纹波小等优点。

关键字:数控直流源步进加减功率放大数码管显示1引言在常规电路中,我们一般使用普通的自制电源。

输出电压V 15 。

然而却没有数码显示、电压预置和步进增减功能。

基于此,我们本次设计一个直流电流源。

该电源设计满足以下基本要求:(1)输出电压:范围0-9.9V ,步进0.1V 。

纹波不大于10mV ;(2)输出电流:500mA ;(3)输出电压值由数码管显示;(4)由“+”、“-”两键分别控制输出电压步进增减;(5)为实现上述几部件工作,自制一稳定直流电源,±15V 、± 5V 输出。

系统的设计框图如图1所示图(1)总体设计框图2方案设计2. 系统设计2.1设计思路采用单片机作为控制器的简易数控直流电源设计方案框图如图一所示。

STC89C52完成系统的数控功能。

运放电路为功率放大单元的输入级,通过OTL 电路进行功率放大。

ICL7107和数码管为实际电压测量的反馈单元,为了达到设计的要求,我们需进行功率放大和显示电压。

本次设计的关键在于对DAC0832的控制和ICL71017的应用。

2.2方案比较与选择通过以上分析我们拟定如下方案:方案一:此方案采用传统的调整管方案,主要采用一套计数器完成系统的控制功能,其中二进制计数器的输出经过D/A变换后去控制误差放大的基准电压,以控制输出步进。

十进制计数器通过译码后驱动数码管显示输出电压值,为了使系统工作正常,必须保证双计数器同步工作。

从而,难以控制单片机。

方案二:此方案的控制部分采用STC89C52单片机,输出部分采用ICL7107与数码管结合。

简易数控直流电源的程序

简易数控直流电源的程序
void square();
void keycan_bjys();
void keycan_bxsz();
void write_com(uchar com);
void write_date(uchar date);
void init_kjhm();
void init_bjhm();
void init_yshm();
void init_bxxzhm();
void init_trigle();
void init_trap();
void init_saw();
void init_square();
void init();
void main()
{ init_kjhm();
init(); //初始化子程序
if(key0e(1)
{ keycan_bjys();
if(key3==0)
{ dula=1;
P1=0xff;
dula=0;
wr_da=0;
}
}
void trap() //梯形波
{ num=0;
for(num=0;num<121;num++)
{ P0=num;
wr_da=0;
}
delay(5);
if(num1==3)
{ init_saw();
while(1)
{ saw();
if(key0!=0)break;
}
}
if(num1==4)
{ uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);

数控直流电流源设计

数控直流电流源设计

摘要:本次主要任务是使用Proteus、Multisim、PSPICE、TINA-TI、Matlab等电路仿真软件,设计仿真一个简易数控恒流源电路方案以微控制器为核心,设计一数字式直流电流控制系统,实现了可控的恒电流源.系统以89c52单片机为控制核心,通过12位D/A MAX5822控制输出电流、12位A/D MAX1241对输出电流进行检测,利用电流串连负反馈特性采用OP07和达林顿管组成的恒流源,实现一种宽范围、高精度、低纹波、带负载能力强的直流电源。

此外,该电流源可以通过键盘进行预置调整设定值,且输出通过LCD显示。

本次仿真所用的软件主要是Proteus与Multisim。

关键词:数控直流电流源 89C52 MAX5822 MAX1241 仿真目录1.设计任务与要求 (2)1.设计任务与要求 (3)1.1任务 (3)1.2要求 (3)2. 方案论证与比较 (4)2.1. 数控模块 (4)2.2.恒流源电路模块 (4)3 系统硬件组成及各部分的原理分析 (5)3.1数控电流输出及测量模块 (5)3.1.1数控电流输出 (5)3.1.2 测量电流输出 (6)3.2键盘与显示电路 (7)3.3恒流源电路 (7)3.4供电电路 (9)4 系统软件设计 (9)4.1软件的结构 (9)4.1软件流程图 (10)5电路各部分的仿真结果 (11)5.1显示和按键控制电路仿真 (11)5.2 DA转换仿真 (11)5.3 AD转换仿真 (12)5.4恒流源电路仿真 (13)6设计总结 (14)7附录 (15)1.设计任务与要求1.1任务设计并制作数控直流电流源。

输入交流200~240V,50Hz;输出直流电压≤10V1.2要求用仿真软件对电路进行设计并仿真,使其满足以下要求:1、基本要求(1)输出电流范围:200mA~2000mA;(2)可设置并显示输出电流给定值,要求输出电流与给定值偏差的绝对值≤给定值的1%+10 mA;(3)具有“+”、“-”步进调整功能,步进≤10mA;(4)改变负载电阻,输出电压在10V以内变化时,要求输出电流变化的绝对值≤输出电流值的1%+10 mA;(5)纹波电流≤2mA;(6)自制电源。

数控直流电流源设计制做

数控直流电流源设计制做

数控直流电流源1 方案比较,设计与论证1.1 控制方案比较方案一(见图1)此方案是传统的模拟PID控制方案,其优点是不占用CPU处理器的时间,对处理器性能的要求比较低。

但模拟PID控制方式的参数不易匹配,调节时间长,难以把精度做得很高,并且难以实现题中要求的良好的人机交互功能。

图1 控制方案一框图方案二(见图2)此方案采用摩托罗拉16位DSP芯片56F807为核心处理器来实现,该平台具有高处理速度,适合实现复杂的算法和控制。

这种方案可以方便地实现PID的控制算法。

本设计采用了方案二。

图2 控制方案二框图1.2 检测方案比较方案一 直接对负载进行采样直接对负载进行采样简单易行。

但由于负载电阻为可调节电阻,输出可能有电流可能会受接触电阻的变化而不稳定,故不宜选取。

方案二 对采样电阻进行采样采样电阻采用标准精密电阻,阻值稳定,将阻值的变化对电流的影响降低到最小程度。

另外,对采样电阻进行采样,有效避免了外接测量电路对电流的影响。

因此采用方案二。

2 理论分析2.1 PID 控制算法PID 是一种在单片机控制中常用的算法, PID 控制由于其具有控制方法简单、稳定性好、可靠性高和易于现场调试等优点,被广泛应用于工业过程控制。

其输入e (t)与输出u (t)的关系为[1]⎰++=t d i p dtde(t)K d e(τK e(t)K u(t)0)τ 数字PID 控制算法是以模拟PID 调节器控制为基础的,由于单片机是一种采样控制,它只能根据采样时刻的偏差计算控制量。

但是如果采样周期T 取得足够小,采用数值计算的方法逼近可相当准确,被控过程与连续控制十分接近。

离散化后的PID 算式为:[1]()001u e e T T e T T e K u ij i i d j i i i +⎥⎦⎤⎢⎣⎡-++=∑=- 式中:K : 比例系数u o : 偏差为零时的控制作用T i : 积分时间T d : 微分时间T : 采样时间以上公式称为位置式算法。

数控直流电流源

数控直流电流源

数控直流电流源(第一题)摘要:本系统以直流电压源为核心,AT89S52单片机为主控制器,通过键盘来设置直流电压源的输出电流,设置步进等级可达0.1V,并可由数码管显示实际输出电压值和电压设定值。

本系统由单片机程控输出数字信号,经过D/A转换器(DAC0832)输出模拟量,再经过运算放大器隔离放大,控制输出功率管的基极,随着功率管基极电压的变化而输出不同的电压。

实际测试结果表明,本系统输出电压稳定,不随负载和环境温度变化,并具有很高的精度,输出电流误差范围±1%,输出电压可在0V----18V范围内任意设定,因而可实际应用于需要高稳定度小功率恒压源的领域。

一方案设计与论证1.1.总体设计方案与比较:方案一:通过编码开关来控制存储器的地址;根据地址输出对应的数字量送数模(D/A)进行转换;再根据输出的电压量来控制稳压源的变化;同时;通过四个编码开关的BCD码送给4511及数码管显示。

此方案的优点是电路简单,缺点是数据量大且存储器存储容量有限,在实验过程中发现编码开关不稳定,所以不宜采用。

其电路方框图如图1.1所示:二模块电路设计及比较系统硬件以AT89S52单片机为核心,外围包括电源模块、数码管显示模块、D/A转换模块及恒压源模块。

2.1 电源模块:本设计共用到电源有四种:即±5V,±15V.2.1.1 电源原理稳压电源由电源变压器、整流电路、滤波电路和稳压电路组成,如图2.1a 整流和滤波电路:整流作用是将交流电压U2变换成脉动电压U3。

滤波电路一般由电容组成,其作用是脉动电压U3中的大部分纹波加以滤除,以得到较平滑的直流电压U4。

b 稳压电路:由于得到的输出电压U4受负载、输入电压和温度的影响不稳定,为了得到更为稳定电压添加了稳压电路,从而得到稳定的电压U。

+5V其中+5 V给DAC0832,单片机供电;-5V为ICL7107参考电压。

要求输出的电压最大值为18V,取样电阻为0.37欧图2.2中电路提供+5V的电源;主要用于单片机(AT89S52)、数码显示(包括74LS164,ICL7107)。

数控直流电流源设计-毕业论文-毕业设计-数控-直流电源

数控直流电流源设计-毕业论文-毕业设计-数控-直流电源

数控直流电流源设计摘要本设计大致分五个模块:单片机控制模块、数模(D/A)转换模块、恒流源模块、模数(A/D)转换模块、显示模块。

单片机控制模块以单片机为核心,对输入电流信号进行转换成数字量输出;恒流源模块将D/A转换来的电压模拟量通过恒流源电路变成恒流;显示模块采用数码管显示译码芯片与74LS47设计成10进制4位数码动态显示电路。

键盘模块采用常见单路复位开关,做成4×4矩阵键盘,用动态扫描方式读取外部按键动作,这样设计可靠,配合凌阳AT89S52单片机,可以很轻松的实现按键输入。

此外,本设计可实现电流0-2A且有±1mA和±10mA的两种步进,同时有数码显示输入的电流值。

关键词单片机键盘控制D/A转换恒流源A/D转换译码显示Constant Current Resource Digital ControlledABSTRACTThe design is divided into five modules: Single-chip control, digital-to-analog (D / A) conversion module, constant current source module, the output display module. To single-chip single - chip control module as the core of the input current signals to digital output; Constant current source modules will be D / A converter to the voltage analog circuit through the constant current source into a constant current; display module display digital 74LS47 decoder chip designed with 10-band digital dynamic display four circuits. Common use of the keyboard module reset single switch, make 4 * 4 matrix keyboard, using dynamic scanning button to read the external action, so that the design of reliable, with Sun plus AT89S52 microcontroller, can easily achieve the keystrokes. In addition, the design can achieve the current 0-2A and a ± 10mA and ± 1mA Step two, at the same time digital display of the current input.KEY WORDS Single - chip Keyboard control D / A converter A / D conversion Decoding show目录中文摘要 (I)英文摘要 (II)1 绪论 (1)1.1概述 (1)1.2课题的背景和意义 (1)1.3数控直流恒流源简介 (2)1.4恒流源的应用 (2)2 数控直流电流源整体设计 (3)2.1整体结构设计与论证 (3)2.2系统原理与基本框图 (5)3 硬件电路设计 (6)3.1单片机模块的设计 (6)3.1.1 单片机的选择 (6)3.1.2 单片机最小系统组成及AT89S52介绍 (6)3.1.2.1 AT89S52单片机功能特性描述 (6)3.1.2.2 AT89S52引脚功能描述 (7)3.2D/A转换模块设计 (11)3.2.1 D/A转换方案 (11)3.2.2 12位串行D/A转换芯片MAX538介绍 (11)3.2.2.1 性能特点 (11)3.2.2.2 主要参数 (12)3.2.2.3 内部结构 (12)3.2.2.4 引脚结构 (12)3.2.2.5 输入接口 (13)3.2.3 D/A转换模块电路 (14)3.3V/I转换模块设计 (14)3.3.1 V/I转换方案 (14)3.3.2 V/I转换电路 (15)3.4A/D转换模块设计 (17)3.4.1 A/D转换方案 (17)3.4.2 12位串行A/D转换芯片MAX197介绍 (18)3.4.2.1 MAX197的特性 (18)3.4.2.2 MAX197的结构 (18)3.4.3 A/D转换模块电路 (20)3.5显示模块设计 (21)3.5.1 显示电路方案 (21)3.5.2 译码器74LS47简要介绍 (21)3.5.3 LED显示器的工作原理 (23)3.5.4 显示模块电路 (25)3.6键盘模块设计 (26)3.6.1 键盘电路方案选择 (26)3.6.2 键盘模块的电路 (26)3.7电源模块设计 (28)3.7.1 稳压电路电源方案 (28)3.7.2 电源原理 (28)3.7.3 LM7805、LM7812简要介绍 (28)3.7.4 电源模块电路 (29)4 软件设计 (30)总结 (33)致谢 (34)参考文献 (35)附录 (36)。

数控直流电流源报告(硬件部分)

数控直流电流源报告(硬件部分)

这是模电书(P454)上给出的一个电压—电流转换电路,功率器件采 用功率集成运放OPA548T。当R1=R2=R3=R4时,流过负载端的电流 I=Uin/R0。图中R0必须采用大功率的电阻,且电阻随温度变化应该很小。 RL和Rs分别为负载电阻和康铜丝采样电阻。
这个电路结构很简单,但它的缺点就是电源 的效率较低,有一部分功耗消耗在电阻R0上,这 的效率较低,有一部分功耗消耗在电阻R0上,这 无形之中就增加了供电电源的负担,特别是在大 电流的时候,负载电路的功率几乎都由这1 电流的时候,负载电路的功率几乎都由这1片 OPA548T来提供,芯片发热很快,如果散热及相 OPA548T来提供,芯片发热很快,如果散热及相 应的措施没有处理好的话,芯片就无法正常工作, 导致负载电流波动较大。 由于OPA548T自身就有2mv的偏置电流,这 由于OPA548T自身就有2mv的偏置电流,这 也给提高电流源的精度带来了一些困难。 这个电路在20~200mA的范围内有较好的效 这个电路在20~200mA的范围内有较好的效 果,也即适用在小电流恒流源的场合,但是当电 流大了之后,就很难正常工作。
二、系统整体方案论证:
1、压控恒流源模块
电压控制的电流源模块,可采用的方案有以下三 种: ① 功率集成运放,如OPA501、OPA541、 功率集成运放,如OPA501、OPA541、 OPA548、 OPA549等; OPA548、 OPA549等; ②采用电流串联负反馈机理构成恒流源。
③运放+晶体三极管构成的电流放大;
方案二:采用电流串联负反馈机理构成恒流 源。其原理图如下:
T2 !NPN R3 5 V1 15 T1 !NPN R1 300
IOP1 + R2 500m +
C1 10u

完整的数控直流电源程序

完整的数控直流电源程序

完整的数控直流电源程序数控直流电流源程序ffice ffice" />PORT EQU 0FE00HPORTA EQU 0FE01HPORTB EQU 0FE02HPORTC EQU 0FE03HDISP0 EQU 30HDISP1 EQU 31HDISP2 EQU 32HDISP3 EQU 33HDISP4 EQU 34HDISP5 EQU 35HDISP6 EQU 36HDISP7 EQU 37HWEI EQU 38H ;位码DATB1 EQU 27 ;乘0.54DATB EQU 50 ;除PPPP EQU 85 ;想少数响要增大数值ADADH EQU 0FB00H ;AD地址DAADH EQU ffice:smarttags" />0F700H ;DA地址DBUFH EQU 3CH ;DA高四位DBUFL EQU 3DH ;DA低八位LENG1 EQU 24 ;双字节二进制变BCD,40H~44HLENG2 EQU 4LENG3 EQU 3NUMB1 EQU 40HNUMB2 EQU 43HORG 0000HAJMP MAINORG 000BHAJMP LEDORG 0013HAJMP KEYSCANMAIN: CLR P1.1SETB P1.1CLR P1.1MOV R0,#00HMOV R1,#00HMOV SP,#50HSETB PT0MOV TMOD,#01HMOV TH0,#0F8H ;2MS,显示扫描间隔MOV TL0,#30HSETB EASETB ET0SETB TR0SETB IT1SETB EX1CLR 00H ;电流千位合法位CLR 01H ;显示闪烁MOV 3EH,#00H ;显示数据MOV 3FH,#00HMOV 39H,#00H ;合字暂存MOV 3CH,#00HMOV 3DH,#00HMOV 45H,#00H ;拆字暂存SETB P1.0 ;过载MOV DPTR,#PORT ;AB出C口入MOV A,#03HMOVX @DPTR,AMOV DPTR,#PORTA ;列扫描输出低电平MOV A,#0HMOVX @DPTR,AMOV 3AH,#00HMOV 3BH,#00HMOV 30H,#0MOV 31H,#0MOV 32H,#0MOV 33H,#0MOV 34H,#0MOV 35H,#0MOV 36H,#0MOV 37H,#0MOV WEI,#00HSETB RS0SETB RS1MOV R0,#DISP0 ;显示指针一定要用俩组MOV R6,#8 ;显示位数MOV R1,#DISP0 ;键盘指针MOV R7,#4 ;键盘位数CLR RS0CLR RS1LOOP: ACALL LOOPPACALL DTOAACALL ATODAJMP LOOP;******************电流设置子程序***************LOOPP: MOV A,3AHCJNE A,#15,PASS1ACALL SETONEPASS1: CJNE A,#10,PASS2ACALL JIAPASS2: CJNE A,#11,PASS3ACALL JIANPASS3:RET;******************DA转换子程序***************** DTOA: PUSH PSWSETB RS0MOV R2,3CHMOV R3,3DH;MOV R2,#00H;MOV R3,#00HCLR P3.5SETB P3.5SETB P2.3CLR CCLR AMOV A,R2MOV R7,#4LOOP11: RLC ADJNZ R7,LOOP11MOV R7,#4LOOP22: LCALL PRDDJNZ R7,LOOP22CLR CCLR AMOV A,R3MOV R7,#8LOOP34: LCALL PRDDJNZ R7,LOOP34CPL P2.3POP PSWRETPRD: RLC AMOV P3.0,CSETB P3.1CPL P3.1RET;*****************************AD采样子程序****************************** ATOD:HUMID: MOV DPTR,#0FB00HCLR AMOVX @DPTR,AWAIT: JNB P3.4,READ ;转换结束信号SJMP W AITREAD: MOVX A,@DPTRMOV B,#8MUL ABMOV 40H,A ;低位MOV 41H,B ;高位;MOV 40H,#0F8H;MOV 41H,#07HMOV 42H,#00H;双字节二进制变BCD;入口二进制42H,41H,40H高到低;出口44H~43H,高到低MUBTD: MOV R0,#NUMB2MOV R7,#LENG2CLR ALOOP18: MOV @R0,AINC R0DJNZ R7,LOOP18MOV R7,#LENG1LOOP48: MOV R1,#NUMB1MOV R6,#LENG3CLR CLOOP28: MOV A,@R1RLC AMOV @R1,AINC R1DJNZ R6,LOOP28MOV R5,#LENG2MOV R0,#NUMB2LOOP38: MOV A,@R0ADDC A,@R0DA AMOV @R0,AINC R0DJNZ R5,LOOP38DJNZ R7,LOOP48;拆字程序*************MOV R0,#DISP4MOV A,44HACALL SEPA1MOV R0,#DISP6MOV A,43HACALL SEPA1RETSEPA1: MOV 45H,AANL A,#0F0HSW AP AMOV @R0,AINC R0MOV A,45HANL A,#0FH;SWAP AMOV @R0,A;RETMOV DPTR,#0FB01HCLR AMOVX @DPTR,AWAIT1: JNB P3.4,READ1 ;转换结束信号SJMP W AIT1READ1: MOVX A,@DPTRCLR C;MOV A,#68CJNE A,#PPPP,LLILLI: JNC LL2 ;集电极电压大于5V则不报警CLR P1.0 ;负载电压大于10VRETLL2: SETB P1.0RET;闭环*****************************CLR CMOV A,43HSUBB A,3FHMOV 46H,A ;低MOV A,44HSUBB A,3EHMOV 47H,A ;高;***********键盘显示中断程序*****************;用定时中断0,显示扫描,30H~37H是段码存放地址,38H是位码地址;8155 PB0~PB3段码输出,PB4~PB7位码输出;用外部中断1键盘扫描,PA0~PA3列扫描输出,PC0~PC3;输入,P2.0接CS,P2.1接IO/M ;出口数值是0~15,存在3AH中,3BH用作放键暂存;用寄存器第3组;已用R0,R2,R3,R4,R5,R6,其中R0,R6为显示用,R1,R2,R3,R7为键盘用,R4,R5延时用;*******************中断显示扫描子程序*****************LED: PUSH PSWPUSH ACCPUSH BPUSH DPHPUSH DPLSETB RS0SETB RS1MOV TH0,#0F8H ;2MSMOV TL0,#30HMOV A,@R0ADD A,WEIMOV DPTR,#PORTBMOVX @DPTR,AMOV A,WEIADD A,#10HMOV WEI,AINC R0;ACALL DELAYDJNZ R6,LED1MOV WEI,#00HMOV R0,#DISP0MOV R6,#8LED1: POP DPLPOP DPHPOP BPOP ACCPOP PSWRETI;**************中断键盘扫描子程序************KEYSCAN: PUSH PSWPUSH ACCPUSH BPUSH DPHPUSH DPLSETB RS0SETB RS1ACALL DELAY1 ;消抖延时JNB P3.3,LISTMOV DPTR,#PORTA ;恢复B口输出低电平MOV A,#00HMOVX @DPTR,APOP DPLPOP DPHPOP BPOP ACCPOP PSWRETI ;没有按LIST: MOV DPTR,#PORTCMOVX A,@DPTRMOV 3BH,AMOV R2,#0FEHMOV R3,#00HLINE0: MOV DPTR,#PORTAMOV A,R2MOVX @DPTR,AMOV DPTR,#PORTCMOVX A,@DPTRJB ACC.0,LINE1MOV A,#0AJMP TRYKLINE1: JB ACC.1,LINE2MOV A,#1AJMP TRYKLINE2: JB ACC.2,LINE3MOV A,#2AJMP TRYKLINE3: JB ACC.3,NEXTMOV A,#3AJMP TRYKNEXT: ;INC R3MOV A,R3ADD A,#4MOV R3,AMOV A,R2JNB ACC.3,EXITRL AMOV R2,AAJMP LINE0EXIT: MOV DPTR,#PORTA ;恢复B口输出低电平MOV A,#00HMOVX @DPTR,APOP DPLPOP DPHPOP BPOP ACCPOP PSWRETI ;没有按TRYK: ADD A,R3MOV 3AH,ALETK: MOV DPTR,#PORTCMOVX A,@DPTRXRL A,3BHJZ LETKMOV DPTR,#PORTA ;恢复B口输出低电平MOV A,#00HMOVX @DPTR,APOP DPLPOP DPHPOP BPOP ACCPOP PSWRETI;*******************电流设置****************SETONE:SETB RS0SETB RS1;SETB 01H ;置显示闪烁位SETONE1: MOV A,3AHCJNE A,#10,L1L1: JNC SETONE1JB 00H,L3CJNE A,#2,L2 ;2000MAMOV DISP0,#2MOV DISP1,#0MOV DISP2,#0MOV DISP3,#0;CLR 01HCLR RS0CLR RS1PUSH PSWSETB RS1ACALL BCDHEX ;十六位BCD变十六进制ACALL SUBBV ;*2再送DAPOP PSWCLR ARETL2: MOV 3AH,#0FFHJNC SETONE1SETB 00HL3: MOV @R1,A ;即时刷新显示缓冲区INC R1MOV 3AH,#0FFHDJNZ R7,SETONEMOV R7,#4MOV R1,#30HCLR 00H;CLR 01HCLR RS0CLR RS1PUSH PSWSETB RS1ACALL BCDHEX ;16字节BCD变二进制ACALL SUBBV ;*5/8POP PSWCLR ARET;**********加电流JIA: MOV 3AH,#0FFHMOV A,DISP3INC AMOV DISP3,ACJNE A,#10,OUTMOV DISP3,#0MOV A,DISP2INC AMOV DISP2,ACJNE A,#10,OUTMOV DISP2,#0MOV A,DISP1INC AMOV DISP1,ACJNE A,#10,OUTMOV DISP1,#0MOV A,DISP0INC AMOV DISP0,ACJNE A,#2,OUTMOV DISP0,#1MOV DISP1,#9MOV DISP2,#9MOV DISP3,#9OUT: PUSH PSWSETB RS1ACALL BCDHEXACALL SUBBVPOP PSWCLR ARET;**********减电流JIAN: MOV 3AH,#0FFHMOV A,DISP3DEC AMOV DISP3,ACJNE A,#0FFH,OUT1MOV DISP3,#9MOV A,DISP2DEC AMOV DISP2,ACJNE A,#0FFH,OUT1MOV DISP2,#9MOV A,DISP1DEC AMOV DISP1,ACJNE A,#0FFH,OUT1MOV DISP1,#9MOV A,DISP0DEC AMOV DISP0,ACJNE A,#0FFH,OUT1MOV DISP0,#0MOV DISP1,#0MOV DISP2,#0MOV DISP3,#0OUT1: PUSH PSWSETB RS1ACALL BCDHEXACALL SUBBVPOP PSWCLR ARETBCDHEX:MOV R7,#03HMOV R0,#DISP0CLR AMOV R1,AMOV R2,AMOV R5,AMOV R3,AMOV A,@R0MOV R1,ACLR C LOOP16: MOV A,R1ADD A,R1MOV R1,AMOV A,R2ADDC A,R2MOV R2,AMOV A,R1MOV R3,AMOV A,R2MOV R4,AMOV A,R1ADD A,R1MOV R1,AMOV A,R2ADDC A,R2MOV R2,AMOV A,R1ADD A,R1MOV R1,AMOV A,R2ADDC A,R2MOV R2,AMOV A,R1ADD A,R3MOV R1,AMOV A,R2ADDC A,R4MOV R2,AINC R0MOV A,@R0MOV A,R1ADD A,R5MOV R1,AMOV A,R2ADDC A,#00HMOV R2,AMOV R5,#00HDJNZ R7,LOOP16RETSUBBV: MOV 3EH,R2MOV 3FH,R1MOV R4,3EH ;高位MOV R3,3FH ;低位MOV R2,#DA TB1;********************************乘5MULI:MOV A,R2 ;取乘数MOV B,R3 ;取被乘数低位MUL AB ;计算(R3)*(R2)MOV R5,A ; 乘积的低位送R5MOV R6,B ; 乘积的高位送R6MOV A,R2 ;恢复乘数MOV B,R4 ;取被乘数高位MUL AB ;计算(R4)*(R2)ADD A,R6 ;(R3)*(R2)积的高位加(R4)*(R2)积的低位MOV R6,A ;存结果MOV A,B ;取(R4)*(R2)ADDC A,#00H ; (R4)*(R2)积的高位加低位进位MOV R7,A ;存最高位;RETMOV A,R6MOV R1,AMOV A,R5MOV R0,A;*******************除8MOV R2,#00HMOV R3,#DATBMOV R4,#00HMOV R5,#00HMOV R7,#10HCHU5: MOV A,R0ADD A,R0MOV R0,AMOV A,R1ADDC A,R1MOV R1,AMOV A,R2ADDC A,R2MOV R2,AMOV A,R4ADD A,R4MOV R4,AMOV A,R5ADDC A,R5MOV R5,ACJNE R2,#DA TB,LOOP07 LOOP07: JC LOOP17MOV A,R2SUBB A,R3MOV R2,AMOV A,R4ADD A,#01HMOV R4,AMOV A,R5ADDC A,#00HMOV R5,ALOOP17: DJNZ R7,CHU5MOV 3CH,R5 ;装入DA转换MOV 3DH,R4RETDELAY1: MOV R4,#100 ;消抖延时20MS 70 10MS DEL21: MOV R5,#100DEL11: DJNZ R5,$DJNZ R4,DEL21RETEND。

数控电流源(程序+原理图+测量数据)

数控电流源(程序+原理图+测量数据)

数控电源设计(程序+原理图+测试数据)目录摘要 (2)1. 方案设计、比较与论证 (3)1.1 方案设计与论证 (3)1.2 方案论证 (4)2.系统硬件电路设计 (5)2.1 电源模块 (5)2.2 数控模块 (6)2.3 稳压输出模块 (9)3. 软件设计 (11)3.1 主流程图 (11)3.2 电压步进增减流程图 (12)4. 系统测试结果 (13)4.1 测试仪器 (13)4.2 测试方法 (13)附录1:源程序 (14)摘要本系统以AT89S52高档8位单片机为核心处理器,主要控制输出电压,最后显示在LED上。

在简易数控直流电源中,通过两个按键控制电压步进增减,单片机将数值信号送到DAC0832,转换成模拟信号,经过OP-07和LF356运算放大器,在经过TIP122和TIP127构成闭环推挽输出电路,将电压输出。

AT89S51主要是控制输出电压,信号处理,LED显示。

关键字:单片机,数模转换,数控电源.简易数控直流电源设计1. 方案设计、比较与论证1.1方案设计与论证方案一:为了完成题目的所要设计的各种功能,将整个电源分成三个部分:数控部分、稳压输出部分和供电系统。

框图如图1所示:图1:方案一原理图方框图数控部分主要由数字电路构成,它要完成键盘控制,预置拔码开关输入控制、电压控制字输出,数码管显示控制、电流过流时的软件保护及报警等功能。

由于数控部分功能较多,选用了新华公司的8位单片机C8051F020。

C8051F020实现数控功能的框图如图2所示:图2: 方案一数控部分数控部分的核心是一个C8051F020最小应用系统。

用两个键盘作为输入控制,键盘接到C8051F020的P3的两个端口。

控制输出电压。

在通过LED 显示。

预置电压输入电路有8个开关组成。

接到P1口。

四个开关接到P1口的低四位,表示预置电压的整数,四个开关接到P1口的高四位,表示预置电压小数位。

电源加电时,在初始化程序中CPU 从P1口读入预置值,根据预置值输出电压控制字,实现开机预置。

简易数控直流电流源毕业设计(优.选)

简易数控直流电流源毕业设计(优.选)

目录摘要 (3)Abstract (4)第1章绪论 (5)1.1 课题背景.......................................................................................................................1.2 技术发展历程...............................................................................................................1.3 本文的研究目的意义及主要工作...............................................................................1.4 小结............................................................................................................................... 第2章方案设计 ..................................................................2.1 方案比较与论证...........................................................................................................2.1.2系统设计方案选择.................................................................................................2.1.2压控恒流源的选择.................................................................................................2.1.3显示方案选择.........................................................................................................2.2 总体设计方案...............................................................................................................2.3本章小结........................................................................................................................ 第3章硬件电路设计 ..........................................................3.1 电源电路设计...............................................................................................................3.1.1 TL7660简介...........................................................................................................3.1.2 电源电路设计........................................................................................................3.2 控制电路.......................................................................................................................3.2.1 单片机时钟电路....................................................................................................3.2.2 单片机复位电路....................................................................................................3.2.3 控制电路设计........................................................................................................3.3 D/A转换电路................................................................................................................3.4 压控恒流源电路...........................................................................................................3.4.1 LM324简介............................................................................................................3.4.2压控恒流源电路设计.............................................................................................3.5 显示电路.......................................................................................................................3.5.1 74LS164简介.........................................................................................................3.5.2 显示电路设计........................................................................................................3.6 本章小结....................................................................................................................... 第4章软件程序设计 ..........................................................4.1 主程序设计流程...........................................................................................................4.2 程序设计.......................................................................................................................4.3 本章总结....................................................................................................................... 结论.........................................................................................致谢......................................................................................... 参考文献................................................................................. 附录A 基于AT89S51单片机的电路原理图 ..................... 附录B 基于AT89S51单片机的源程序 .............................摘要随着电子技术的飞速发展,电子设备越来越多,而电子设备要工作都需要有电源能够为其通电。

数控直流电流源

数控直流电流源

数控直流电流源内容摘要:本系统是以直流恒流源为核心,P89V51单片机为系统主控制器,通过键盘来步进调整电流源的输出电流,步进电流≤10mA,并由数码管直观显示输出电流值。

该系统由主控制器输出数字量,经过DAC0832数模转换之后,输出模拟电压,经过运算放大器隔离放大之后,控制TIP122功率管的基极电压,随着功率管基极电压的变化而输出不同的电流。

另外,单片机还同时对输出电流进行实时监控。

电流源的输出电流经过热稳定较好的采样电阻后,完成了电流/电压转换。

采样电阻上的电压经过同相放大之后,通过TLC0832完成模/数转换,再由单片机分析处理。

通过该反馈环节,可以使电流源的输出电流更加稳定,以形成稳定的压控电流源。

关键词:P89V51 DAC0832 TLC0832 TIP122 恒流源The Digital Controlled Direct Current Source Abstract:In the system the DC current source is the centre, and P89V51 version single chip microcomputer is main controller. Output current of DC power can be set by the keyboard which step can reach 10mA, while the value of the current can be displayed by LED. The digitally programmable signal is made by the central controller, which converted to the analog voltage after the Digital-to-Analog of DAC0832. Then the analog voltage which is isolated and amplified by operational amplifiers, is sent to the base electrode of TIP122, and the current of the emitter varies with the change of the base’s voltage. Otherwise, the output current can be monitored by the MCU real-timely. The current-to-voltage conversion is completed when the current pass through the sampling resistor whose thermal stability is very well. At the same time, the DAC is achieved by the TLC0832 after the phase amplification of the voltage on sampling resistor. And then the MCU will analyse and process the data. The output current can be more stable by the feedback loop so that a stable voltage-controlled constant current power is designed.Keywords:P89V51 DAC0832 TLC0832 TIP122 Constant current power目录1 绪论 (1)1.1 电流源简介 (1)1.2 问题提出 (1)1.3 历史发展及趋向预测 (1)1.3.1 历史发展 (1)1.3.2 趋向预测 (2)1.4 数控直流电流源的可行性 (2)1.5 研究方向 (2)1.6 工作内容 (2)2 总体方案论证与比较 (1)2.1 传统电流源的设计方案 (1)2.2 数控直流电流源 (1)2.3 数控直流电流源的方案论证与比较 (2)3 模块硬件电路的设计与比较 (2)3.1 单片机P89V51芯片的介绍 (2)3.1.1 P89V51单片机的性能介绍 (3)3.1.2 功能引脚说明 (4)3.2 数模转换模块 (5)3.2.1 DAC0832概述 (5)3.2.2 DAC0832参考电压的选择 (8)3.2.3 数模转换模块设计方案 (8)3.3 模数芯片TLC0832概述 (9)3.5 人机界面方案的选择 (10)3.4 恒流源方案的选择 (12)3.5 反馈闭环方案的选择 (13)3.5.1 闭环系统的原理 (13)3.5.2 数控直流电流源闭环系统方案选择 (14)3.6 电源方案的选择 (15)3.6.1 各电源模块的设计 (15)3.6.2 三端集成稳压器概述 (17)3.6.3 系统电源模块的抗干扰措施 (17)4 软件设计 (17)4.1 主程序模块MAIN (18)4.2 定时器中断服务子程序 (19)4.3 键盘扫描子程序模块 (19)5 数据测试及分析 (21)5.1 空载输出电流测试和步进测试 (22)5.2 负载阻值变化测试 (23)5.3 纹波电流测试 (23)6 结论 (25)致谢.............................................................................................. 25错误!未定义书签。

数控直流电流源程序

数控直流电流源程序

/*跳线说明:1)将EXP-LM3S811板卡上JP9、JP13跳至左侧(短接1—2);2)将EXP-min_system_board板卡上JP13、JP14、JP15、JP16跳至右侧(短接2—3.操作过程:1)将EXP—min_system_board板卡上K1拨动开关拨至ON状态,给液晶上电;2)调节RP1电位器,使液晶有合适的背光;3)上电,编译并下载程序,复位后全速运行程序;观察液晶显示的内容,再修改程序使之显示自己的内容。

*/#include "systemInit。

h”#include "ADS7886.h”#include ”TLV5616。

h”#include "timer。

h”#define CTL_PERIPH SYSCTL_PERIPH_GPIOC // 控制液晶所用的片内端口外设定义#define CTL_PORT GPIO_PORTC_BASE#define SCK GPIO_PIN_4 // 定义信号SCK#define SID GPIO_PIN_5 // 定义信号SID#define CS GPIO_PIN_6 // 定义信号CS #define PSB GPIO_PIN_7 // 定义信号PSB#define SCK_L GPIOPinWrite(CTL_PORT,SCK,0x00)// 定义信号输出低电平#define SID_L GPIOPinWrite(CTL_PORT,SID,0x00)#define CS_L GPIOPinWrite(CTL_PORT,CS,0x00)#define PSB_L GPIOPinWrite(CTL_PORT,PSB,0x00)#define SCK_H GPIOPinWrite(CTL_PORT,SCK,0xFF)// 定义信号输出高电平#define SID_H GPIOPinWrite(CTL_PORT,SID,0xFF)#define CS_H GPIOPinWrite(CTL_PORT,CS,0xFF)#define PSB_H GPIOPinWrite(CTL_PORT,PSB,0xFF)#define SID_READ GPIOPinRead(CTL_PORT,SID) // 定义读回的数据#define SID_IN GPIOPinTypeGPIOInput(CTL_PORT,SID) // 定义SID信号为输入#define SID_OUT GPIOPinTypeGPIOOutput(CTL_PORT,SID)// 定义SID信号为输出#define LED_PERIPH SYSCTL_PERIPH_GPIOB#define LED_PORT GPIO_PORTB_BASE#define LED GPIO_PIN_5#define KEY_PERIPH SYSCTL_PERIPH_GPIOD // KEYS所接的端口#define KEY_PORT GPIO_PORTD_BASE#define KEY GPIO_PIN_7|GPIO_PIN_6|GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0#define KEY_H GPIO_PIN_7|GPIO_PIN_6|GPIO_PIN_5|GPIO_PIN_4#define KEY_L GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0#define key_h_in GPIOPinTypeGPIOInput(KEY_PORT,KEY_H)#define key_l_in GPIOPinTypeGPIOInput(KEY_PORT,KEY_L)#define key_h_out GPIOPinTypeGPIOOutput(KEY_PORT,KEY_H)#define key_l_out GPIOPinTypeGPIOOutput(KEY_PORT,KEY_L)#define SysCtlPeriClkGating SysCtlPeripheralClockGating //定义睡眠函数#define SysCtlPeriSlpEnable SysCtlPeripheralSleepEnable#define BitRate 115200 // 设定SPI的波特率#define DataWidth 8 // 设定SPI的数据宽度unsigned char AC_TABLE[]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, // 第一行汉字位置0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, // 第二行汉字位置} ;//开始菜单欢迎界面unsigned char Hello1[]="欢迎使用--数控" ;unsigned char Hello2[]="直流电流源”;unsigned char Hello3[]=”制作人:”;unsigned char Hello4[]="chenfangjie”;//一级菜单1unsigned char menu1_1[]="请输入(20~2000):"; // 选择提示unsigned char menu1_2[]=”设值:mA ”;//一级菜单1unsigned char menu2_1[]=”设定值: mA”; // 选择提示unsigned char menu2_2[]="读取值:A”;unsigned char key_val=0;//键值全局变量int A;void keyBoardInit(void){SysCtlPeripheralEnable(KEY_PERIPH); //D口使能开GPIOPinTypeGPIOOutput(KEY_PORT,KEY_H);//扫描信号输出GPIOPinTypeGPIOInput(KEY_PORT,KEY_L); //按键信号输入}//键盘扫描程序void keyBoard_scan(void){//如下依次输出行扫描线//如果有键按下则扫描列线,并获得键值//按键释放判断unsigned char key_h,key_l;key_val=0;key_l_out;key_h_out;GPIOPinWrite(KEY_PORT,KEY,0xf0);key_h_in;key_h=GPIOPinRead(KEY_PORT,KEY_H);if((GPIOPinRead(KEY_PORT,KEY_H)&0xf0)!=0xf0){SysCtlDelay(5*(TheSysClock/3000));if((GPIOPinRead(KEY_PORT,KEY_H)&0xf0)!=0xf0){key_h=GPIOPinRead(KEY_PORT,KEY_H)&0xf0;key_h_out;key_l_out;GPIOPinWrite(KEY_PORT,KEY,0x0f);key_l_in;key_l=GPIOPinRead(KEY_PORT,KEY_L)&0x0f;key_val=key_h+key_l;while(key_l!=0x0f){key_l=GPIOPinRead(KEY_PORT,KEY_L)&0x0f;}switch(key_val){case 0xe7:key_val=13;break;case 0xeb: key_val=9;break;case 0xed: key_val=5;break;case 0xee:key_val=1;break;case 0xd7: key_val=14;break;case 0xdb:key_val=10;break;case 0xdd: key_val=6;break;case 0xde:key_val=2;break;case 0xb7: key_val=15;break;case 0xbb: key_val=11;break;case 0xbd:key_val=7;break;case 0xbe: key_val=3;break;case 0x77:key_val=16;break;case 0x7b: key_val=12;break;case 0x7d:key_val=8;break;case 0x7e:key_val=4;break;}}}}// LCM端口初始化void init(void){SysCtlPeripheralEnable( CTL_PERIPH );// 使能所用的端口GPIODirModeSet(CTL_PORT, (SCK |PSB |CS ),GPIO_DIR_MODE_OUT);// 设置信号的方向GPIOPadConfigSet(CTL_PORT,(SCK |PSB |CS ),GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_STD_WPU);// 设置IO的驱动能力SysCtlPeripheralEnable(LED_PERIPH);GPIOPinTypeGPIOOutput(LED_PORT, LED);GPIOPadConfigSet(LED_PORT,LED, GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_STD_WPU);}// 串行方式发送一个字节void SendByte(unsigned char Dbyte){unsigned char i ;for(i=0 ;i〈8 ;i++){SCK_L ;SID_OUT;if (Dbyte &0x80){SID_H;}else{SID_L;}Dbyte=Dbyte<<1;SCK_H;SCK_L;}}// 串行方式接收一个字节unsigned char ReceiveByte(void){unsigned char i,temp1,t,temp2;temp1=temp2=0;for(i=0;i〈8;i++){temp1=temp1<〈1;SCK_L;SCK_H;SCK_L;SID_IN;t=SID_READ;if (t){temp1++;}}for(i=0 ;i<8 ;i++){temp2=temp2〈〈1;SCK_L;SCK_H;SCK_L;SID_IN;t=SID_READ;if (t){temp2++;}}return ((0xf0&temp1)+(0x0f&temp2));}// 判断是否忙碌void CheckBusy(void ){do SendByte(0xfc); // 字节格式:11111,RW(1),RS(0),0while(0x80&ReceiveByte());// 判断是否忙碌:BF(。

全国大学生电子设计竞赛-数控直流电流源

全国大学生电子设计竞赛-数控直流电流源

数控直流电流源摘要:本文设计了一种数控直流电流源的方案,给出了硬件组成和软件流程及源程序。

以STC89C52单片机为核心控制电路,利用12位D/A模块产生稳定的控制电压,12位A/D模块完成电流测量。

输出电流范围为20~2000mA,具有“+”“-”步进调整功能,步进为1mA,纹波电流小,LCD同时显示预置电流值和实测电流值,便于操作和进行误差分析。

关键词:STC89C52数控电流源Numerical Control DCCurrent SourceAbstract:This paper introduces a design scheme of numerical control DC current source ,and gives the hardware composition and software flow as well as the source program. UseSTC89C52MCU as the core control circuit. 12 D/A module generates A steady the control voltage and 12 A/D module completes current measurements.The current-output ranges 20 to 2000mA,with "+" and "-" steppingfor 1mA adjustment function and small ripple current. LCD could show presets current value and the measured resultat the same time,for easy operation and error analysis.Keywords:STC89C52 Numerical controlCurrent source1设计方案的选择1.1电路综合设计流程图1.1.1数控电流源电路设计流程图1.2总体设计方案经初步分析设计要求,得出总体电路由以下几部分组成:电源模块,控制模块(包括AD、DA转换)恒流源模块,键盘模块,显示模块。

数控电流源

数控电流源

数控电流源.txt如果你看到面前的阴影,别怕,那是因为你的背后有阳光!我允许你走进我的世界,但绝不允许你在我的世界里走来走去。

本文由奏团子贡献doc文档可能在WAP端浏览体验不佳。

建议您优先选择TXT,或下载源文件到本机查看。

数控直流电流源(数控直流电流源(F 题)设计者:彭浦能梁星燎林小涛指导教师:王贵恩摘要:本系统以直流电流源为核心,AT89S52 单片机为主控制器,通过键盘来设置直流电源的输出电流,设置步进等级可达 1mA,并可由数码管显示实际输出电流值和电流设定值。

本系统由单片机程控输出数字信号,经过 D/A 转换器(AD7543)输出模拟量,再经过运算放大器隔离放大,控制输出功率管的基极,随着功率管基极电压的变化而输出不同的电流。

单片机系统还兼顾对恒流源进行实时监控,输出电流经过电流/电压转变后,通过 A/D 转换芯片,实时把模拟量转化为数据量,再经单片机分析处理,通过数据形式的反馈环节,使电流更加稳定,这样构成稳定的压控电流源。

实际测试结果表明,本系统输出电流稳定,不随负载和环境温度变化,并具有很高的精度,输出电流误差范围±5mA,输出电流可在20mA~2000mA 范围内任意设定,因而可实际应用于需要高稳定度小功率恒流源的领域。

关键词:压控恒流源智能化电源闭环控制The Digital Controlled Direct Current SourceAbstract: For the system that DC source is center and 89S52 version single chip microcomputer (SCM) is main controller, output current of DC power can be set by a keyboard which step level of 1mA can be available, while the real output current and set value can be displayed by LED. In the system, the digital programmable signal from SCM is converted to analog value by DAC (AD7543), then the analog value that is isolated and amplified by operational amplifiers, is sent to the base electrode of power transistor, so an adjustable output current can be available with the base electrode voltage of power transistor. On the other hand, The constant current source can be monitored by the SCM system real-timely, its work process is that output current is converted voltage, then its analog value is converted to digital value by ADC, finally the digital value as a feedback loop is processed by SCM so that output current is more stable, so a stable voltage-controlled constant current power is designed. The test results have showed that the system can output a stable current, which has no influence with load and environment temperature, and can output a precise current of ±5mA error with a width, which can be set liberally in 20mA~2000mA, so it can be applied in need areas of constant current source with high stability and low power. Keywords: voltage-controlled constant current source ; intelligent power ; closed loop control总体方案论证与比较方案一:采用各类数字电路来组成键盘控制系统,进行信号处理,如选用 CPLD 等可编程逻辑器件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数控直流电流源程序/*跳线说明:1)将EXP-LM3S811板卡上JP9、JP13跳至左侧(短接1-2);2)将EXP-min_system_board板卡上JP13、JP14、JP15、JP16跳至右侧(短接2-3。

操作过程:1)将EXP-min_system_board板卡上K1拨动开关拨至ON状态,给液晶上电;2)调节RP1电位器,使液晶有合适的背光;3)上电,编译并下载程序,复位后全速运行程序;观察液晶显示的内容,再修改程序使之显示自己的内容。

*/#include "systemInit.h"#include "ADS7886.h"#include "TLV5616.h"#include "timer.h"#define CTL_PERIPH SYSCTL_PERIPH_GPIOC// 控制液晶所用的片内端口外设定义#define CTL_PORT GPIO_PORTC_BASE#define SCK GPIO_PIN_4 // 定义信号SCK#define SID GPIO_PIN_5 // 定义信号SID#define CS GPIO_PIN_6 // 定义信号CS#define PSB GPIO_PIN_7 // 定义信号PSB#define SCK_L GPIOPinWrite(CTL_PORT,SCK,0x00) // 定义信号输出低电平#define SID_L GPIOPinWrite(CTL_PORT,SID,0x00)#define CS_L GPIOPinWrite(CTL_PORT,CS,0x00)#define PSB_L GPIOPinWrite(CTL_PORT,PSB,0x00)#define SCK_H GPIOPinWrite(CTL_PORT,SCK,0xFF) // 定义信号输出高电平#define SID_H GPIOPinWrite(CTL_PORT,SID,0xFF)#define CS_H GPIOPinWrite(CTL_PORT,CS,0xFF)#define PSB_H GPIOPinWrite(CTL_PORT,PSB,0xFF)#define SID_READ GPIOPinRead(CTL_PORT,SID)// 定义读回的数据#define SID_IN GPIOPinTypeGPIOInput(CTL_PORT,SID) // 定义SID信号为输入#define SID_OUT GPIOPinTypeGPIOOutput(CTL_PORT,SID) //定义SID信号为输出#define LED_PERIPH SYSCTL_PERIPH_GPIOB#define LED_PORT GPIO_PORTB_BASE#define LED GPIO_PIN_5#define KEY_PERIPH SYSCTL_PERIPH_GPIOD// KEYS所接的端口#define KEY_PORT GPIO_PORTD_BASE#define KEYGPIO_PIN_7|GPIO_PIN_6|GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_ PIN_2|GPIO_PIN_1|GPIO_PIN_0#define KEY_HGPIO_PIN_7|GPIO_PIN_6|GPIO_PIN_5|GPIO_PIN_4#define KEY_LGPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0#define key_h_in GPIOPinTypeGPIOInput(KEY_PORT,KEY_H) #define key_l_in GPIOPinTypeGPIOInput(KEY_PORT,KEY_L) #define key_h_outGPIOPinTypeGPIOOutput(KEY_PORT,KEY_H)#define key_l_outGPIOPinTypeGPIOOutput(KEY_PORT,KEY_L)#define SysCtlPeriClkGating SysCtlPeripheralClockGating //定义睡眠函数#define SysCtlPeriSlpEnable SysCtlPeripheralSleepEnable#define BitRate 115200 // 设定SPI的波特率#define DataWidth 8 // 设定SPI的数据宽度unsigned char AC_TABLE[]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, //第一行汉字位置0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, //第二行汉字位置} ;//开始菜单欢迎界面unsigned char Hello1[]="欢迎使用——数控" ;unsigned char Hello2[]="直流电流源" ;unsigned char Hello3[]="制作人: " ;unsigned char Hello4[]="chenfangjie";//一级菜单1unsigned char menu1_1[]="请输入(20~2000):"; // 选择提示unsigned char menu1_2[]="设值: mA ";//一级菜单1unsigned char menu2_1[]="设定值: mA"; // 选择提示unsigned char menu2_2[]="读取值: A";unsigned char key_val=0; //键值全局变量int A;void keyBoardInit(void){SysCtlPeripheralEnable(KEY_PERIPH); //D口使能开GPIOPinTypeGPIOOutput(KEY_PORT,KEY_H); //扫描信号输出GPIOPinTypeGPIOInput(KEY_PORT,KEY_L); //按键信号输入}//键盘扫描程序void keyBoard_scan(void){//如下依次输出行扫描线//如果有键按下则扫描列线,并获得键值//按键释放判断unsigned char key_h,key_l;key_val=0;key_l_out;key_h_out;GPIOPinWrite(KEY_PORT,KEY,0xf0);key_h_in;key_h=GPIOPinRead(KEY_PORT,KEY_H);if((GPIOPinRead(KEY_PORT,KEY_H)&0xf0)!=0xf0){SysCtlDelay(5*(TheSysClock/3000));if((GPIOPinRead(KEY_PORT,KEY_H)&0xf0)!=0xf0){key_h=GPIOPinRead(KEY_PORT,KEY_H)&0xf0;key_h_out;key_l_out;GPIOPinWrite(KEY_PORT,KEY,0x0f);key_l_in;key_l=GPIOPinRead(KEY_PORT,KEY_L)&0x0f;key_val=key_h+key_l;while(key_l!=0x0f){key_l=GPIOPinRead(KEY_PORT,KEY_L)&0x0f;}switch(key_val){case 0xe7: key_val=13;break;case 0xeb: key_val=9;break;case 0xed: key_val=5;break;case 0xee: key_val=1;break;case 0xd7: key_val=14;break;case 0xdb: key_val=10;break;case 0xdd: key_val=6;break;case 0xde: key_val=2;break;case 0xb7: key_val=15;break;case 0xbb: key_val=11;break;case 0xbd: key_val=7;break;case 0xbe: key_val=3;break;case 0x77: key_val=16;break;case 0x7b: key_val=12;break;case 0x7d: key_val=8;break;case 0x7e: key_val=4;break;}}}}// LCM端口初始化void init(void){SysCtlPeripheralEnable( CTL_PERIPH );// 使能所用的端口GPIODirModeSet(CTL_PORT, (SCK | PSB | CS ) ,GPIO_DIR_MODE_OUT);// 设置信号的方向GPIOPadConfigSet(CTL_PORT, (SCK | PSB | CS ),GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_STD_WPU); //设置IO的驱动能力SysCtlPeripheralEnable(LED_PERIPH);GPIOPinTypeGPIOOutput(LED_PORT, LED);GPIOPadConfigSet(LED_PORT, LED, GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_STD_WPU);}// 串行方式发送一个字节void SendByte(unsigned char Dbyte){unsigned char i ;for(i=0 ;i< 8 ;i++){SCK_L ;SID_OUT;if (Dbyte & 0x80){SID_H;}else{SID_L;}Dbyte=Dbyte<<1;SCK_H;SCK_L;}}// 串行方式接收一个字节unsigned char ReceiveByte(void){unsigned char i,temp1,t,temp2;temp1=temp2=0;for(i=0;i<8;i++){temp1=temp1<<1;SCK_L;SCK_H;SCK_L;SID_IN;t=SID_READ;if (t){temp1++;}}for(i=0 ;i<8 ;i++){temp2=temp2<<1;SCK_L;SCK_H;SCK_L;SID_IN;t=SID_READ;if (t){temp2++;}}return ((0xf0&temp1)+(0x0f&temp2)); }// 判断是否忙碌void CheckBusy( void ){do SendByte(0xfc); //字节格式:11111,RW(1),RS(0),0while(0x80&ReceiveByte());// 判断是否忙碌:BF(.7)=1 Busy}// 向液晶发送命令void WriteCommand( unsigned char Cbyte ){CS_H;CheckBusy();SendByte(0xf8); //字节格式:11111,RW(0),RS(0),0SendByte(0xf0&Cbyte);// 高四位SendByte(0xf0&Cbyte<<4);// 低四位(先执行< ;< ;)CS_L;}// 向液晶发送显示数据void WriteData( unsigned char Dbyte )//显示字符{CS_H;CheckBusy();SendByte(0xfa); //字节格式:11111,RW(0),RS(1),0SendByte(0xf0&Dbyte);// 高四位SendByte(0xf0&Dbyte<<4);// 低四位(先执行< ;< ;)CS_L;}// 延时函数void Delay(unsigned int MS){unsigned char us,usn;while(MS!=0){usn = 2;while(usn!=0){us=0xf5 ;while (us!=0){us-- ;};usn--;}MS--;}}// 维捷登测试架专用延时函数void DelayKey(unsigned int Second , unsigned int MS100){ //输入精确到0.1S,是用","unsigned int i;for(i=0 ;i<Second*100+MS100*10 ;i++){Delay(10) ;}}// 文本区清RAM函数void LcmClearTXT( void ){unsigned char i ;WriteCommand(0x30);// 8BitMCU,基本指令集合WriteCommand(0x80);// AC归起始位for(i=0 ;i<64 ;i++)WriteData(0x20);}// 液晶初始化函数void LcmInit( void ){WriteCommand(0x30);// 8BitMCU,基本指令集合WriteCommand(0x03);// AC归0,不改变DDRAM内容WriteCommand(0x0c);// 显示ON,游标Off,游标位反白OFFWriteCommand(0x01);// 清屏,AC归0WriteCommand(0x06);// 写入时,游标右移动}void PutStr(unsigned char row,unsigned char col,unsigned char *puts) {int i=0;WriteCommand(0x30);// 8BitMCU,基本指令集合WriteCommand(AC_TABLE[8*row+col]);// 起始位置for(i=0;puts[i]!='\0';i++){WriteData(puts[i]);}}void DisplayHello(void) //显示欢迎菜单{LcmClearTXT();PutStr(0,0,Hello1);PutStr(1,0,Hello2);DelayKey(2,0);PutStr(0,0,Hello3);PutStr(1,0,Hello4);DelayKey(2,0);}void DisplayMenu1_1(void) //一级菜单显示{unsigned char a[4];int i=0,j;float v;key_val=0;LcmClearTXT();PutStr(0,0,menu1_1);PutStr(1,0,menu1_2);WriteCommand(0x30);WriteCommand(0x93);while(!(key_val==4)) // 如果按键D没有按下一直显示一级菜单{switch(key_val){case 1:WriteData('0');a[i]=0;i++;while(key_val==1);break;case 2:;break;case 3:;break;case 4:;break;case 5:WriteData('1');a[i]=1;i++;while(key_val==5);break;case 6:WriteData('2');a[i]=2;i++;while(key_val==6);break;case 7:WriteData('3');a[i]=3;i++;while(key_val==7);break;case 8:;break;case 9:WriteData('4');a[i]=4;i++;while(key_val==9);break;case 10:WriteData('5');a[i]=5;i++;while(key_val==10);break;case 11:WriteData('6');a[i]=6;i++;while(key_val==11);break;case 12:;break;case 13:WriteData('7');a[i]=7;i++;while(key_val==13);break;case 14:WriteData('8');a[i]=8;i++;while(key_val==14);break;case 15:WriteData('9');a[i]=9;i++;while(key_val==15);break;case 16:;break;}}i--;if (i==1){A=a[0]*10+a[1];}elseif(i==2){A=a[0]*100+a[1]*10+a[2];}elseif(i==3){A=a[0]*1000+a[1]*100+a[2]*10+a[3];if(A>2000)DisplayMenu1_1();}for(j=0;j<=i;j++){a[j]=a[j]+0x30;}LcmClearTXT();PutStr(0,0,menu2_1);PutStr(1,0,menu2_2);PutStr(0,4,a);while(1){while(!(key_val==4)) // 如果按键D没有按下一直显示一级菜单{switch(key_val){case 1:;break;case 2:A++;while(key_val==2);break; //数值加1case 3:A--;while(key_val==3);break; //数值减1case 4:;break;case 5:;break;case 6:;break;case 7:;break;case 8:;break;case 9:;break;case 10:;break;case 11:;break;case 12:;break;case 13:;break;case 14:;break;case 15:;break;case 16:;break;}if(A>=20&&A<=99){a[0]=A/10+0x30;a[1]=A%10+0x30;a[2]=0x20;a[3]=0x20;}if(A>=100&&A<=999){a[0]=A/100+0x30;a[1]=A/10%10+0x30;a[2]=A%10+0x30;a[3]=0x20;}if(A>=1000&&A<=2000){a[0]=A/1000+0x30;a[1]=A/100%10+0x30;a[2]=A/10%10+0x30;a[3]=A%10+0x30;}PutStr(0,4,a);v=(int)(((float)A/1000/2.5)*4096);DA_Write(v);AD_Display();}DisplayMenu1_1();}}// 主函数(程序入口)int main(void){jtagWait();// JTAG口解锁函数clockInit(); // 时钟初始化init();// 端口初始化PSB_L; // 串行方式Delay(100); // 延时LcmInit();// 液晶初始化keyBoardInit(); // 键盘初始化DA_Init();AD_Init();//SysCtlPeriClkGating(true); // 允许在睡眠模式下外设采用寄存器SCGCn配置时钟//SysCtlPeriSlpEnable(KEY_PERIPH); // 允许KEY 所在GPIO端口在睡眠模式下继续工作SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER0 ); // 使能定时器0外设TimerConfigure(TIMER0_BASE, TIMER_CFG_A_PERIODIC); // 设置定时器0为周期触发模式TimerLoadSet(TIMER0_BASE, TIMER_A, 300000); // 设置定时器装载值:定时10MSTimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); // 设置定时器为溢出中断TimerEnable(TIMER0_BASE, TIMER_A); // 使能定时器0IntEnable(INT_TIMER0A); // 使能定时器0外设//DisplayHello();IntMasterEnable(); // 处理器总中断使能//GPIOPinWrite(LED_PORT, LED,0x00);DisplayMenu1_1(); //一级菜单显示}//定时器中断void Timer0A_ISR(void)// 定时器0中断处理程序{TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT); // 清除定时器0中断keyBoard_scan();TimerEnable(TIMER0_BASE, TIMER_A); // 使能定时器0 }。

相关文档
最新文档