
简介基于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再到AD2.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设为1AR1取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引脚兼容ADCADC0832双通道8位串行AD运算放大器LM324四运放做电压偏置变压器TRAN-1P2S模拟市电降压继电器RELAY选电平型驱动液晶LM016L16x2字符LCDProteus通用件按键BUTTON复位和阈值调节电位器POT-HG模拟电压/电流输入变化连线时注意几个细节单片机的晶振和复位电路必须画完整否则程序根本无法运行LCD的RW引脚直接接地不要接IO口ADC0832的CS接P1.0CLK接P1.1DI和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_CNT5配合主循环50ms周期相当于250ms确认时间这个值在工业分断标准里属于正常范围。想加快响应就改成3想更抗干扰就改成8。RELAY引脚在Protues里接一个型号为RELAY的电平型继电器低电平断开、高电平吸合。指示灯用P2^0区分是哪类保护触发实际产品可以三色LED分别表示过压、欠压、过流。3.2.3 LCD显示与按键设置阈值LCD用LM016L模型写一个最简并行驱动即可。RS接P2.4RW接地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就用0xFC1811.0592MHz要重新算初值。4. 从Proteus到AD原理图仿真直接生产板的四个坑4.1 仿真元件与实际封装的差异对照Proteus里跑通的逻辑到了AD原理图不能照抄而是功能等价、封装重画。仿真里的RELAY是理想模型实际继电器线圈要并联续流二极管LM016L是逻辑器件实际LCD1602要用16pin排针封装还要加背光限流电阻。功能模块Proteus仿真件AD原理图实际件必须补的电路单片机AT89C52STC89C52RC10uF10k复位、12MHz晶振、两颗20pF负载电容AD采样ADC0832ADC0832输入RC滤波、Vref加0.1uF去耦电容继电器RELAYSRD-05VDC-SL-C线圈并联1N4007组成续流回路供电变压器阻容降压7805整流保险丝、压敏电阻、泄放电阻LCDLM016LLCD1602对比度电位器、背光限流电阻建议把这张表当作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 PortERC直接报错。仿真图里电源符号是隐含的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过流负载电流超过5A250ms内脱扣LCD显示OVER I复位按复位键后继电器吸合指示灯熄灭LCD恢复正常显示阈值调节按键调整后阈值立即生效并能在LCD上回显每条验证配一幅仿真图截图再录一段对应操作视频代码、仿真、AD原理图和视频四个交付物就能一一对应起来。验收时直接按这条清单演示效率和说服力都远高于现场临时调参。本文还有配套的精品资源点击获取