简易数控直流电源_第1页
简易数控直流电源_第2页
简易数控直流电源_第3页
简易数控直流电源_第4页
简易数控直流电源_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、所在学校:XX学生姓名:XX辅导老师:XX“简易数控直流电源”的设计要求一 设计任务设计出有一定输出电压范围和功能的数控电源。其原理示意图如下:输 出 电 路数 控 部 分“+” “-” 键数 字 显 示 +5V -15V +15V自 制 稳 压 电 源 220V二 设计要求1)基本要求(1)输出电压:范围09.9V,步进0.1V,纹波不大于10mV;(2)输出电流:500mA;(3)输出电压值由数码管显示;(4)由“”、“”两键分别控制输出电压步进增减;(5)为实现上述几部件工作,自制一稳压直流电源,输出±15V,5V。2)发挥部分(1)输出电压可预置在09.9V之间的任意一个值;

2、(2)用自动扫描代替人工按键,实现输出电压变化(步进0.1V不变); (3)扩展输出电压种类(比如三角波等)三 评分意见项 目满 分基本要求方案设计和论证、理论计算与分析、电路图30实际完成情况50总结报告20发挥部分完成第(1)项5完成第(2)项15完成第(3)项20简易数控直流电源的设计摘要:本设计以TI的超低功耗的16单片机MSP430F149作为微控制器,利用TIMEER_A的PWM调制来改变输出电压的幅度,通过4*4的矩阵键盘控制输出电压的值,输出的电压值可以在七段数码管上显示出来。再配置相应的集成运放电路来达到电压由09.9V的变化。关键词:MSP430F149、PWM、矩阵键盘、

3、LED显示一、 方案设计与论证1、 总体方案设计通过分析实验要求,可知道电路的整体框图如下图一所示:键盘数控部分输出电路 数字显示图1简易数控直流稳压电源框图其中键盘用于实现信号的输入以及实现对输入信号的加、减、清零、置数的功能;显示部分则实现对输出电压的显示;数控部分则通过程序以及硬件的协同作用,实现对输入信号的该变;输出电路则将数控部分输出的数字信号转化为模拟信号,输出一个稳定的输出电压。1、 方案一(如图2所示)此方案的控制部分采用FPGA开发板,通过VHDL语言来进行控制,输出部分通过DAC0832来进行D/A转换之后,通过稳压、限流电路来控制输出电压达到实验的要求,再通过A/D转换电

4、路来实现输出电压的显示。显示A/D转换FPGA开发板键 盘稳压限流电路D/A转换显 示输出 图2 方案一电路框图 2、 方案二(如图3所示)此方案采用MSP430F149为微控制器,通过定时器_A的PWM调制来实现D/A转换,再通过稳压、限流电路来控制输出电压达到实验要求,再通过A/D转换来实现输出电压值的显示。显示A/D转换 MSP430F149键 盘稳压限流电路显 示输出 图3 方案二电路框图3、 方案比较 分析以上两个方案,发现其各有优点,但是显然方案二具有更加的优越性。不仅外部电路简单,而且可以方便实现人性化很强的人机界面(键盘输入和数码管输出)。与方案一相比,方案二在实现设计要求上有

5、着很大的优越性:不需要外接D/A转换芯片;不需要复杂的参考电压产生电路;不需要外接总线驱动就可以方便实现键盘和数码管显示;MSP430F149内部有足够的存储空间,足以存储程序和显示所需要的汉字字模,不需要扩展存储;MSP430F149有多种低功耗工作模式,通过合理的程序控制可以方便实现低功耗运行。MSP430F149内部有16位的硬件乘法器,可以快速实现乘法运算;MSP430F149使用的指令简单,只有27条指令,指令周期短,数值计算能力强大。鉴于以上种种优点,我们最终选择了MSP430F1494单片机作为我们的控制中心,并且采用了第二种方案来实现设计的要求。2、 工作原理及电路设计1、 工

