数控电源010V含代码_第1页
数控电源010V含代码_第2页
数控电源010V含代码_第3页
数控电源010V含代码_第4页
数控电源010V含代码_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、直流数控电压源设计本小组成员:刘兵丹,刘朋,刘伶,电子信息工程0904班系统框架本数控直流稳压电源的设计以一稳压电源为基础,以高性能单片机系统为控制核心,以稳压驱动放大电路、短路保护电路为外围的硬件系统,在检测与控制软件的支持下实现对电压输出的数字控制,通过对稳压电源输出的电压进行数据采样与给定数据比较,从而调整输入电压。本数控直流稳压电源实现以下功能:键盘可以直接设定输出电压值;可步进调整电压;LCD显示电压值。硬件接口及主要特性:ADC0804接口振荡频率为fCLK1/1.1RC。其典型应用参数为:R=10K,C=150PF,fCLK640KHZ,转换速度为100。若采用外部时钟,则外部f

2、CLK 可从CLKI 端送入,此时不接R、C。允许的时钟频率范围为100KHZ1460KHZ。INTR (引脚5): INTR 是转换结束信号输出端,输出跳转为低电平表示本次转换已经完成,可作为微处理器的中断或查询信号。如果将CS 和WR 端与INTR 端相连,则ADC0804 就处于自动循环转换状态. CS 0 时,允许进行A/D 转换。WR 由低跳高时A/D 转换开始,8 位逐次比较需8×8=64 个时钟周期,再加上控制逻辑操作,一次转换需要6673 个时钟周期。在典型应用fCLK640KHZ 时,转换时间约为103114。当fCLK 超过640KHZ,转换精度下降,超过极限值1

3、460KHZ 时便不能正常工作。 V2(引脚9):参考电压V/2 可以由外部电路供给,从“V/2”端直接送入,V/2 端电压值应是输入电压范围的二分之一。DAC0832接口 8位D/A转换,其转换时间为1us,工作电压为+5V+15V,基准电压为10V+10V芯片数据输入可采用双缓冲,单缓冲和直通三种方式。本次采用直通方式。LCD1602接口和ADC0804分时复用P0进行数据传输键盘接口 单独用P1口对4*4键盘进行扫描识别程序设计程序设计思想提炼如下图所示:精简协作式不可剥夺嵌入式操作系统,得力与田sir的Easy51RTOS操作系统,这个系统运用。协作式不可剥夺意思是说一个任务得到了 C

4、PU 时间,除非它自己放弃使用 CPU ,否则将完全霸占 CPU ,所以任务之间需要协作使用一段时间的 CPU ,放弃使用,其它的任务也如此,才能保证系统的正常运行。把一些例行的及需要定时执行的程序放在时钟中断中,还可以利用时钟中断协助主程序完成定时、延时等操作。注意:应尽量缩短中断处理程序的执行时间,更不要长于20mS。全局变量部分代码如下:ADC0804测得的数字量adc_value;DAC0832输入的数字量dac_value;程序写好后,编译成功,但1602显示的数据与预期不符。于是分块检查,发现DA,1602,AD均是正确的。后来参考别人的程序,发现单片机在读取AD的数据时,没有先对

5、相应的端口写1.任务零ADC0804测数控电源的输出电压(量程限制取其一半进行测量),得到数字量adc_value,与DAC0832的输入dac_value进行比较,进行反馈(其实我们在把电路做出来,进行测试时发现实际输出和我们通过按键设定的值误差很小,反而ADC0804由于精度不高,测出来的电压值误差较大,最后我们舍去了反馈)来调整0832的dac_value。#ifndef _adc0804_H_#define _adc0804_H_ /接口定义sbit AD_CS=P34;sbit AD_RD=P37;sbit AD_WR=P36; /读ADDR中的数据 int get_data() i

6、nt date; AD_CS=0;AD_RD=1;AD_WR=1; /ad开始转换 AD_WR=0; P0=0xff; AD_RD=1;AD_RD=0; date=P0;AD_WR=1; /ad停止转换AD_RD=1;return date;#endif程序写好后,编译成功,但1602显示的数据与预期不符。于是分块检查,发现DA,1602,AD均是正确的。后来参考别人的程序,发现单片机在读取AD的数据时,没有先对相应的端口写1.任务一通过按键设定电压,识别到dac_value使DAC0832输出我们需要的电压。void task1(void) float adc_value1; float d

