简介:基于51单片机Proteus仿真的多功能断路器开发设计资料包,主要面向单片机初学者、电子类课程设计学生以及嵌入式项目开发者。资源围绕智能断路器展开,能够实现电流、电压、温度的实时检测,过压、欠压、过流、过热判断与报警控制,并通过LCD1602液晶屏显示相关参数,配合按键进行操作。压缩包共59个文件,约68.13MB,包含Keil工程源码(.c/.h/.hex及.uvproj)、Proteus仿真图(.dsn/.dbk)、AD原理图(.SchDoc)、元件清单、流程图与不同运行工况截图、演示视频等,便于从原理到仿真再到实物制作逐层对照。特别附带了简化的“偷懒”仿真方案,可绕开Proteus变压器仿真的常见报错,有效降低调试门槛。目前已有58人学习下载,适合参考其整体设计与代码结构,也可在此基础上扩展保护功能或移植到其他单片机平台。
1. 为什么「51单片机+Proteus仿真」做断路器是个正经工程
基于51单片机proteus仿真的多功能断路器开发设计,表面看是一套课程设计交付物,实际上是一条完整的「传感器采样—软件判据—执行机构」嵌入式闭环。断路器本身是强电设备,但加入51单片机后,过压、欠压、过流、漏电这些保护动作全部变成了可编程阈值比较,你可以在不接触220V的前提下,把整套逻辑在Protues里跑通,再迁移到AD原理图做实物。题目里带仿真图、源代码、AD原理图和视频,意味着每个开发阶段都有对应交付物。这套方案适合正在做51单片机课程设计、需要交仿真图和AD原理图的在校生,也适合想快速验证一个保护算法的硬件工程师。核心思路是先立判据,再谈电路,最后补生产文件。
2. 多功能断路器的功能拆解与元器件选型
2.1 先定功能边界:哪些算「多功能」
多功能断路器通常不是指一两个功能,而是把过压保护、欠压保护、过流保护、漏电保护,再加一个人机交互(液晶显示、按键调阈值)打包在一起。过压和欠压共用一条电压采样链,过流用电流互感器采样,漏电则依赖零序电流互感器,在Proteus里可以用交流电流源模拟零序电流。
| 保护类型 | 采样对象 | 判据 | 执行动作 | 建议器件 |
|---|---|---|---|---|
| 过压 | 电网电压 | 有效值高于阈值(如245V) | 继电器脱扣 | 变压器降压+运放调理 |
| 欠压 | 电网电压 | 有效值低于阈值(如180V) | 继电器脱扣 | 同上 |
| 过流 | 负载电流 | 电流有效值超阈值 | 继电器脱扣 | 电流互感器CT+采样电阻 |
| 漏电 | 零序电流 | 零序电流超过30mA | 继电器脱扣 | 零序电流互感器+硬件比较器 |
选型理由很简单:功能越多,传感器越多,AD通道不够就要加模拟开关。所以我一般会用ADC0832双通道,一路采电压、一路采电流,漏电保护单独用LM393硬件比较器去处理,不占单片机AD资源。这样51单片机只需要管三路判断。还要注意一个优先级问题:任何保护动作发生时,脱扣优先于显示和按键响应。漏电保护用硬件比较器直接闭锁继电器线圈回路,即使单片机死机,漏电也能跳闸,这种设计更接近真实产品,答辩时也更有说头。
2.2 信号链设计:从220V到0~5V再到AD
2.2.1 电压采样:不要直接把220V接进单片机
电压采样有两条路。一是电压互感器,二次侧输出小电压后经运放调理,适合真实产品;二是Proteus仿真里最常用的变压器降压,用一个220V/10V的隔离变压器把市电降下来,再用电阻分压和加法器把交流信号偏置到2.5V上下,变成ADC0832能采的单极性信号。注意ADC0832输入范围是0~5V,交流信号负半周如果直接进去,会被截掉一半,算出来的有效值完全不对。
实际做法是先把变压器二次侧电压经运放做加法电路,把-1V~+1V的交流整体抬高到1.5V~3.5V,再进ADC。这个偏置电压最好由TL431提供,温漂小。仿真里直接用POT-HG电位器模拟偏置也行,但做成实物后偏置漂移会导致阈值误动作,所以原理图阶段就要固定偏置源。
2.2.2 电流采样:CT二次侧不能开路
电流互感器二次侧不允许开路,这是铁律。二次绕组输出的是小电流,必须并联采样电阻转成电压。常见做法是选一台变比1000:1的穿心CT,二次侧并一个1Ω电阻,这样1A负载电流对应的就是1V电压。Proteus里可以用交流电流源加电阻模拟这个等效电路,I1设为1A,R1取1Ω,ADC读到的就是1V左右。
用交流电流源而不是交流电压源,是为了模拟CT的输出特性。仿真看的是波形形状和幅值关系,实际制作时二次侧还要加TVS管做限幅保护,防止大电流把AD输入端打坏。这个保护在原理图里一定要体现,ERC不会帮你查这个。
2.3 为什么用STC89C52RC而不是直接上STM32
断路器保护场景对采样率要求不高,电网频率50Hz,一个周波20ms,每1ms采样一次,20个点覆盖一个完整周期,算均方根误差能控制在1%左右,12MHz晶振下的51单片机完全跑得动。STM32的ADC和DMA更快,但在Proteus里STM32仿真模型不如51模型稳定,驱动LCD、继电器这类外设时反而要处理更多初始化问题。
再者,51单片机的Proteus生态非常成熟,AT89C52模型和STC89C52引脚兼容,仿真图、代码模板、参考设计非常多。这个题目既然写死了51单片机proteus仿真,就不要中途换主控,否则后面AD原理图、视频录制都要推倒重来。51的性能边界恰好卡在「够用但需要精打细算」的位置,这种约束对嵌入式入门反而是好事。
2.4 脱扣执行:继电器不自锁等于白做
保护判断之后要执行脱扣,Proteus里的继电器模型有脉冲型和电平型两种。如果选了脉冲型,单片机要给一个持续脉冲才能保持动作,代码逻辑要绕一下。电平型更直观,IO输出一个低电平就断开,输出高电平就吸合。
但断路器有一个人为特性:脱扣之后要保持断开状态,不能因为电压稍微恢复就自动吸合。代码里用一个trip_flag全局变量锁存动作,只有用户按下复位键才清除。这个自锁逻辑是在主循环里实现的,跟硬件自锁触点相比更灵活,也方便做成「过压跳闸」和「欠压跳闸」的区分提示。
3. 在Proteus里搭出仿真电路与C51代码
3.1 Proteus放置元件与连线要点
新建Proteus工程后,左侧工具栏点Component Mode,再点P键打开Pick Devices对话框,用表格里的关键字搜索并放置元件。搜索用关键字而不是全名,效率高很多。
| 元件 | 搜索关键字 | 说明 |
|---|---|---|
| 单片机 | AT89C52 | 与STC89C52引脚兼容 |
| ADC | ADC0832 | 双通道8位串行AD |
| 运算放大器 | LM324 | 四运放,做电压偏置 |
| 变压器 | TRAN-1P2S | 模拟市电降压 |
| 继电器 | RELAY | 选电平型驱动 |
| 液晶 | LM016L | 16x2字符LCD,Proteus通用件 |
| 按键 | BUTTON | 复位和阈值调节 |
| 电位器 | POT-HG | 模拟电压/电流输入变化 |
连线时注意几个细节:单片机的晶振和复位电路必须画完整,否则程序根本无法运行;LCD的RW引脚直接接地,不要接IO口;ADC0832的CS接P1.0,CLK接P1.1,DI和DO复用P1.2。时钟频率要在单片机属性里设置成12MHz,和Keil里的定时器初值匹配。
protues里还有一个常见问题:继电器线圈两端没有接续流二极管。仿真时看不到问题,但画AD原理图时如果漏掉,实物一上电就可能烧驱动管。仿真图里养成画二极管的习惯,迁移到原理图时就不容易丢。
3.2 Keil C51里写多功能保护逻辑
3.2.1 采样与均方根计算
主程序用定时器0做1ms中断,每1ms触发一次ADC采样,数组里累积20个点覆盖一个工频周波。采完后去掉2.5V偏置,计算均方根值,作为当前电压有效值。
// 定时器0中断:每1ms采样一次,积累20点算一次有效值 volatile unsigned int adc_buf[20]; volatile unsigned char sample_idx = 0; float vrms = 0.0; float load_current = 0.0; void timer0_isr(void) interrupt 1 { TH0 = 0xFC; // 12MHz晶振下,1ms定时初值 TL0 = 0x18; adc_buf[sample_idx] = adc0832_read(0); // 通道0采电压 sample_idx++; if (sample_idx >= 20) { unsigned long sum = 0; unsigned char i; for (i = 0; i < 20; i++) { int v = (int)adc_buf[i] - 128; // 减去2.5V偏置(128) sum += (unsigned long)(v * v); } vrms = sqrt((float)sum / 20.0); // 均方根运算 load_current = get_current_rms(); // 通道1电流按同样方式计算 sample_idx = 0; } }逻辑说明:ADC0832返回的是0~255的8位数据,2.5V偏置对应的数值大约128。把每个采样点减去128后再平方累加,最后开方,得到的就是去除直流偏置后的交流有效值数字量。注意v*v表达式,v是int型,两个int相乘可能溢出16位,所以要先转成unsigned long再累加。这是C51里最常见的整型溢出坑。
get_current_rms()是对通道1做同样滤波计算后返回的电流值,更新周期和电压保持同步,都是每20ms刷新一次。两个通道交替采样时,通道1会比通道0晚半拍,但20ms的延时对工频保护没有影响。
3.2.2 阈值比较与脱扣输出
拿到有效值后,主循环里做阈值比较。比较逻辑必须有防抖处理,不能采样到一次超限就跳闸,否则负载启动瞬间的电流尖峰很容易造成误动作。我一般设置连续5次采样都超标,才确认跳闸。
#define OVER_V 245.0 // 过压阈值 #define UNDER_V 180.0 // 欠压阈值 #define OVER_I 5.0 // 过流阈值 void main(void) { unsigned char over_cnt = 0, under_cnt = 0, overi_cnt = 0; unsigned char trip_flag = 0; init_timer0(); while (1) { if (vrms > OVER_V && ++over_cnt >= 5) { trip_flag = 1; // 过压脱扣 } else if (vrms < UNDER_V && ++under_cnt >= 5) { trip_flag = 1; // 欠压脱扣 } if (load_current > OVER_I && ++overi_cnt >= 5) { trip_flag = 1; // 过流脱扣 } if (trip_flag) { RELAY = 0; // 继电器断开 P2 |= 0x01; // 点亮过压指示灯 } else { RELAY = 1; over_cnt = under_cnt = overi_cnt = 0; } delay_ms(50); } }参数说明:OVER_V和UNDER_V的单位是数字域的均方根值,需要根据采样电路的变压比和分压比做标定,仿真里给220V输入,LCD显示220即可反推出比例系数。FILTER_CNT=5配合主循环50ms周期,相当于250ms确认时间,这个值在工业分断标准里属于正常范围。想加快响应就改成3,想更抗干扰就改成8。
RELAY引脚在Protues里接一个型号为RELAY的电平型继电器,低电平断开、高电平吸合。指示灯用P2^0区分是哪类保护触发,实际产品可以三色LED分别表示过压、欠压、过流。
3.2.3 LCD显示与按键设置阈值
LCD用LM016L模型,写一个最简并行驱动即可。RS接P2.4,RW接地,E接P2.5,数据口接P0。第一行显示实时电压电流,第二行显示阈值和状态。按键两个,一个调大阈值,一个调小阈值,第三个按键做手动复位。
按键处理要注意消抖。Proteus里按键按下是低电平,代码里要加while(!key)等待释放,不然一次按下会被当成多次触发。阈值写入EEPROM这块,仿真阶段可以跳过,做成实物后用STC的ISP下载工具直接改Flash参数更省事。
3.3 仿真联调:最小可运行路径
在Keil里勾选Output页的Create HEX File,编译生成hex文件。回到Proteus双击AT89C52芯片,在Program File属性里选择刚才生成的hex,点运行。先不接负载,看LCD能否正确显示电压值;然后拖动POT-HG电位器,模拟输入电压升高到超过阈值,大约250ms后继电器动作,负载灯熄灭,指示灯点亮。这就是最常见的跑通验证路径。
提示:Proteus里单片机晶振频率必须和Keil代码的定时器初值一致,否则采样周期偏了,算出来的有效值全部不对。12MHz就用0xFC18,11.0592MHz要重新算初值。
4. 从Proteus到AD原理图:仿真直接生产板的四个坑
4.1 仿真元件与实际封装的差异对照
Proteus里跑通的逻辑,到了AD原理图不能照抄,而是功能等价、封装重画。仿真里的RELAY是理想模型,实际继电器线圈要并联续流二极管;LM016L是逻辑器件,实际LCD1602要用16pin排针封装,还要加背光限流电阻。
| 功能模块 | Proteus仿真件 | AD原理图实际件 | 必须补的电路 |
|---|---|---|---|
| 单片机 | AT89C52 | STC89C52RC | 10uF+10k复位、12MHz晶振、两颗20pF负载电容 |
| AD采样 | ADC0832 | ADC0832 | 输入RC滤波、Vref加0.1uF去耦电容 |
| 继电器 | RELAY | SRD-05VDC-SL-C | 线圈并联1N4007,组成续流回路 |
| 供电 | 变压器 | 阻容降压+7805整流 | 保险丝、压敏电阻、泄放电阻 |
| LCD | LM016L | LCD1602 | 对比度电位器、背光限流电阻 |
建议把这张表当作AD原理图设计的Checklist,每画完一个模块核对一次。不要指望Proteus图纸能直接转成AD格式,反而重新画SCH更快,画完跑一遍ERC。
4.2 AD原理图的电源与驱动部分设计
4.2.1 电源部分:阻容降压的前提
很多课设用阻容降压给单片机供电,优点是省变压器,缺点是整个电路带电,跟Proteus里变压器隔离完全是两码事。AD原理图里必须在火线入口放保险丝和压敏电阻,阻容降压电容选择0.68uF/400V的CBB电容,并联一颗1MΩ泄放电阻,断电后把残余电荷放掉。
+5V由7805稳压输出,需要加输入输出滤波电容和散热焊盘。仿真里没有电源损耗这些概念,但做成实物后7805在最坏情况下发烫严重,PCB上要给铜皮加大面积铺铜散热。
4.2.2 继电器驱动:ULN2003和三级管的取舍
只驱动一个继电器,NPN三极管加基极电阻就够了。但多功能断路器至少两路保护输出,我建议直接用ULN2003,集电极开路输出,内部自带续流二极管,一个芯片能带七路负载,外围极其干净。
AD原理图里,把单片机输出口通过网络标号连到ULN2003输入脚,输出脚接继电器线圈一端,线圈另一端接12V,就能正常动作。注意ULN2003输入端的下拉电阻不能省,否则单片机上电瞬间IO口悬空可能导致继电器误动作。
4.2.3 原理图检查:ERC要过零Error
在AD里执行Project → Compile Document,运行电气规则检查。常见的Error是电源端口未连接、网络标号悬空、输出引脚接到电源等。用网络标号连接看起来简洁,但电源和地如果忘记放Power Port,ERC直接报错。仿真图里电源符号是隐含的,AD里每一路电源都要显式画出来。
另一个坑是AD检查原理图有没有连上:ERC只会检测连接关系,不会检测电路逻辑,比如运放正反相输入端接反,ERC一道错误都不会报。所以画完原理图后要逐模块对着仿真图核一遍功能,不要被ERC的零错误麻痹。
4.3 视频录制和交付物顺序
视频录制顺序和开发顺序一致:先展示Proteus仿真运行,拖动电位器让电压超限,看继电器动作和LCD变化;再展示Keil工程结构和关键函数,讲解采样、防抖、跳闸三段逻辑;最后展示AD原理图按模块截图。录屏分辨率至少1080p,代码窗口字号放大,不然评审时根本看不清。
5. 调试顺序:先仿真过逻辑,再经AD改板
5.1 仿真跑不起来时先查这三个点
检查点一:单片机有没有跑起来。在Proteus里放一个LED接在P1.0,先跑一个点灯程序。如果不亮,查晶振频率、复位电路、hex文件路径三个地方,顺序不能乱。
检查点二:ADC0832采到的数是否稳定。用LCD直接打印adc_buf数组的值,给通道一个固定2.5V偏置,看数值是否稳定在128附近。如果波动超过±5,重点查CLK时序和DI/DO方向切换。ADC0832的读函数是SPI时序,很多仿真问题都出在时钟沿采样判断上。
检查点三:继电器为什么乱跳。先把ADC判断跳过,给vrms强制赋一个220V对应的数值,看继电器是否稳定闭合。如果还乱跳,检查继电器模型是电平型还是脉冲型,电平型直接驱动,脉冲型要加锁存逻辑。
这三个检查点按顺序执行,90%的仿真问题都能定位。关键词是「先最小化再集成」,不要一上来就烧整份多功能程序,先跑LED,再跑AD,最后跑继电器,一步步合起来。
5.2 从仿真到实物的参数换算
仿真里可以靠电位器手动调节模拟量,但实物里220V交流经过降压、偏置、AD采样,得到的数值必须通过标定换算成真实电压。方法是给已知电压输入,读取LCD显示的均方根数字量,反推出比例系数。这个系数受AD参考电压、分压电阻精度、运放失调电压共同影响,不能照搬仿真值。
做实物时要对偏置电路做单独校准,把输入接地时ADC读数调整到128附近。否则偏置漂移会导致过压和欠压阈值同时偏移,表现就是断路器在正常电压下频繁跳闸,这是调板时最容易误判为程序bug的情况。
5.3 判断「动作正确」的量化验证
调试完毕,把结果量化成几条验收标准:
- 过压:输入电压调到245V以上,250ms内继电器脱扣,LCD显示OVER U
- 欠压:降到180V以下,250ms内脱扣,LCD显示UNDER U
- 过流:负载电流超过5A,250ms内脱扣,LCD显示OVER I
- 复位:按复位键后继电器吸合,指示灯熄灭,LCD恢复正常显示
- 阈值调节:按键调整后阈值立即生效,并能在LCD上回显
每条验证配一幅仿真图截图,再录一段对应操作视频,代码、仿真、AD原理图和视频四个交付物就能一一对应起来。验收时直接按这条清单演示,效率和说服力都远高于现场临时调参。
本文还有配套的精品资源,点击获取