6、作原理PWM信号是一种具有固定周期不定占空比的数字信号,占空比可调的数字信号(如图所示)。如果PWM 信号的占空比随时间变化,那么通过滤波之后的输出信号将是幅度变化的模拟信号。因此通过控制PWM 信号的占空比就可以产生不同的模拟信号。如图4所示:不同的占空比 图4 PWM波形示例 MSP430F149 的Timer_A和Timer_B工作在比较模式时可以输出PWM信号。MSP430F149 的Timer_A和Timer_B,有四种工作模式(停止、增计数、连续计数、增减计数),计数器的时钟源可选,有多个可配置输入端的捕获/比较寄存器,有多种可选的输出模式。它们支持同时进行的多种时序控制,多个捕获

7、/比较功能及多种输出波形(PWM波形)。Timer各部分的功能选择通过寄存器(TACTL 控制寄存器、CCTLx捕获比较控制寄存器、CCRx捕获/比较寄存器、TAIV中断向量寄存器)控制。要想让Timer工作在特定的模式下,只需要在相应的寄存器中写入相应的控制字。 如果定时器中的计时器工作在增计数模式,输出选用7模式(复位/置位模式),则定时器中的寄存器CCR0用来控制输出PWM波形的周期T, 而与定时器对应的CCRx 寄存器来控制可变占空比。PWM 信号经过滤波器后,一个PWM 信号周期 T 对应一个抽样值,所以输出信号的频率Fx与该信号每个周期的采样数N及PWM 信号周期T有关。它们之间存

8、在以下关系: Fx=1/(T*N) (1) 其中的 T 与 CCRO、计数器的计数频率 Fs 有关: T= CCRO/ Fs (2) 所以, Fx=1/(CCRO/ Fs) N=Fs/(CCRO*N) (3)2、 电路框图数码管显示输出P4M S P 4 3 0 P34*4键盘放大、稳压、限流电路滤波电 路TA P1.2图5 总体电路框图MSP430F149具有很多的输入输出端口,可以外接很多的部件,键盘、七段数码管可以直接的接在不同的I/O口。利用定时器A输出PWM波形,只要直接利用放大、稳压、限流电路来对电压进行放大以及对输出电流的限制。使最后输出的电压能够满足在0-9.9V直接稳定的变化

9、。3、 单元电路设计1、 键盘以及显示电路 由于对电路要实行清零、置数、加数、减数的控制,因此需要一个4*4的矩阵键盘,通过软件对不同的按钮设置不同的功能。该键盘的电路如图6所示: 图6 矩阵键盘电路其中“/”键实现的是减一;“×”键实现的是加一;“”键实现的是减十;“+”键实现的是加十;“=”键实现的是置数;“on/c”键实现的是清零;数字键用于在置数的时候使用。七段数码管实现的是对键盘控制的数字进行显示。其电路如7所示: 图7 气短数码管显示电路PWM输出电路是通过程序来控制脉冲的占空比,从而通过电容的充放电来使输出的电压为一个连续变化的模拟量,该电路如图8所示:图8 输出电路2

10、、 放大、稳压以及限流电路由于输出的电压只有04.95V,不能满足实验的要求,所以需要对输出的电压进行放大、稳定,在放大的过程中由于输出的电流很大,则需要进一步对电流的大小进行限定,以防止元器件被烧坏。该电路图如图9所示:图9 放大、稳压以及限流电路4、 软件设计通过单片机实现对矩阵键盘、脉冲宽度以及七段数码管的控制,通过键盘来控制数码管显示的值以及改变脉冲的占空比,使输出的电压发生变化。其中键盘扫描程序的流程图如附录1所示,源程序如附录2所示。仿真的电路图如附录3所示。5、 测量结果键盘输入数码管显示稳压电路输出Uo稳压电路输出Uo理论值绝对误差999.99.9 V9.9 V0 V909.0

