当前位置: 首页 新闻详细

利用c51单片机科学计算器设计与实现|基于c51单片机的智能温度控制系统设计与实现(含代码)

专业小程序设计开发——助力新电商新零售

电话+V:159999-78052,欢迎咨询利用c51单片机科学计算器设计与实现,[小程序设计与开发],[小程序投流与推广],[小程序后台搭建],[小程序整套源码打包],[为个体及小微企业助力],[电商新零售模式],[小程序运营推广及维护]

一、2023年电赛A题国奖开源分享

单相逆变器并联运行系统设计摘要

设计目标为制作一款满足基本要求与发挥部分的单相逆变器并联运行系统。核心板为CW32F030C8T6,包含直流电源、隔离变压器、全桥逆变电路、采集电路、驱动电路、LC低通滤波电路和辅助电源。系统通过Cortex?-M0+内核的CW32芯片进行控制,确保输出电压、频率和电流的稳定。PID算法用于电流、电压闭环控制,实现逆变器稳流、稳压。系统离网状态下输出电压为24±0.2V,频率为50±0.2Hz,输出电流有效值为2A。在并联运行模式下,输出电压为24V,频率为50Hz时,输出电流可达4A。在负载调整率、THD和效率等方面,系统表现优异。

设计原理与硬件架构

系统基于全桥逆变电路实现直流变交流,利用DQ锁相环进行相位追踪,生成双极性SPWM波对逆变电路调制,产生正弦交流电。PID算法实现电流、电压闭环控制,保证输出稳定。系统包括辅助电源、单片机、全桥逆变电路、采集电路、驱动电路和LC滤波电路。设计采用CW32F030C8T6作为控制核心,集成了主频高达64MHz的ARM?Cortex?-M0+内核,支持多种通信接口、高速ADC、定时器和PWM定时器,满足设计需求。

控制策略与实现

采用C51单片机进行比较,发现其处理能力有限,不适用于复杂计算和大规模数据处理。对比CW32F030C8T6,其性能更优,故选择作为主控MCU。针对逆变电路,半桥、推挽式和全桥方案进行比较,全桥逆变电路输出电压等于直流电压,效率更高,因此选择全桥方案。互感器方案因具备隔离功能、结构简单和安全性高,被选作电流采集电路。

理论分析与计算

提升逆变器效率的策略包括适当减小MOSFET的开关频率、采用导通内阻小的MOSFET以及合理设置LC滤波器的截止频率。并联运行模式控制策略为将逆变器1视为恒压源,逆变器2视为恒流源,通过dq锁相环实现相位追踪。并网控制采用主从控制方法,逆变器1为主,逆变器2为从,通过键盘输入控制输出电流Io。

系统硬件与软件

逆变器主电路设计采用全桥结构,通过SPWM波控制上下管的交替导通。使用单片机内部比较器产生SPWM波形,IR2104驱动全桥逆变电路工作。电流采样电路采用INA282+电流互感器,放大50倍并抬升1.65V。系统使用CW32F030C8T6作为主控芯片,实现PID闭环控制,产生SPWM波。

测试方案与结果

测试环境包括功率分析仪、直流稳压电源、万用表和大功率可变瓷管线绕滑动变阻器等。通过测量输出电流、电压和频率,计算逆变器效率,分析负载调整率。测试结果满足基本要求和发挥部分的设定指标。

系统代码与开源链接

系统代码可在线访问,具体链接请参阅官方文档。详细设计与测试结果请参考视频演示。

参赛经验与总结

二、李月香山西大学教授

山西大学计算机科学系有一位资深的女性学者,她的名字是李月香,出生于1958年12月。她目前担任副教授,并且是硕士生导师,对嵌入式系统及单片机领域有着深厚的造诣。作为山西省嵌入式系统及单片机协会的常务理事,她的学术影响力不容小觑。


1982年,李月香以优异的成绩毕业于山西大学物理系光电子专业,获得理学士学位。之后,她在1990年7月在山西大学计算机科学系完成了硕士研究生主要课程班的学习。2000年9月至2001年7月,她作为高级访问学者,前往清华大学自动化系的嵌入式系统及微控制器研究培训中心进行深造,主要参与了“智能仪器仪表开发”的合作研究。


