以C8051FF330D单片机为控制核心的可编程恒流源控制器设计
2024-01-12 来源:elecfans
引言
在飞速发展的电子和电信技术系统中, 电源的优劣在一定程度上决定着电信设备的性能和寿命。因此, 人们对程控恒流器件的需求也日益迫切。虽然目前市场上的数控恒压技术已经比较成熟, 数控电压源产品也已朝着智能化和小型化的趋势发展, 且价格也越来越便宜。但是, 在恒流源方面, 尤其是数字控制的恒流技术则由于起步较晚, 高性能的数控恒流器件的开发和应用存在着巨大的发展空间。为此, 本文以C8051FF330D单片机为控制核心, 并利用C8051FF330D的I2C串行总线扩展外围器件, 同时以模块化设计方法,设计了一种程控恒流源。而且整个电源还具有功耗低、体积小, 电流纹波小、控制精度高和运行稳定等特点。
1 系统总体结构
该程控恒流源设计主要采用C8051FF330D单片机内部的10位电流型数模转换器和电流/电压转换电路来输出0~4 V的模拟量, 然后用这个电压信号来控制恒流源的输出电流, 以使其按照给定值变化。由于本系统扩展了I2C串行总线接口,以及以ZLG7290为核心的键盘和LED数码管显示器电路, 因而可用键盘进行电流值和时间间隔的设定, 其电流值设定范围为0~10 A, 时间间隔为0~10小时。另外, 系统还具有掉电保护功能, 故当其恢复用电后, 可使电流源从断点处恢复运行。
图1所示是本系统的硬件组成结构。其中,时钟电路采用外部晶体振荡器来提高时钟精度,JTAG接口电路则为系统提供全速、非侵入式的在线系统调试接口, 而外部复位电路可用于强制MCU进入复位状态。
图1 系统硬件组成结构图
2 硬件电路设计
2.1 模拟量输出接口电路
C8051F330D内部有一个10位电流型的D/A转换器IDA0, 它的最大输出电流具有0.5 mA、1 mA和2 mA三种不同的设置。同时, IDA0还具有灵活的输出更新机制, 并允许无缝满度变化, 可支持无抖动波形更新。IDA0的三种更新方式分别为写IDA0H、定时器溢出和外部引脚边沿出发。本设计采用P1.0输出, 并采用定时器溢出的更新方式。
C8051F330D内部电路中的数模转换器输出的0~1 mA电流信号通过基准电阻转换为0~2 V的电压信号后, 再经过放大电路转换为0~4 V的标准信号输出。其模拟量输出信号转换电路如图2所示。
图2 模拟量输出信号转换电路
2.2 掉电保护电路
在电信和其他通信系统中, 如果设备断电,将给系统造成巨大损失, 甚至可能使系统瘫痪。
为了避免系统掉电情况的发生, 本设计采用FM24CL04作为非易失存储器来保护系统参数及其它中间数据。与EEPROM不同, FM24CL04可以以总线速度进行写操作, 它使用的是工业标准两线I2C接口, 图3所示是本电源系统附带的掉电数据保护电路。
图3 掉电数据保护电路
由于FM24CL04存储器的写入速度极快, 因此, 在一个高噪声的通信环境中, 它受到干扰的可能性很小。此外, FM24CL04使用二线制串行总线及握手协议来进行双向传输, 由于这种方式占用的引脚少, 因此, 系统线路板占用的空间也比较小。
2.3 键盘及显示电路
本系统配置有4位键盘和8位LED数码管显示电路, 以用于显示编程数据和参数。键盘显示器接口电路采用广州周立功单片机发展有限公司的专用芯片ZLG7290B数码管显示驱动和键盘管理芯片。该芯片能够直接驱动8位共阴式数码管或者64位独立的LED, 同时, 也可以扫描和管理64位按键。本电路将ZLG7290B通过I2C总线与单片机进行连接, 仅需要两根信号线即可传递数据。
同时, 采用ZLG7290B专用芯片还可以简化电路和程序, 减轻电路的调试负担。而且, 作为工业级显示驱动芯片, ZLG7290B也具有较强的抗干扰能力。图4 所示是由C8051F330D 单片机和ZLG7290B专用显示驱动芯片组成的键盘及显示驱动电路原理图。
图4 键盘显示驱动电路
一般情况下, 在设计时, 为了使电源更加稳定, 可在图4电路的VCC和GND之间接入电解电容。由于电路中的数码管在工作时要消耗较大的电流, 因此, 其限流电阻的典型值可取的更大一些。另外, 由于数码管扫描和键盘扫描线共用,因此, 本电路采用二极管来防止按键对数码管显示的干扰。
3 软件设计
3.1 主程序设计
本系统采用C语言来进行软件设计, 以实现系统的各项功能。系统应用程序采用模块化结构设计, 主要包括主程序、参数调用修改子程序、DAC0初始化程序等。图5所示是其主程序流程图。
图5 主程序流程图
3.2 模块函数程序设计
模块函数程序主要是为结构化模块设计定义一些函数, 如各定时器的初始化函数、SMBUS初始化及处理函数、DAC0的初始化和处理函数,另外, 也包括往铁电存储器中写入字节的函数和从目标地址读取数据等函数。其中DAC0的初始化程序代码如下:
Void DAC_Init (void)
{
REF0CN =0X30; /*内部偏压发生器和电压基准缓冲器工作, 基准从VREF脚输出*、
ID0CB =0XF2;
}
存储器写入函数如下:
Viod EEPROM_ByteWrite ( uchar i2caddr,uchar addr, uchar dat )
{
While (smb_busy)
Smb_busy = 1;
Target = i2caddr;
Smb_w =write;
Smb_sendwordaddr = 1;
Smb_randomread = 0;
Smb_ackpoll =1;
Word_addr = addr;
Smb_singlebyte_out = dat;
Psmb_data_out =&smb_singlebyte_out;
Smb_data_len =1;
Sta = 1;
}
……
4 结束语
本文给出了用C8051FF330D的内部电流型D/A转换器和电流/电压转换电路来设计可编程恒流源控制器的设计方法。由于C8051F330D单片机的运算速度比普通单片机要快, 而且功耗比较低, 同时内置有DAC和ADC, 由此可在电子产品开发过程中减小产品体积, 降低硬件连线的复杂程度。实验证明, 本设计的程控电流源具有输出电流稳定准确等特点, 而且电流随负载和环境温度变化小, 输出电流误差范围为±5 mA, 同时其输出电流也较大, 是一款价格低廉, 性能稳定,操作简单的实用性通信电流源。