基于STM32F103单片机的直流电压电流检测仪原理图PCB设计

该博客介绍了使用STM32F103C8T6单片机为核心,结合ACS712电流检测模块和电压采集电路,设计的一款能检测15V内电压和5A内直流电流的检测仪。系统功能包括精确显示电压、电流,并通过LCD1602液晶屏显示,还配备了假负载电阻用于检测。在实际操作中,外部检测时需移除功率负载电阻。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文:http://www.jh-tec.cn/archives/8275

系统功能设计

本系统由STM32F103C8T6单片机核心板、ACS712电流检测模块、电压采集、LCD1602液晶及电源组成。
1、通过单片机检测电压(15V内)和直流电流(5A内),并在1602液晶上显示。
2、电压和电流的显示最小单位0.1V,0.1A。功率=电压*电流。
3、通过大功率电阻作为假负载产生电流以备检测。
4、如果检测外部电压或者电流大小,一定要将功率负载电阻去掉。

在这里插入图片描述

STM32F103C8T6单片机核心板:
USB供电接口,复位按键 开关按键
在这里插入图片描述
合理优秀的布局布线:
在这里插入图片描述
主程序

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "adc.h"
#include <stdio.h>
#include "timer.h"
#include "lcd1602.h"

unsigned char relayFlag=1;//中间变量


char dis0[16];//显示
char dis1[16];

float voltV,currA;//定义电压电流功率变量
float power;

unsigned char count =0;//采集计数 用于封信显示

float sumVolt,midV; //用于滤波 中间变量
float sumAcur,midA;		//用于滤波 中间变量

int main(void)
 { 
	u16 adcx;	 
	delay_init();	    	 //延时函数初始化	  
	uart_init(115200);	 	//串口初始化为115200
  TIM3_Int_Init(499,7199);//50ms  	 
	LED_Init();		  		//初始化与LED连接的硬件接口
  LED0=0;
 	Adc_Init();		  		//ADC初始化	    

	Lcd_GPIO_init();  //初始化io lcd
	Lcd_Init();		//初始化液晶 
	delay_ms(20);

	sprintf(dis0,"v:%3.1fV a:%3.1fA   ",voltV,currA);//打印电压
	Lcd_Puts(0,0,(u8 *)dis0);//显示电压
	
	power = voltV*currA;
	sprintf(dis1,"Power:%3.1fW",power);//打印功率
	Lcd_Puts(0,1,(u8 *)dis1);//显示功率
	 
	 while(1)
	{
		adcx=Get_Adc_Average(ADC_Channel_0,10);// PA0读取ad值
		midA=(float)adcx*(3.3/4096)*2;//转换
		if(midA>2.65)
		{midA = (midA - 2.65)/0.185;	}	//计算电流		
		else
		{midA = 0;}		
		
		adcx=Get_Adc_Average(ADC_Channel_1,10);	// PA1
		midV =		(float)adcx*(3.3/4096)*5;
		
		sumAcur = sumAcur + midA;	//多次测量求平均
		sumVolt = sumVolt + midV;	//多次测量求平均
		
		count++;//采集次数
		if(count >= 5)
		{	  
			count = 0;
			currA = 	sumAcur/5;  //Q求平均
			if(currA < 0.1) currA= 0;//滤波微小波动
			sumAcur = 0;

			voltV = sumVolt/5;//求平均值
			if(voltV<0.1) voltV=0;
			sumVolt =0;

			sprintf(dis0,"v:%3.1fV a:%3.1fA   ",voltV,currA);//打印电压
			Lcd_Puts(0,0,(u8 *)dis0);//显示电压

			power = voltV*currA;
			sprintf(dis1,"Power:%3.1fW",power);//打印功率
			Lcd_Puts(0,1,(u8 *)dis1);//显示功率				
		}		
		delay_ms(10);	
	}											    
}	

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值