7、ac_value1; int dac_value2; adc_value1=adc_value; dac_value1=dac_value; if(adc_value1*10/255-dac_value1/1000>=0.04) dac_value1=dac_value1-1; if(dac_value1/1000-adc_value1*10/255>=0.04) dac_value1=dac_value1+1; dac_value1=dac_value1*255/10000; dac_value2=dac_value1; if(key_input_display=0)/当确认键按

8、下时。 dac0832(dac_value2); task_delay1 = TASK_DELAY1;涂暗的那段代码是为了用0804的测量值来反馈0832已得到我实际设定的电压值;涂红的那段代码:8位精准度,10V对应255,但是按键扫描得到的电压值是放大了一千倍的。见后面任务三任务二通过1602来显示setting:设定的电压值 measure:测得的电压值void task2_init(void) lcd1602_init();print_string("setting:",0x80);print_string("measure:",0x80+0x4

9、0);/任务2void task2() task2_init(); if(key_input_display=0)/当确认键按下时. adc0=adc_value/1000+'0' adc1='.' adc2=adc_value%1000/100+'0' adc3=adc_value%100/10+'0' adc4=adc_value%10+'0' adc5=0; switch(press_time) case 0: key_value_dac0=dac_value/1000+'0' key_val

10、ue_dac1='.' key_value_dac2=dac_value%1000/100+'0' key_value_dac3=dac_value%1000%100/10+'0' key_value_dac4=dac_value%1000%100%10+'0' break;dac_value是一个四位的整数 case 1: key_value_dac0='_' key_value_dac1='.' key_value_dac2='_' key_value_dac3='_&#

11、39; key_value_dac4='_' break; case 2: key_value_dac0=dac_value/1000+'0' break; case 3: key_value_dac2=dac_value%1000/100+'0' break; case 4: key_value_dac3=dac_value%1000%100/10+'0' break; case 5: key_value_dac4=dac_value%1000%100%10+'0' break; default: break;

12、print_string(adc,0xc8); print_string(key_value_dac,0x88);显示设定的电压值,和测得的电压值 task_delay2 = TASK_DELAY2;1602在显示数据时会在数据最后乱码,后经在尾数写'/0',显示正确。任务三通过对键盘进行扫描,将设定的电压值,转换为数字量dac_value,同时还有步进加减和确定,清零的识别。void input_dac_value(num)uchar temp=0;static uchar flag=0;temp = num;if(temp=0xff) flag=1;if(temp != 0

13、xff) && (flag=1) flag=0; key = temp;fmq=0; if(key<10 && (key_input_display=1) press_time+; switch(press_time) case 2: dac_value=key*1000; break;case 3: dac_value=dac_value+key*100 ; break; case 4: dac_value=dac_value+key*10; break; case 5: dac_value=dac_value+key; break; default:

14、break; 注:将设定的电压转化为整数,放大一千倍switch(key) case 14: key_input_display=1; press_time+; key=0; fmq=0; break;/设置 case 13: key_input_display=0; press_time=0; fmq=0; break;/确认 case 15: dac_value=0;fmq=0; break;/清零 case 10:dac_value+=40;fmq=0; break;/递加 case 11: dac_value-=40;fmq=0; break;/递减 default: break; 主

15、要程序见附件(略)模拟部分电路仿真图电路说明图作品参数测试 设定值AD测量值万用表测量值列1AD测量得误差列2万用表测得误差1.0000.9410.9405.900%6.000%2.0001.9601.9602.000%2.000%2.9102.9012.9000.309%0.344%3.0002.9802.9800.667%0.667%3.7903.7603.7700.792%0.528%4.0004.0004.0000.000%0.000%5.0004.9414.9401.180%1.200%5.5505.5005.5000.901%0.901%6.0005.9415.9400.983%1.000%7.0006.9806.9900.286%0.143%8.0008.0008.0100.000%-0.125%8.9998.9418.9500.645%0.545%9.9999.9609.9800.390%0.190%纹波峰峰值10mV纹波频率50KHZ内阻2.2欧姆最大电流0.88A最大功率11.4W总结:这个作品的单片机部分的仿真和电路的焊接是在两天内完工的,模拟部分开始焊好了,测试时烧过,后来又从焊了一次。当时正是要要校级比赛的作品,我们的器件过来好久

温馨提示

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

评论

0/150

提交评论