数控恒流源设计报告加程序_第1页
数控恒流源设计报告加程序_第2页
数控恒流源设计报告加程序_第3页
数控恒流源设计报告加程序_第4页
数控恒流源设计报告加程序_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数控恒流源设计报告背 景数控恒流源是单片机运用数字控制技术控制恒流源的一种设计方案。当前,数字化数控恒流源的应用, 随着电子技术的发展使用范围越来越广, 在电子测量仪器、激光、传感技术、超导、现代通信等高新技术领域,恒流源都被广泛应用,且发展前景较为良好。同时,也不仅局限于此。电子领域,数控恒压技术已经很成熟,但是恒流方面特别是数控恒流的技术是有待发展, 高性能的数控恒流器件的开发和应用存在巨大的发展空间。 所以设计一个数控恒流源方案来提高恒流源的稳定性、适用范围以及精度很有必要。目 录第一章 设计方案第二章 恒流电路第三章 MSP430F149单片机及电源第四章 AD模块第五章 DA模块第六章 键盘模块和显示模块第七章 软件设计第八章 实验总结第一章 设计方案本设计本设计是基于单片机控制的直流恒流源 , 分为以下几个组成部分 : 单片机控制系统、 A/D和D/A转换模块、 电源模块、恒流源模块、负载及键盘液晶显示模块 , 系统框图如图所示。系统框图用430单片机作为整机的控制单元,通过改变D/A转换器的输入数字量来改变输出电压值,从而间接地改变压控恒流源的输出电流大小。为了能够使系统具备检测实际输出电流值的大小,可以将电流转换成电压,并经过

A/D转换器进行模数转换,用单片机实时对电压进行采样,与输入预期值比较,并通过

430单片机进行进行数据处理微调输出,提高精度实时显示。第二章 恒流电路数控直流电流源可以采用电流输出型 D/A转换器来实现,单由于其输出电流的幅值一般在uA数量级,因此需要进行电流放大若干倍才能达到所需要的要求电流值,电路实现很困难。若选择电压输出型DAC,再通过V-I转换电路变成与之成比例的电流信号,则电路实现相对简单,因此设计直流电源时常采用该种方案实现,在这种方案中,V/I转换电路设计是关键。通常的V/I转换有两种方式,一种是负载共地的方式,一种是负载共电源的方式。我们选用的是负载共地的方式,因为有很多电路负载在连接的时候需要进行共地。R6为电流反馈采样电阻, R5为限流电阻, RL为负载电阻。R7为A/D转换采样电阻,R6采样到的电流信号加到电路的输入端,构成电流并联负反馈电路。由虚断知,运算放大器输入端没有电流流过,则

(Vi

V2)/R1=(V1

V4)/R2

⋯⋯a同理

(V3

V2)/R3=V2/R4

⋯⋯b由虚短知

V1=V2

⋯⋯c如果

R1=R2=R4=R3,则由

abc

式得

