STM32设计电流与温度监控python上位机监控平台设计
目录
前言
一、本设计主要实现哪些很“开门”功能?
二、电路设计原理图
电路图采用Altium Designer进行设计:
三、实物设计图
四、程序源代码设计
五、获取资料内容
前言
在现代工业自动化和智能设备管理中,对电流和温度的实时监控是至关重要的。电流和温度作为反映设备运行状态的关键参数,其稳定性和安全性直接关系到整个系统的可靠性和效率。为了确保设备的正常运行,及时发现并解决潜在问题,设计一个高效的电流与温度监控系统显得尤为重要。
然而,仅有单片机采集的数据是远远不够的,我们还需要一个能够接收、处理和展示这些数据的上位机监控平台。Python,作为一种高级编程语言,以其简洁的语法、丰富的库和强大的功能,成为开发上位机监控平台的优选工具。。
本文将详细介绍一个基于单片机和Python的上位机监控平台的设计和实现过程。该平台将采用单片机作为数据采集的核心,通过传感器实时获取电流和温度数据,并将这些数据通过串口或其他通信协议传输给上位机。上位机则使用Python进行开发,负责接收数据、处理数据、展示数据和触发报警。
本设计旨在提供一个稳定、可靠、易于使用的电流与温度监控系统,为设备的维护和管理提供便捷的工具。通过该平台,用户可以实时查看设备的电流和温度情况,及时发现异常情况并采取相应措施,从而确保设备的正常运行和延长使用寿命。
接下来,本文将详细介绍该监控平台的硬件设计、软件实现以及具体的功能展示,为读者提供一个全面的设计和实现方案。
一、本设计主要实现哪些很“开门”功能?
1)精密电流uA级别检测功能,实时检测存储
2)实时温控检测,采用卡尔曼滤波实现温度误差便宜
3)同讯上位机采用自制的485USB模块,加上抗静电与EMC保护电路
4)采用加密协议进行传输至上位机
5)python上位机绘制的QT界面,实现全方面数据检测
6)具备后台log数据日志存储
二、电路设计原理图
电路图采用Altium Designer进行设计:
1、通过STM32F103C8T6单片机作为系统主控,最小系统电路是整个电路的核心。
2、高精密电流检测运放电路,ADC模拟接口与单片机进行连接
3、 使用485转USB模块连接上位机,模块与单片机使用485接口连接
4、通过DS18B20进行温度监控
5、使用卡尔曼滤波算法,程序内部运行
6、通过防静电电路设置,模块与单片机使用数据总线控制连接稳妥
三、实物设计图
四、程序源代码设计
int main(void)
{
u8 rs485buf[22] = {0X00};
u8 num = 0;
u16 t=0,t2=0,t3=0,t4=0,t5=0,I = 0,I2 = 0,I3 = 0,I4 = 0,I5 = 0;
short temperature,temperature2,temperature3,temperature4,temperature5;
float temp = 0,temp2 = 0,temp3 = 0,temp4 = 0,temp5 = 0;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
uart_init(9600);
RS485_Init(9600); //初始化RS485
Adc_Init();
Adc_Init2();
TIM2_Int_Init(4999,7199);//计时500ms
// TIM3_Int_Init(9999,7199);//1s计时
while(1)
{
if(num == 20)
{
num = 0;
t = t/20;
temp = (float)t*33/16384;I = temp*100000;rs485buf[11] = I>>8; rs485buf[12] = I;
t2 = t2/20;
temp2 = (float)t2*33/16384;I2 = temp2*100000;rs485buf[13] = I2>>8; rs485buf[14] = I2;
RS485_Send_Data(rs485buf,22);//发送5个字节
}
if(fla_con)
{
fla_con = 0;
temperature=DS18B20_Get_Temp(); rs485buf[1] = temperature>>8; rs485buf[2] = temperature;
adcx1=Get_Adc_Average(ADC_Channel_2,1);
temperature2=DS18B20_Get_Temp2();rs485buf[3] = temperature2>>8; rs485buf[4] = temperature2;
adcx2=Get_Adc_Average(ADC_Channel_3,1);
temperature3=DS18B20_Get_Temp3();rs485buf[5] = temperature3>>8; rs485buf[6] = temperature3;
adcx3=Get_Adc_Average2(ADC_Channel_4,1);
}}
五、获取资料内容
资料获取
链接:https://pan.baidu.com/s/1hv8MSqt4AmWzFdYzM_D7Eg
提取码:u2n9