李月香教授的研究方向集中在嵌入式系统及其智能检测控制的理论与实际应用上。她的研究成果丰富,发表了一系列论文,其中包括:



  • 1997年,《微计算机应用》上刊载了她的论文“李月香,马忠梅,打印机模式转换卡的设计与实现”,探讨了相关技术的实现细节。

  • 1997年,《微计算机应用》中,她与马忠梅合作的“单片机内部资源的C语言编程”一文,展示了C语言在单片机编程中的应用。

  • 1998年,《微计算机应用》上,他们再次合作,发表了“用C51高级语言实现8051单片机的通讯”一文,展示了C51语言在单片机通信中的应用。

  • 2001年,《计算机学报》发表了由梁吉业、徐仲伯和李月香合作的“包含度与粗糙集数据分析中的度量”一文,探讨了数据分析中的度量方法。

  • 而在2001年的国际会议“嵌入式系统”上,X.W.Chen、T.Yuan和Y.X.Li(即李月香)共同撰写的“基于概率统计和FFT的检测与分离方法研究”论文引起了广泛关注,展示了他们在该领域的前沿研究成果。




  • 扩展资料

    康广仁(1867—1898)广东南海人。康有为胞弟。曾在浙江任小吏,因不满官场腐败而弃职。后协助康有为从事变法维新活动。

    基于c51单片机的智能温度控制系统设计与实现(含代码)

    2023-11-28 18:30·嵌入式xff大家好,今天给大家介绍基于c51单片机的智能温度控制系统设计与实现,文章末尾附有本毕业设计的论文和源码的获取方式,可直接进群免费领取。

    前言本设计采用AT89C51单片机为控制芯片,硬件上用dsb18202做温度采集(有需要也可以采用dht11温湿度模块)直流电机作为降温风扇,用户可通过按键来控制转速的大小,用继电器来控制电阻丝提高温度。用lcd1602显示屏来显示环境温度并且通过按键来设置模式与最高温和最低温。

    实验现象:首先它能显示环境的温度并能设置上下限阀值,这是最基本的功能,系统上电的时候显示的是当前环境温度和设定的温度阀值,我们可以通过按键来修改温度上下限阀值。我们看,按下这个K1键会进入温度阀值设置界面,每按一下,切换一次阀值设置(上下阀值)界面,按第3次时,会自动回到主界面,如此循环。


    在进入温度阀值设计界面时,可以通过K2、K3键对阀值进行加减,这里我们只对温度整数部分进行设置,小数部分我们就不需要了,将设置好的上下限阀值保存到AT24C02(EEPROM)内,当下一次开启系统时只需从AT24C02内读取保存的阀值数据,而不需要重复设置上下限阀值。这样的话,我们用3个按键就实现了温度上下限阀值的设定,这是温度检测控制系统基本的功能。假如我们把温度上限设置为32°C,下限设置为30°C。


    另外还有恒定温度的功能。当设定好上下限阀值时,系统即会把当前的温度与设定的上下限阀值对比,如果高于上限温度,开启散热进行降温,同时报警;如果低于下限温度,开启加热,同时报警;如果当前温度处于下限和上限温度之间时,关闭散热、加热及报警。从而可将温度控制在阀值的范围内。

    仿真图展示:

    温度高于设定值,风扇反转,警报开启

    温度低于设定值,加温开启并发出警报

    核心代码展示:ds18b20的测温原理

    DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。DS18B20测温原理如图3所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号发送给计数器1。高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为计数器2的脉冲输入。

    计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。


    lcd1602工作原理

    点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成。显示屏上64×16个显示单元与显示RAM区的1024字节相对应,每一字节的内容与显示屏上相应位置的亮暗对应。

    例如显示屏第一行的亮暗由RAM区的000H~00FH的16字节的内容决定,当(000H)=FFH时,屏幕左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,屏幕右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H…,(00EH)=00H,(00FH)=00H时,在屏幕的顶部显示一条由8条亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。


    ds18b20初始化

    #include"temp.h"voidDelay1ms(unsignedinty){unsignedintx;for(y;y>0;y--)for(x=110;x>0;x--);}unsignedcharDs18b20Init()//初始化{unsignedinti;DSPORT=0;//将总线拉低480us~960usi=70;while(i--);//延时642usDSPORT=1;//然后拉高总线,如果DS18B20做出反应会将在15us~60us后总线拉低i=0;while(DSPORT)//等待DS18B20拉低总线{i++;if(i>5000)//等待>5MSreturn0;//初始化失败}return1;//初始化成功}voidDs18b20WriteByte(unsignedchardat)//写入一字节{unsignedinti,j;for(j=0;j<8;j++){DSPORT=0;//每写入一位数据之前先把总线拉低1usi++;DSPORT=dat0x01;//然后写入一个数据,从最低位开始i=6;while(i--);//延时68us,持续时间最少60usDSPORT=1;//然后释放总线,至少1us给总线恢复时间才能接着写入第二个数值dat>>=1;}}unsignedcharDs18b20ReadByte()//读取字节{unsignedcharbyte,bi;unsignedinti,j;for(j=8;j>0;j--){DSPORT=0;//先将总线拉低1usi++;DSPORT=1;//然后释放总线i++;i++;//延时6us等待数据稳定bi=DSPORT;//读取数据,从最低位开始读取/*将byte左移一位,然后与上右移7位后的bi,注意移动之后移掉那位补0。*/byte=(byte>>1)|(bi<<7);i=4;//读取完之后等待48us再接着读取下一个数while(i--);}returnbyte;}voidDs18b20ChangTemp(){Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc);//跳过ROM操作命令Ds18b20WriteByte(0x44);//温度转换命令//Delay1ms(100);//等待转换成功,而如果你是一直刷着的话,就不用这个延时了}voidDs18b20ReadTempCom(){Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc);//跳过ROM操作命令Ds18b20WriteByte(0xbe);//发送读取温度命令}shortDs18b20ReadTemp(){unsignedchartemp=0;unsignedchartmh,tml;shorttem;Ds18b20ChangTemp();//先写入转换命令Ds18b20ReadTempCom();//然后等待转换完后发送读取温度命令tml=Ds18b20ReadByte();//读取温度值共16位,先读低字节tmh=Ds18b20ReadByte();//再读高字节if(tmh>7){tmh=~tmh;tml=~tml;temp=0;//温度为负}else{temp=1;//温度为正}tem=tmh;//获得高八位tem<<=8;tem|=tml;//获得底八位tem=(double)tem*0.625;//转换放大10倍精度0.1if(temp)returntem;//返回温度值elsereturn-tem;}完整代码可进群免费领取!!!

    嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。点击下方链接,0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!

    点击这里找小助理0元领取:扫码进群领资料


    【WINDRISES MINIPROGRAM PROMOTION】尊享直接对接老板

    电话+V: 159999-78052

    专注于小程序推广配套流程服务方案。为企业及个人客户提供了高性价比的运营方案,解决小微企业和个体拓展客户的问题

    利用c51单片机科学计算器设计与实现
    发布人:x910111 发布时间:2024-12-08