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

合集下载

数控直流电流源程序

数控直流电流源程序

/*跳线说明: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_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(.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归0 WriteCommand(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}。

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

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

题目名称:数控直流电流源摘要:该数控直流电流源以精密压控电流源为核心、用单片机、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所示。

数控直流源

数控直流源

简易数控直流电流源摘要:本系统设计以A T89S52为核心,通过D/A转换、、功率放大电路、I/V转换、独特的算法及ICL7107电压测量实现了高精度的电压输出范围在0~9.9V范围内的数控直流电流源。

此外本电流源还具有菜单选择功能、电压可预置,多种波形供选择、并可以以0.1V电压步进、显示给定值和实测值等功能并具备过流保护的功能。

关键词:单片机DA转换数字控制功率放大一、引言1.1系统设计目的设计出有一定输出电压范围和功能的数控电源。

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

设计概念图如下所示:图一:设计概念图另外还可以实现如下要求:(1)输出电压可预置在0~9.9V之间的任意一个值;(2)用自动扫描代替人工按键,实现输出电压变化(步进0.1V不变);(3)扩展输出电压种类(比如三角波等)。

1.2 系统设计思想本系统以AT89S52为系统控制单元、DA转换器为数字控制输出单元、运放组合电路为功率放大单元、ICL7107为实际电压测量反馈单元、4*4键盘为预置控制输入单元, 12864为显示单元。

通过键盘控制实现预置初始化,由单片机给DA转换器相应的数据,通过功率放大电路运放,最后经射极输出器完成输出。

ICL7107接至输出,显示实际的输出电压。

综上所述,系统最终的方框模块图如下所示。

图二:系统方框图二、方案比较及确定2.1、主要控制模块方案(1):凌阳单片机是本身具备语音识别功能的十六位单片机,具有基本的DSP 功能,具备语音识别的优点。

如常见的语音控制机器人,语音控制小车等。

方案(2) :采用AT89S52作为控制模块核心。

单片机最小系统相对简单,容易制作PCB ,算术功能强,软件编程灵活、可以通过ISP 方式将程序快速下载到芯片,方便的实现程序的更新,自由度大,较好的发挥C 语言的灵活性,可用编程实现各种算法和逻辑控制,同时其具有功耗低、体积小、技术成熟和成本低等优点。

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

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

(数控加工)数控直流电流源设计报告数控直流电流源一、设计任务和技术要求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位十进制加法计数器。

数控直流电流源TLC5615

数控直流电流源TLC5615

数控直流电流源林彩莲黎智华周双强(广西师范大学物理与信息工程学院创新基地桂林 541004 )摘要本数控直流电流源以单片机A T89S51为控制核心,由D/A转换器TLC5615、A/D转换器TLC2543、中文字库液晶显示块、放大电路和大功率调整电路组成。

通过4x4键盘输入给定值,由D/A转换器将数字信号转换成模拟信号,经D/A输出电压作为恒流源的参考电压,以LMOP07作为电压跟随器,利用晶体管平坦的输出特性得到恒定的电流输出,最后用中文液晶显示输出。

本系统采用单片机作为控制中心,产生数字可调的直流电流源。

其内部4K flash memory 用于存储应用程序。

键盘用于设定电流源的值。

键盘为4x4结构,采用反转法读取键盘值。

P3口的低四位接键盘的行线,P3口的高四位接键盘的列线.图中数模转换器D/A与其右边部分的电路构成恒流源。

D/A输出电压作为恒流源的参考电压,LMOP07成电压跟随器。

利用晶体管平坦的输出特性即可得到恒流输出。

由于跟随器是一种深度的电压负反馈电路,因此电流源具有较好的稳定性。

为了提高稳定度,D/A 部分的参考电压采用LM336的参考电压。

R2采用大线径康铜丝制作,康铜丝温度系数很小(5ppm/o C),大线径可使其温度影响减至最小。

单片机系统仅需5V,0.5A电源即可,电源只供单片机完成键盘输入显示,D/A等控制功能。

电流源的电源由V+提供,普通任何一种直流稳压电源都可满足要求。

作者使用的是0~10V,0~2A的直流文要电源,恒流源最大电流可达2A。

一、方案论证与比较方案一:数模转换器采用通用的DAC0809,摸数转换器采用AD0832,调整管用TIP41C.方案二:数模转换器采用美国德州仪器公司的TLC5615IP,它使带由缓冲基准输入的10位电压输出数模转换器(DAC)。

DAC具有基准电压两倍的输出范围,且DAC使单调变化的。

器件使用简单,用单5V 电源工作。

方案比较:方案一的电路能实现功能,但硬件电路复杂,逻辑电路设繁琐,调试困难,A/D、D/A采用并行转换器,占用单片机口线资源较多,处理数据的精度不够。

数控直流电流源

数控直流电流源

Hefei University2015年合肥学院电子设计竞赛项目报告项目名称:数控直流电流源作者姓名:班级: 13级通信工程(2)班完成时间: 2015.3.16数控直流电流源摘要本设计采用闭环控制实现直流电流源,系统以AT89S51单片机为控制核心,可以连续设定200mA-1000mA的电流值,根据设定的电流值,通过12位D/A TLV5618输出控制电压,10位A/D TLC1549对输出电流进行反馈,按照PID控制算法和运放的电流串联负反馈特性,实现一种高精度、低纹波、带负载能力强的直流电流源。

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

经过ADC采样,完成输出电流显示功能,是理想的电流源解决方案。

关键词:精密电流源;单片机;高精度;数控一、引言 (1)二、系统整体设计 (1)三、恒流源的工作原理 (1)3.1.基本原理 (2)3.2原理框图 (2)四、方案论证与选择 (2)4.1数控部分 (2)4.2电源提供部分 (3)4.3基准电压输出部分 (3)五、系统的硬件设计与实现 (4)5.1电路设计及器件选择 (4)5.2取样电阻的选择 (4)5.3调整管的选择 (5)5.4误差电压放大器 (5)5.4.1误差放大器的选择 (5)5.4.2放大电路工作电压的选择 (5)5.5基准电压源 (5)5.6供电部分 (6)5.7键盘显示与电路 (7)5.8其他注意事项 (7)六、系统软件设计 (8)七、系统测试与误差分析 (9)7.1测试使用的仪器设备 (9)7.2测试结果 (9)7.3纹波测量 (10)7.4系统误差分析 (10)7.4.1误差原因 (10)7.4.2电路改进方法 (10)八、心得体会与总结 (11)九、参考文献 (11)附录: (12)附录1:显示模块电路原理图 (12)附录2:键盘模块电路图 (12)一、引言科学技术是第一生产力,科技进步与创新是推动社会进步和科技发展的决定性因素,科研与创新训练是培养创新意识、提高创新能力、培养创新型人才的有效途径。

数控直流电流源设计

数控直流电流源设计

摘要:本次主要任务是使用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)。

数控直流电流源 (2)

数控直流电流源 (2)

数控直流电流源 (2)摘要: 本设计由三个部分组成,键盘与显示,基于单片机的控制器,稳流电源。

以89C52为主控单元,以数模转换器DAC0832输出参考电压,以该参考电压控制电压转换模块LM350K的输出电压大小,设计实用,精度高。

A bstract: This design is consisted of three elements, The controller based on microintrollers89C52,Keyboard and display,Stable electric current source. The51 synthesized with HD7279,achieve the aim to control the output current.一.方案论证与比较1.电源部分(1)开关电源采用单极开关电源,由220V交流整流后,经开关电源稳压输出。

该方案的优点是电路的效率较高,可以达到70%37V时可以提供1.5A的电流,本产品要求的最大电流为2A,所以必须用两个LM317并联,但是由于并联后两个LM317工作电流负载不均衡,使电路稳定性降低。

鉴于以上原因,本设计采用了单片LM350K。

LM350K可以提供最大为5A电流,满足本设计要求,而且不存在两片芯片同时运行中所产生的不同步问题,故性能比较优良,且电路稳定性提高。

本主电路的原理是通过MCU控制D/A的输出电压大小,通过放大器放大,给电压模块作为最终输出的参考电压,真正的电压,电流还是由电压模块LM350K输出。

为了达到2A的输出电流,LM350K必须选用金属外壳封装,并且带稍大面积的散热片3.DAC0832 为了实现对输出电流的数字控制,该设计选用了DAC0832。

DAC0832是一款常用的数模有两种连接模式,一种是电压输出模式,另外一种是电流输出模式,为了设计的方便,选用电压输出模式,引脚Iout1和Iout2之间接一参考电压。

完整的数控直流电源程序

完整的数控直流电源程序

完整的数控直流电源程序数控直流电流源程序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。

数控恒流源设计

数控恒流源设计

数控恒流源设计题目任务要求1、任务设计并制作数控直流电流源。

输入交流200~240V,50Hz;输出直流电压≤10V。

其原理示意图如下所示。

2、要求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)其他。

总体方案用单片机和FPGA数控恒流源。

通过键盘预置电流值,单片机输出相应的数字信号给D/A转换器,D/A转换器输出的模拟信号送到运算放大器,控制主电路电流大小。

实际输出的电流再通过采样电阻采样变成电压信号,A/D转换后将信号反馈到单片机中。

单片机将反馈信号与预置值比较,根据两者间的差值调整输出信号大小。

这样就形成了反馈调节,提高输出电流的精度。

本方案可实现题目要求,当负载在一定范围内变化时具有良好的稳定性,而且精度较高。

具体电路设计1.电源电路控制部分供电电源电路还需要大功率供电电源,专门为VMOS管供电。

因为负载中最大电流要达到2A,输出直流电压≤10V,所以该电源的输出功率至少要大于210=20W。

作为大功率电源,我们选用220V-16V/50W的变压器,稳压芯片是金属封装的三端可调稳压芯片LM317K STEEL P+,理论上安装散热片后最大输出电流可达3.4A,经实际测试,能够输出2A电流的指标。

习题7 数控式直流电流源7.1 数控式直流电流源设计指标及框图1.数控式 ...

习题7 数控式直流电流源7.1 数控式直流电流源设计指标及框图1.数控式 ...
34
architecture arch of disp is signal mid:std_logic_vector(4 downto 0); signal disp2:std_logic_vector(1 downto 0); begin process(clk,inl,inm,inh) begin if clk'event and clk='1' then if disp2="11" then disp2<="00"; else disp2<=disp2+1; end if; disp1<=disp2; case disp2 is when "10"=>mid<='0'&inl; when "01"=>mid<='0'&inm; when "00"=>mid<='0'&inh; when "11"=>mid<="10000";--显示小数点 when others =>null; end case; case mid is when "00000"=>midd<="00111111"; when "00001"=>midd<="00000110"; when "00010"=>midd<="01011011"; when "00011"=>midd<="01001111"; when "00100"=>midd<="01100110"; when "00101"=>midd<="01101101"; when "00110"=>midd<="01111101"; when "00111"=>midd<="00000111"; when "01000"=>midd<="01111111"; when "01001"=>midd<="01101111"; when "10000"=>midd<="10111111"; when "10001"=>midd<="10000110"; when "10010"=>midd<="11011011"; when "10011"=>midd<="11001111"; when "10100"=>midd<="11100110"; when "10101"=>midd<="11101101"; when "10110"=>midd<="11111101"; when "10111"=>midd<="10000111"; when "11000"=>midd<="11111111"; when "11001"=>midd<="11101111"; when others =>null;

数控直流电流源C语言程序

数控直流电流源C语言程序
{
key_tem=key_num;
while(key_tem!=0x0f)
{
write_Data_String();
key_tem=PORTB;
key_tem=key_tem&0x0f;
}
key_num=key_num|0x70;
PORTD=a;
delay(1);
E=1;
delay(1);
E=0;
delay(1);
}
void write_Data(uchar a)//写数据
{
RS=1;
RW=0;
delay(1);
E=0;
PORTD=a;
delay(1);
E=1;
delay(1);
write_Directive(0x80+0x4b);
write_Data(cun[0]);
write_Data(cun[1]);
write_Data(cun[2]);
write_Data(cun[3]);
}
}
void scan()//4x4键盘扫描函数
{
uchar key_tem;
}
if(set==0)
{
if(danum1>=2001)
{
err=1;
set=3;
danum=41;
}
write_Directive(0x0c);
PORTC=danum%16;
RCK=0;
sent595(danum/16);
RCK=1;
E=0;
delay(1);

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

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

数控电源设计(程序+原理图+测试数据)目录摘要 (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口读入预置值,根据预置值输出电压控制字,实现开机预置。

数控直流电流源

数控直流电流源

数控直流电流源总体方案论证与比较方案一:采用各类数字电路来组成键盘控制系统,进行信号处理,如选用CPLD等可编程逻辑器件。

本方案电路复杂,灵活性不高,效率低,不利于系统的扩展,对信号处理比较困难。

方案二:采用AT89S52单片机作为整机的控制单元,通过改变AD7543的输入数字量来改变输出电压值,从而使输出功率管的基极电压发生变化,间接地改变输出电流的大小。

为了能够使系统具备检测实际输出电流值的大小,可以将电流转换成电压,并经过ADC0809进行模数转换,间接用单片机实时对电压进行采样,然后进行数据处理及显示。

此系统比较灵活,采用软件方法来解决数据的预置以及电流的步进控制,使系统硬件更加简洁,各类功能易于实现,能很好地满足题目的要求。

本方案的基本原理如图1-1-1所示。

图1-1-1 系统原理框图比较以上两种方案的优缺点,方案二简洁、灵活、可扩展性好,能达到题目的设计要求,因此采用方案二来实现。

模块电路设计与比较1.恒流源方案选择方案一:采用恒流二极管或者恒流三极管,精度比较高,但这种电路能实现的恒流范围很小,只能达到十几毫安,不能达到题目的要求。

方案二:采用四端可调恒流源,这种器件靠改变外围电阻元件参数,从而使电流达到可调的目的,这种器件能够达到1~2000毫安的输出电流。

改变输出电流,通常有两种方法:一是通过手动调节来改变输出电流,这种方法不能满足题目的数控调节要求;二是通过数字电位器来改变需要的电阻参数,虽然可以达到数控的目的,但数字电位器的每一级步进电阻比较大,所以很难调节输出电流。

方案三:压控恒流源,通过改变恒流源的外围电压,利用电压的大小来控制输出电流的大小。

电压控制电路采用数控的方式,利用单片机送出数字量,经过D/A 转换转变成模拟信号,再送到大功率三极管进行放大。

单片机系统实时对输出电流进行监控,采用数字方式作为反馈调整环节,由程序控制调节功率管的输出电流恒定。

当改变负载大小时,基本上不影响电流的输出,采用这样一个闭路环节使得系统一直在设定值维持电流恒定。

基于单片机数控直流电流源

基于单片机数控直流电流源

基于单片机的数控直流电流源设计摘要:本系统采用单片机作为核心,辅以带反馈自稳定的串调恒压源,可以连续设定20mA---2000mA的电流值,根据设定的电流值,单片机由A/D574对精密电阻康铜丝电压的监控,由D/A0832直接控制输出电流,形成闭环回路,保持恒流。

为了满足精度要求,采用单片机自动控制换档电路,形成粗调和微调结合,保证了精度。

由于使用了双闭环控制,不仅提高了系统的稳定性,而且,保证了调节电流源的精度。

系统的自我保护和报警功能,具有一定的智能性,同时,增加了其运行的安全性和可靠性。

关键词:数控;直流;单片机;电流源目录一引言 (1)二课题原理 (2)三设计方案 (3)3.1方案设计比较与论证 (3)3.2理论分析计算 (4)四系统总体设计 (6)4.1硬件设计 (6)五软件设计 (12)5.1系统软件流程图 (12)5.2模块软件流程图 (13)六调试 (15)6.1硬件调试 (15)6.2软件调试 (15)6.3联机调试 (15)七测试数据与结果分析 (15)八结束语 (17)参考文献 (18)附录1:核心板FPGA IO引脚分配表 (19)附录2:核心板FPGA 外扩IO引脚分配表 (23)附录2:汇编程序 (26)一、引言:科学技术是第一生产力,科技进步与创新是推动经济和社会发展的决定性因素。

科研与创新训练是培养创新意识、提高创新能力、培养创新型人才的有效途径。

科研与创新训练是大学生成长成才的内在需要,科研与创新训练有利于促进大学生专业知识和技能的学习与提高. 科研工作就其实质来说,就是一种发现新问题、提出新见解、拟定新对策的创造性活动。

而发现、分析和解决新问题的过程,正是一个人创新意识、创造性思维能力和创造能力及奉献科学精神的全面展现过程。

科研与创新训练有利于培养大学生刻苦钻研的精神.收集丰富的资料,研究最新的科技成果,掌握科学的方法论,才能具备一定的创造力,才能步入创造的天地。

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