11、9 V9 V0 V808.08.05 V8 V0.05 V707.07.03 V7 V0.03 V606.06.02 V6 V0.02 V505.05 V5 V0 V404.04 V4 V0 V303.03 V3 V0 V202.01.98 V2 V-0.02 V101.00.99 V1 V-0.01 V000.00 .02V0 V0.02 V6、 参考文献1、 沈建华,杨艳琴 ;MSP430系列16位超低功耗单片机原理与实践 ; 北京航空航天大学出版社 ;20082、 曹磊 ;MSP430单片机C程序设计与实践 ;北京航空航天大学出版社 ;2007附录1:附录2:#include<ms

12、p430x14x.h>unsigned char LineScan4=0xef,0xdf,0xbf,0x7f; /列值列举unsigned char Seg= /七段数码管表 0x00,0x01,0x02,0x03, 0x04,0x05,0x06,0x07, 0x08,0x09,0x0a,0x0b, 0x0c,0x0d,0x0e,0x0f;unsigned int Pwm=0;unsigned int m,n;unsigned int flag_set=0;unsigned int flag_ten=0;void Delay(unsigned int wDelay) /延时子程序 whi

13、le(wDelay!=0) wDelay-;unsigned int key_check(void) /检测是否有按键按下 unsigned char temp; P3DIR=0xf0; /定义P1.4P1.7为输出 temp=P3IN & 0x0f; if(temp!=0x0f) return 1; else return 0; void Clear() Pwm=0; m=Pwm/10; n=Pwm%10; Delay(65535); P4OUT = Segm*16+Segn; CCR1=0;void NumSet() /置数键“=”子程序 flag_set=1;void NumAd

14、d1() /加一键“×”子程序 if(Pwm>=99) Pwm=Pwm-1; CCR1=CCR1-2; Pwm=Pwm+1; m=Pwm/10; n=Pwm%10; Delay(65535); P4OUT = Segm*16+Segn; CCR1=CCR1+2; void NumAdd10() /加十键“+”子程序 if(Pwm<=99 & Pwm>=89) Pwm=Pwm-10; CCR1-=20; Pwm=Pwm+10; m=Pwm/10; n=Pwm%10; Delay(65535); P4OUT = Segm*16+Segn; CCR1=CCR1+2

15、0;void NumSub1() /减一键“÷”子程序 if(Pwm=0) Pwm=Pwm+2; CCR1=CCR1+10; Pwm=Pwm-1; m=Pwm/10; n=Pwm%10; Delay(65535); P4OUT = Segm*16+Segn; CCR1=CCR1-2;void NumSub10() /减十键“”子程序 if(Pwm<=9 && Pwm>=0) Pwm=Pwm+10; CCR1=CCR1+20; Pwm=Pwm-10; m=Pwm/10; n=Pwm%10; Delay(65535); P4OUT = Segm*16+Segn

16、; CCR1=CCR1-20;void Num0() /按键“0”子程序 if(flag_set=1) flag_ten +=1; if(flag_ten % 2=1) Pwm=0*10+n; m=Pwm/10; n=Pwm%10; Delay(65535); P4OUT = Segm*16+Segn; else Pwm=m*10+0; m=Pwm/10; n=Pwm%10; Delay(65535); P4OUT = Segm*16+Segn; flag_set=0; CCR1=Pwm*2-2; void Num1() /按键“1”子程序 if(flag_set=1) flag_ten +=

17、1; if(flag_ten % 2=1) Pwm=1*10+n; m=Pwm/10; n=Pwm%10; Delay(65535); P4OUT = Segm*16+Segn; else Pwm=m*10+1; m=Pwm/10; n=Pwm%10; Delay(65535); P4OUT = Segm*16+Segn; flag_set=0; CCR1=Pwm*2-2; void Num2() /按键“2”子程序 if(flag_set=1) flag_ten +=1; if(flag_ten % 2=1) Pwm=2*10+n; m=Pwm/10; n=Pwm%10; Delay(655

18、35); P4OUT = Segm*16+Segn; else Pwm=m*10+2; m=Pwm/10; n=Pwm%10; Delay(65535); P4OUT = Segm*16+Segn; flag_set=0; CCR1=Pwm*2-2; void Num3() /按键“3”子程序 if(flag_set=1) flag_ten +=1; if(flag_ten % 2=1) Pwm=3*10+n; m=Pwm/10; n=Pwm%10; Delay(65535); P4OUT = Segm*16+Segn; else Pwm=m*10+3; m=Pwm/10; n=Pwm%10;