V3-V4=Vi上式说明 R6两端的电压和输入电压 Vi相等,则通过R7和RL的电流I=Vi/R6。如果负载RL<<100KΩ,且运算放大器的放大增益足够大时,通过负载 RL的电流仅有输入电压 Vi决定,并且 I=Vi/R6。所以R1、R2、R3、R4选用100kΩ。为了方便采样,我们选择 R6为1Ω电阻。Vi为0~1V,我们做的恒流源输出电流在 0~100mA,R6=1/=10Ω。为了扩大电流的输出能力,在上电路的负反馈没有通过电阻直接反馈, 而是串联了三极管的发射结, 进行电流放大。因为在恒流源电路中 ,MOSFET管的输入电容太大 ,而一般运放的输出 电阻都在几十欧姆以上,会造成闭环的延迟 ,而高增益的闭环负反馈中的迟延很容易振荡 ,三极管的放大倍数选大些,也可以用复合管 ,实际上电阻的误差比三极管 基极电流的影响可能要大 ,还可以通过调节电阻的值来调节 .所以我们选用的是三级管而不是 MOSFET管。第三章 MSP430F149单片机及电源MSP430F149单片机MSP430F149单片机是一个16位的、具有精简指令集的、超低功耗的混合型单片机。由于它具有极低的功耗、达到60KB的FLASH容量、丰富的片内外设和相对较小的体积及方便灵活的开发环境,已成为众多单片机系列中一颗耀眼的“芯星”。开发板资源描述 :1】.板载MSP430F149芯片【2】.集成USB型BSL编程器(对自身或其他板子进行 bsl编程)【3】.提供和8MHZ两种晶振连接方式【4】.采用USB供电和程序下载,优质电容滤波5】.采用标准JTAG接口(14针),支持硬件仿真。6】.所有IO口(包括AD电源等)均引出(未焊接排针,可自己向上或向下焊接)。7】.4路彩色LED全部上拉,可以借此观察程序运行状态。8】.2个优质独立按键。9】.板载手动复位电路。10】.板载蜂鸣器电路,可做音乐实验等。11】.提供NRF24L01+无线模块接口。12】.板子集成USB转串口功能。13】.向外提供和5v电源排针。?MSP430的端口有 P1、P2、P3、P4、P5、P6、S和COM(型号不同,包含的端口也不仅相同,如MSP430X11X系列只有P1,P2端口,而MSP430X4XX系列则包含全部上述端口),它们都可以直接用于输入/输出。MSP430系统中没有专门的输入/输出指令,输入/输出操作通过传送指令来实现。端口P1`P6的每一位都可以独立用于输入/输出,即具有位寻址功能。常见的键盘接口可以直接用端口进行模拟,用查询或者中断方式控制。由于MSP430的端口只有数据口,没有状态口或控制口,在实际应用中,如在查询式输入/输出传送时,可以用端口的某一位或者几位来传送状态信息,通过查询对应位的状态来确定外设是否处于“准备好”状态。端口的功能。(1)P1,P2端口:I/O, 中断功能,其他片内外设功能如定时器、 比较器;(2)P3,P4P5P6端口:I/O,其他片内外设功能如 SPI、UART模式,A/D转换等;(3)S,COM端口:I/O,驱动液晶。MSP430各端口具有丰富的控制寄存器供用户实现相应的操作。 其中P1,P2具有7个寄存器,P3~P6具有4个寄存器。通过设置寄存器我们可以实现:( 1)每个I/O位独立编程;( 2)任意组合输入,输出和中断;( 3)P1,P2所有8个位全部可以用作外部中断处理;( 4)可以使用所以指令对寄存器操作;( 5)可以按字节输入、输出,也可按位进行操作。端口

P1,P2

的功能可以通过它们的

7个控制寄存器来实现。这里,

Px代表

P1或P2。(1)PxDIR:输入/输出方向寄存器。

8 位相互独立,可以分别定义

8个引脚的输入

/输出方向。8位再

PUC后都被复位。使用输入

/输出功能时,应该先定义端口的方向

。作为输入时只能读,作为输出时,可读可写。 0:输入模式;1:输出模式。如: P1DIR|=BIT4;用左移位的指令,在进位位CY里就可以检测出是0还是1.为1表示无按下,;为0表示该键按下。在扫描按键时,如无按下,则取码指针R1加1后,继续扫描。如有键按下,转按键处理子程序,按键按下标志位;F0清0(表示按下)。此时,取码指针的值,就是按键的键名。随后继续进入按键检测子程序重新扫描。每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。每个按键的状态同样需变成数字量“0”和“1”,开关的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。键盘连接成4×4的矩阵形式,占用单片机P1口的8根线,行信号是列信号是。789复位456小数点123清除一位0输出暂停确认按键对应功能图1602 液晶显示模块工业字符型液晶,能够同时显示 16x02即32个字符。(16列2行)注:为了表示的方便 ,后文皆以 1表示高电平,0表示低电平。1602液晶也叫 1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个 5X7或者5X11等点阵字符位组成, 每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔, 每行之间也有间隔, 起到了字符间距和行间距的作用, 正因为如此所以它不能很好地显示图形(用自定义 CGRAM,显示效果也不好)。 ?1602LCD是指显示的内容为 16X2,即可以显示两行, 每行16个字符液晶模块(显示字符和数字)。?目前市面上字符液晶绝大多数是基于 HD44780液晶芯片的,控制原理是完全相同的, 因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。⑵管脚功能1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VCC接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高。第4脚:RS为寄存器选择,高电平 1时选择数据寄存器、低电平 0时选择指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。第7~14脚:D0~D7为8位双向数据端。第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。⑶特性或5V工作电压,对比度可调内含复位电路提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能有80字节显示数据存储器 DDRAM内建有192个5X7点阵的字型的字符发生器 CGROM8个可由用户自定义的 5X7的字符发生器 CGRAM指令集1602通过D0~D7的8位数据端传输数据和指令。显示模式设置: (初始化)00110000[0x38]设置16×2显示,5×7点阵,8位数据接口;显示开关及光标设置:(初始化)00001DCBD显示(1有效)、C光标显示(1有效)、B光标闪烁(1有效)000001NSN=1(读或写一个字符后地址指针加1&光标加1),N=0(读或写一个字符后地址指针减1&光标减1),S=1且N=1(当写一个字符后,整屏显示左移)s=0当写一个字符后,整屏显示不移动数据指针设置:数据首地址为

80H,所以数据地址为

80H+地址码

(0-27H,40-67H)其他设置:01H(显示清屏,数据指针

=0,所有显示

=0);02H(显示回车,数据指针

=0)。第四章 软件设计开 始初始化键按下按下有按键按下key_Flag标志位置 1没读取键值有有按键按判断是否按过确下认键有确认键按下AD转换使能输出键按下有输出键按判断电流是否为键入值是DA转换否Flag是否为1是各键值功能执行

否步进加减 1Flag清0第五章 实验总结经测试,此数控恒流源在

0~100mA时可适用负载的电阻范围为

0~69.Ω。在

50mA时相对误差为

0,在

10mA时显示电流比电流表小,在

100mA时显示电流比电流表大。并且其误差值近视抛物线。经分析,我们认为是一方面因为

DA采样信号经过

LM358放大

10倍时误有一定的误差,并不是绝对的十倍,故造成其输出值不是理想状态。另一方面是因为单片机的ADC模块的参考电压不是很准确,也造成一定影响。附录1:实物图附录2:程序清单#include<>#include""#include""#defineucharunsignedchar#defineuintunsignedint#define Num_of_Results 32ucharshuzi[]={"09."};staticuintresults[Num_of_Results]; ;else{dianliu1[n]='0';n++;dianliu1[n]='.';}if(h==0){DispNChar(8-(m+n+d+1)/2,0,n+m+d,dianliu1);DispNChar(14,0,2,ceshi5);}elseDispNChar(8-(m+n+d+1)/2,1,n+m+d,dianliu1);break;}elsebreak;case6:if((n<3&&d==0)||(m<1&&d==1)){shuzishuru(6);break;}elsebreak;case7:if((n<3&&d==0)||(m<1&&d==1)){shuzishuru(5);break;}elsebreak;case8:if((n<3&&d==0)||(m<1&&d==1)){shuzishuru(4);break;}elsebreak;case9:// 清除if((n!=0)&&(d==0))//{

清除整数y=dianliu1[--n]-'0';Dianliu1=(Dianliu1-y)/10;y=0;if(h==0){LcdWriteCommand(0x01,1);DispNChar(14,0,2,ceshi5);DispNChar(8-(m+n+d+1)/2,0,n+m+d,dianliu1);}else{LcdWriteCommand(0x01,1);DispNChar(0,0,2,ceshi3);DispNChar(2,0,nn+2*mm,display);DispNChar(8,0,2,ceshi4);DispNChar(14,1,2,ceshi5);DispNChar(8-(m+n+d+1)/2,1,n+m+d,dianliu1);}}elseif((d!=0)&&(m!=0))//{

清除小数y=dianliu1[m+n]-'0';Dianliu1=(Dianliu1-y)/10;m--;y=0;if(h==0){LcdWriteCommand(0x01,1);DispNChar(14,0,2,ceshi5);DispNChar(8-(m+n+d+1)/2,0,n+m+d,dianliu1);}else{LcdWriteCommand(0x01,1);DispNChar(0,0,2,ceshi3);DispNChar(2,0,nn+2*mm,display);DispNChar(8,0,2,ceshi4);DispNChar(14,1,2,ceshi5);DispNChar(8-(m+n+d+1)/2,1,n+m+d,dianliu1);}}elseif((d!=0)&&(m==0))//{

清除小数点d=0;if(h==0){LcdWriteCommand(0x01,1);DispNChar(14,0,2,ceshi5);DispNChar(8-(m+n+d+1)/2,0,n+m+d,dianliu1);}else{LcdWriteCommand(0x01,1);DispNChar(0,0,2,ceshi3);DispNChar(2,0,nn+2*mm,display);DispNChar(8,0,2,ceshi4);DispNChar(14,1,2,ceshi5);DispNChar(8-(m+n+d+1)/2,1,n+m+d,dianliu1);}}else{DispNChar(4,1,7,ceshi1);if(h==0)z=1;elsez=2;}break;case10:if((n<3&&d==0)||(m<1&&d==1)){shuzishuru(3);break;}elsebreak;case11:if((n<3&&d==0)||(m<1&&d==1)){shuzishuru(2);break;}elsebreak;case12:if((n<3&&d==0)||(m<1&&d==1)){shuzishuru(1);break;}elsebreak;case13://if((n!=0)){

确定if(m==0)daxiao=Dianliu1*10;elsedaxiao=Dianliu1;if(daxiao>1000){DispNChar(0,1,16,ceshi2);m=0;n=0;d=0;Dianliu1=0;dianliu1[0]='\0';if(h==1)z=2;elsez=1;break;}h=1;// 确认标志mm=m;nn=n;dd=d;zheng=daxiao;for(y=0;y<(n+m+d);y++)display[y]=dianliu1[y];y=0;m=0;n=0;d=0;Dianliu1=0;dianliu1[0]='\0';LcdWriteCommand(0x01,1);DispNChar(0,0,2,ceshi3);DispNChar(2,0,nn+2*mm,display);DispNChar(8,0,2,ceshi4);DispNChar(13,1,2,ceshi5);ADC12CTL0|=ENC;使能转换// ADC12CTL0|=ADC12SC;开始转换}break;case14://if(h==1){

暂停//jiaVV=0;com=(uint)(VV*2);//com=(uint)(VV/(2*REF)*4096);Write_A_B(com,0x0000,1,0);//A通道,慢速模式q=0;//

转换输出确认位置

0break;}elsebreak;case15://if(h==1){VV=zheng;

输出//jiancom=(uint)(VV*2);//com=(uint)(VV/(2*REF)*4096);if(com<2400)Write_A_B(com,0x0000,1,0);

//A

通道,慢速模式q=1;//

转换输出确认位break;}elsebreak;case16:if((n<3&&d==0)||(m<1&&d==1)){shuzishuru(0);break;}elsebreak;}}}}voidshuzishuru(uintshuzi)//{

数字输入dianliu1[n+m+d]='0'+shuzi;Dianliu1=10*Dianliu1+shuzi;if(d==0)n++;elsem++;if(h==0){DispNChar(8-(m+n+d+1)/2,0,n+m+d,dianliu1);DispNChar(14,0,2,ceshi5);}elseDispNChar(8-(m+n+d+1)/2,1,n+m+d,dianliu1);}/*******************************************AD模块函数名称:Trans_val功 能:将16进制ADC转换数据变换成三位 10进制真实的模拟电压数据,并在液晶上显示参 数:Hex_Val--16 进制数据n-- 变换时的分母等于 2的n次方返回值 :无********************************************/voidTrans_val(uintHex_Val){uchari;Dianliu2=Hex_Val;Dianliu2=(Dianliu2*2500)/4096;Dianliu2=Dianliu2%10000;caltmp=2*caltmp;j++;Dianliu3=Dianliu3+Dianliu2;a++;if(j==300){Dianliu3=Dianliu3/a;dianliu2[0]=Dianliu3%10000/1000;dianliu2[1]=Dianliu3%1000/100;dianliu2[2]=Dianliu3%100/10;dianliu2[3]=10;dianliu2[4]=Dianliu3%10;for(i=0;i<5;i++)Disp1Char((10+i),0,shuzi[dianliu2[i]]);j=0;}k=1;if(a==30){a=0;Dianliu3=0;}ADC12CTL0&=~ENC; // 关使能转换}/*******************************************函数名称:ADC12ISR功 能:ADC中断服务函数,在这里用多次平均的计算口的模拟电压数值参 数:无返回值 :无********************************************/#pragmavector=ADC_VECTOR__interruptvoidADC12ISR(void){staticuintindex=0;results[index++]=ADC12MEM0; //Moveresultsif(i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论