恒流部分使用了Gandf大侠的PWM模拟DAC方案,在此表示感谢。这种方案虽然不如使用DAC芯片转换迅速,但成本低廉,分辨率也可以做的比较高,对于diy而言已经足够了。主控芯片使用的是最新的STC8A8K64S4A12-LQFP44,带12位ADC,用于检测电压电流很方便。
其实原理很简单,其关键在于程序的编写,网上关于Gandf大侠的电子负载很少开源程序,我在这里开源的程序可以供大家参考,其中LCD2004的驱动程序来自blog.csdn.net/yagnruinihao/article/details/19999551,在此表示感谢!
这其实只是最基础的功能实现,还有许许多多可以改进的地方,比如增加散热风扇,散热器温度检测,蜂鸣器,改差分四线测量等等,但我精力有限,没有时间弄了,所以开源出来大家可以参考着进行改进。
制作出来的实物图如下:
单片机源程序如下:
/*!* COPYRIGHT NOTICE * Copyright (c) 2018,CQ * All rights reserved. * * * * * @file main.c * @brief * @author CQ * @version V1.1 * @date 2018-11-4 * latest amendment time:2018.12.2 */ #include"STC8A.h" #include"LCD2004.h" #include"config.h" #include <intrins.h> void main(void) { GPIOInit(); lcd2004Init(); TimerInit(); PWMInit(); lcd2004CleanAll(); ADCInit(); lcd2004AddressWriteString(0,0,Menu.NormalInterface.Line[0]); lcd2004AddressWriteString(1,0,Menu.NormalInterface.Line[1]); lcd2004AddressWriteString(2,0,Menu.NormalInterface.Line[2]); lcd2004AddressWriteString(3,0,Menu.NormalInterface.Line[3]); lcd2004AddressWriteByte(2,19,0xF4) ;//display Ohm symbol /* if(MenuDataTable.SysInfo.LoadState==Running) { lcd2004AddressWriteString(3,16,"ON"); } else { lcd2004AddressWriteString(3,16,"OFF"); }*/ EA=1; if(IapRead(IAPUSEDFLAG)==0x56)//check whether there is some data in eeprom { MenuDataTable.Current.Coefficient=IapReadF32(CURRENTCOEADDR); MenuDataTable.Voltage.Coefficient=IapReadF32(VOLTAGECOEADDR); MenuDataTable.SysInfo.PWMCoe=IapReadF32(PWMCOEADDR); } while(1) { ; } }
复制代码