19、 Delay(65535); P4OUT = Segm*16+Segn; flag_set=0; CCR1=Pwm*2-2; void Num4() /按键“4”子程序 if(flag_set=1) flag_ten +=1; if(flag_ten % 2=1) Pwm=4*10+n; m=Pwm/10; n=Pwm%10; Delay(65535); P4OUT = Segm*16+Segn; else Pwm=m*10+4; m=Pwm/10; n=Pwm%10; Delay(65535); P4OUT = Segm*16+Segn; flag_set=0; CCR1=Pwm*2-2;

20、void Num5() /按键“5”子程序 if(flag_set=1) flag_ten +=1; if(flag_ten % 2=1) Pwm=5*10+n; m=Pwm/10; n=Pwm%10; Delay(65535); P4OUT = Segm*16+Segn; else Pwm=m*10+5; m=Pwm/10; n=Pwm%10; Delay(65535); P4OUT = Segm*16+Segn; flag_set=0; CCR1=Pwm*2-2; void Num6() /按键“6”子程序 if(flag_set=1) flag_ten +=1; if(flag_ten

21、% 2=1) Pwm=6*10+n; m=Pwm/10; n=Pwm%10; Delay(65535); P4OUT = Segm*16+Segn; else Pwm=m*10+6; m=Pwm/10; n=Pwm%10; Delay(65535); P4OUT = Segm*16+Segn; flag_set=0; CCR1=Pwm*2-2; void Num7() /按键“7”子程序 if(flag_set=1) flag_ten +=1; if(flag_ten % 2=1) Pwm=7*10+n; m=Pwm/10; n=Pwm%10; Delay(65535); P4OUT = Se

22、gm*16+Segn; else Pwm=m*10+7; m=Pwm/10; n=Pwm%10; Delay(65535); P4OUT = Segm*16+Segn; flag_set=0; CCR1=Pwm*2-2; void Num8() /按键“8”子程序 if(flag_set=1) flag_ten +=1; if(flag_ten % 2=1) Pwm=8*10+n; m=Pwm/10; n=Pwm%10; Delay(65535); P4OUT = Segm*16+Segn; else Pwm=m*10+8; m=Pwm/10; n=Pwm%10; Delay(65535);

23、P4OUT = Segm*16+Segn; flag_set=0; CCR1=Pwm*2-2; void Num9() /按键“9”子程序 if(flag_set=1) flag_ten +=1; if(flag_ten % 2=1) Pwm=9*10+n; m=Pwm/10; n=Pwm%10; Delay(65535); P4OUT = Segm*16+Segn; else Pwm=m*10+9; m=Pwm/10; n=Pwm%10; Delay(65535); P4OUT = Segm*16+Segn; flag_set=0; CCR1=Pwm*2-2; unsigned char s

24、can_key(void) /扫描对应按键的键号 P3DIR=0xf0;unsigned char count;unsigned char i,temp,m,n; /m为列的值,n为行的值unsigned int flag=0;for(i=0;i<4;i+) /列扫描 P3OUT=LineScani; /获取扫描的列 temp=P3IN&0x0f; if(temp=0x07) /为第一行 n=0; /记录按下按钮的行 flag=1; /标志检测出来 break; else if(temp=0x0b) /为第二行 n=1; flag=1; break; else if(temp=0x0d) /为第三行 n=2; flag=1; break; else if(temp=0x0e) /为第四行 n=3; flag=1; break; if(flag=1) m=i; flag=0; count=n*4+m; / return n*4+m; switch(count) /判断按键值,指向相应的子程序 case 0:Num7(

温馨提示

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

评论

0/150

提交评论