当前位置:首页 > 基于STC单片机的数控恒压源的设计
PCB图如下图所示
按照PCB图将元件焊接至铜板上,焊接时注意是否虚焊。
5.2调试
准备就绪后,将变压器通电,开始进行测试,检测它们是否达到设计要求。检查的项目包括输出电压范围,在整个输出电压范围内的步进调整值,输出电压与预置电压是否匹配和数字电压表功能的精准度。数控电源系统的供电由直流稳压电源提供,由硬件电路的正负15V电源,5V电源提供。
排除故障:在测试调试的过程中要排除障碍,刚开始液显不能正常工作,检查是否上电,调节电位器,看背光灯是否变化,没有变化则应检查单片机的输出口是否与液显正确连接,用万用表排查虚焊。当检查硬件没有问题之后,再进行测试,当还是无法达到要求工作时,那么就是程序问题。根据流程图修改程序,在KEIL软件中编译无错后再下载至再次进行调试检测。
5.2.1电压测试: 预置电压值/v 0.1 0.5 1.2 1.8 2.0 2.4 2.9 3.3 4.6 5.1 6.7 显示电压值/v 0.1 0.5 1.2 1.8 2.0 2.4 2.9 3.3 4.6 5.1 6.7 监测电压值/v 0.11 0.52 1.19 1.82 2.01 2.43 2.90 3.32 4.62 5.11 6.73 绝对误差/% 0.01 0.02 0.01 0.02 0.01 0.03 0.00 0.02 0.02 0.01 0.03 相对误差/% 10.00 40.00 0.83 1.11 0.50 1.25 0.00 0.61 0.43 0.20 0.45 7.0 8.2 9.3 9.9 5.2电压表测试:
被测电压/v 0.9 1.4 1.7 2.1 2.5 3.3 3.7 4.5 5.0 7.0 8.2 9.3 9.9 7.01 8.23 9.31 10.0 0.01 0.03 0.01 0.01 0.14 0.37 0.11 0.10 实际测量值/v 0.92 1.41 1.70 2.30 2.50 3.31 3.68 4.52 5.00 绝对误差/% 0.02 0.01 0.00 0.20 0.00 0.01 0.02 0.02 0.00 相对误差/% 2.22 0.71 0.00 9.52 0.00 0.30 0.54 0.44 0.00 以上为电压测试结果,由于PWM的分辨率为0.2,所以其误差范围可以限制在0~0.2V左右,在这个范围内产生误差是允许的。因此监测电压与输出电压基本一致。因为PWM输出为八位,分辨率=PWM占空比/250,那么当站空比值变化1时,其电压变化为0.02V,后运放将电压放大变化0.04v。所以可达到电压变化精度为0.04V。
用单片机控制电源时,输出直流0-10V,液晶显示器显示清晰正确,误差极小,完美的实现了数控恒压源这一课题。
5.3 设计心得:
(1)、设计程序之前,务必要对所用单片机的内部结构有一个系统的了解,知道该单片机
片内有哪些资源。 (2)、设计程序采用什么编程语言并不是非常重要,关键要有一个清晰的思路和一个完整的软件流程图。
(3)、在设计程序时,不能妄想一次就将整个程序设计好,\反复修改,不断改进\是程序设计的必经之路。
(4)、要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便。
(5)、在设计程序过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。
结束语
本文主要运用STC12C5410AD单片机的内部资源,利用PWM输出模拟DA输出,AD采样通道对电压进行采样。由于电压输出只能是0~5v,所以电压输出端加运放给予放大得到所需幅值的电压。在软件设计方面,在按键发生动作时,对输出电压进行调整,当按键不发生动作时,作为数字电压表进行使用。功能上还不够完善,如没有电流过流时的报警指示功能等等,还可以运用INA126和74LS14构成电流保护电路,进一步得到提高。
附录I
附录II
#include
uchar a,b,c,d,key,keyvalue,sel_flag,push_val,zt_flag; unsigned int temp,temp1; unsigned int j;
unsigned char m,mss_cnt;
unsigned char ADC_Channel_3_Result_bak,ychi;
unsigned char ADC_Power_On_Speed_Channel_2 =0xe2 ;//P1.2作为A/D输入 unsigned char ADC_Power_On_Speed_Channel_3 =0xe3 ;//P1.3作为A/D输入 unsigned char ADC_Channel_2_Result; unsigned char ADC_Channel_3_Result;
uchar code table0[]=\
uchar code table2[]=\
//****************lcd显示****************************************************** sbit rs=P3^0; sbit rw=P3^1; sbit e =P3^2;
void delay(unsigned char x) {
unsigned char a,b; for(a=x;a!=0;a--) for(b=20;b!=0;b--); }
void writecomm(uchar comm) {
P2=comm; rs=0; rw=0; e=0; delay(500); e=1; delay(500); e=0; }
void writedat(uchar dat) { P2=dat; rs=1; rw=0; e=0;
delay(500);
共分享92篇相关文档