基于STM32单片机电阻电容电感检测仪设计

本设计采用STM32F103C8T6单片机为核心,结合NE555定时器组成的RC振荡器和电容三点振荡器,实现了电阻、电容和电感的智能测量。通过STM32的定时计数功能,将测量结果数字化显示在LCD1602上。

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

基于STM32单片机电阻电容电感检测仪设计

(程序+原理图+PCB+设计说明书)

原理图PCB:Altium Designer

程序编译器:keil 5

编程语言:C语言

设计编号:C0057

设计介绍

基于ARM的智能RLC测量仪采用STM32F103C8T6单片机作为整个设计的控制核心。系统通过由NE555定时器组成的RC振荡器和电容三点振荡器,将对应测量参数的振荡频率发送到STM32的计数端,通过STM32的定时和计数,可以推算出相应的测量频率的大小,再经过STM32单片机内部逻辑程序分析计算后,将电路测量的数据结果以数字形式传输给LCD1602显示模块,进行RLC测量的动态显示。

这一设计实现了数字化的动态测量显示,有效取代了传统测量仪的复杂电路,实现了电子元件参数的智能测量、利用单片机的内部分析和控制数据显示,从而取得准确性较高的RLC测量数据。

本设计基于STM32单片机进行智能处理。根据使STM32单片机的外部按钮控制测量电路的选择,测量电阻Rx和电容Cx时,选用RC振荡电路,通过NE555定时器产生对应的频率;测量电感Lx时,选择电容三点振荡电路,NE555定时器产生相应的频率,STM32对这些频率进行计数和定时,然后再进行内部计算分析,将电路测量的数据结果以数字形式传输给 LCD1602显示模块,进行 RCL测量的动态显示。RLC智能测量仪表系统的总体结构主要包括:主测量电路,STM32控制电路,CD4052多路选择开关电路,液晶显示驱动电路和功能选择按钮电路。

已经做出实物验证程序,放心使用吧。不提供技术支持,要相信自己的动手能力,耐心调试,肯定是可以做出来的!!

实物图(分别测量电阻电感电容):

测量电阻

在这里插入图片描述

测量电感

在这里插入图片描述

测量电容

在这里插入图片描述

以下为本设计资料展示图:

原理图

在这里插入图片描述

PCB

img

PCB(3D):

img

程序

在这里插入图片描述

程序流程图

image-20220825003134303

​ 主程序作为整个软件设计的核心,主要作用是当好“一座桥梁”,它是每个子功能模块互通的纽带,从而完整的实现测量仪的需求。主要实现键盘输入,数据采集,数据存储和已存储数据的计算和处理,调用各功能模块进行测量,找出待检测的电阻值Rx、电容值Cx以及电感值Lx,并通过单片机STM32处理结果在1602液晶显示屏显示,软件设计的操作流程图如图4-2。

main函数

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "timer.h"
#include "usart1.h"
#include "LCD1602.h"
#include "key.h"
#include "exti.h"
#include "string.h"
#include "stdio.h"

u8 mode = 2;

void keyscan()
{
		u8 key;
	  key = KEY_Scan(0);
	  if(key == 1)
		{
				mode = 1;
			
			  LED1 = 0;
			  LED2 = 1;
			  LED3 = 1;
			
			  CD4052_B = 0;//电容档
				CD4052_A = 0;
			
			  LCD_Write_String(0,0,"   MEASURE Cx   ");
				LCD_Write_String(0,1,"    00000.0pF   ");
		}
		if(key == 2)
		{
				mode = 2;
			
			  LED1 = 1;
			  LED2 = 0;
			  LED3 = 1;
			
			  CD4052_B = 0;//电阻档
				CD4052_A = 1;
			
			  LCD_Write_String(0,0,"   MEASURE Rx   ");
				LCD_Write_String(0,1,"   0000.000K    ");
		}
		if(key == 3)
		{
				mode = 3;
			
			  LED1 = 1;
			  LED2 = 1;
			  LED3 = 0;
			
			  CD4052_B = 1;//电感档
				CD4052_A = 0;
			
			  LCD_Write_String(0,0,"   MEASURE Lx   ");
				LCD_Write_String(0,1,"    000000uH    ");
		}
}

extern unsigned long   RX2;
extern float  CZ;
extern float  LZ;

int main(void)
{	
	unsigned int count;
	
	delay_init();	    	 //延时函数初始化	  
	NVIC_Configuration(); 	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 
	delay_ms(300);
	KEY_Init();
	LED_Init();
	CD4052_Init();
	LCD_Init();          // 1602初始化 
	EXTIX_Init();
	CD4052_B = 0;//电阻档
	CD4052_A = 1;
	LED1 = 1;
	LED2 = 0;
	LED3 = 1;
  LCD_Write_String(0,0,"   MEASURE Rx   ");
	LCD_Write_String(0,1,"   0000.000K    ");
	TIM2_Int_Init(999,7199);  //定时器初始化,定时100MS
	
  while(1)
	{
		  keyscan();
			if(count++ > 100)
			{
				  if(mode == 1)//显示电容值
					{
							LCD_Write_Char(4,1,(long)CZ/100000+'0');
							LCD_Write_Char(5,1,(long)CZ%100000/10000+'0');
							LCD_Write_Char(6,1,(long)CZ%10000/1000+'0');
							LCD_Write_Char(7,1,(long)CZ%1000/100+'0');
							LCD_Write_Char(8,1,(long)CZ%100/10+'0');
							LCD_Write_Char(10,1,(long)CZ%10+'0');
					}
				  if(mode == 2)//显示电阻值
					{
							LCD_Write_Char(3,1,RX2/1000000+'0');
							LCD_Write_Char(4,1,RX2%1000000/100000+'0');
							LCD_Write_Char(5,1,RX2%100000/10000+'0');
							LCD_Write_Char(6,1,RX2%10000/1000+'0');
							LCD_Write_Char(8,1,RX2%1000/100+'0');
							LCD_Write_Char(9,1,RX2%100/10+'0');
							LCD_Write_Char(10,1,RX2%10+'0');
					}
					if(mode == 3)//显示电感值
					{
							LCD_Write_Char(4,1,(long)LZ/100000+'0');
							LCD_Write_Char(5,1,(long)LZ%100000/10000+'0');
							LCD_Write_Char(6,1,(long)LZ%10000/1000+'0');
							LCD_Write_Char(7,1,(long)LZ%1000/100+'0');
							LCD_Write_Char(8,1,(long)LZ%100/10+'0');
							LCD_Write_Char(9,1,(long)LZ%10+'0');
					}
			}
			delay_ms(1);
  }
}


测量结果

img

设计说明书

img

设计说明书主要内容

​ 本设计基于STM32单片机进行智能处理。根据使STM32单片机的外部按钮控制测量电路的选择,测量电阻Rx和电容Cx时,选用RC振荡电路,通过NE555定时器产生对应的频率;当测量电感Lx时,待测电感Lx通过NE555定时器连接到电容的三点振荡电路,导出频率FL,然后STM32对这些频率进行计数和定时,然后再进行内部计算分析,使电阻电容电感的测量转化为频率的测量,然后由微控制器STM32处理测量结果并将其发送到 LCD1602液晶显示器以进行显示。本论文的主要内容如下:

​ 分析并总结了被测元器件的重要参数及对元器件常用的检测电路,通过比较选出合适的方法。RLC智能测量仪表系统的总体结构主要包括:主要测量电路,STM32控制电路,CD4052多通道选择开关电路,液晶显示驱动电路和功能选择按钮电路。在硬件设计中详细描述了电路原理图。RLC测量仪器的软件设计主要是应用模块化结构设计编写相关的程序模块。智能RLC仪表的软件设计可分为四个模块,即:主程序模块,中断采样程序模块,自动转换范围程序模块,显示程序模块和数据处理程序模块[5]。介绍RCL测量仪系统软硬件的调试。根据测量结果,获得了RLC测量仪器的精度,并研究了测量误差。总结了智能RLC测量仪的优势和需要改进之处,以及自己在设计中所学到的知识总结。

资料清单

img

资料下载

### STM32电容测量方法及其实现 #### 1. 基于STM32电容测量原理 电容测量的核心在于通过特定电路结构和算法计算目标电容器件的容量。通常采用的方法是利用RC充放电特性来间接获取电容值。具体来说,可以通过固定电阻R并记录电容C完成一定电压变化所需的时间T来进行推算[^1]。 #### 2. 实现方式概述 一种常见的实现方案是在硬件上构建简单的RC电路,在软件层面则借助微控制器内部定时器功能捕捉信号状态转换时刻从而得到时间参数t=RCln(Vin/Vout),其中Vout代表最终稳定下来的输出电压而Vin则是初始输入电压水平[^2]。 对于基于STM32芯片的应用开发而言,其丰富的外设资源使得上述过程得以简化执行: - **GPIO配置**: 将待测端口设置成推挽模式或者开漏模式作为开关元件模拟理想情况下的纯阻抗路径; - **TIMx计数/捕获单元应用**: 使用高级控制定时器配合中断服务程序精确计量两次边沿触发之间经历的实际周期数目进而折合成对应物理量度单位秒(s)[^3]; 以下是具体的代码片段展示如何初始化相关寄存器以及编写主要逻辑流程的部分伪代码表示形式: ```c // 初始化 GPIO 和 TIM 配置函数声明 void MX_GPIO_Init(void); void MX_TIMx_Init(uint32_t Prescaler, uint32_t Period); int main(){ // 定义变量存储时间和结果数据 uint32_t startTime = 0; uint32_t endTime = 0; // 初始化系统时钟、GPIO 及 TIM 外设 HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_TIMx_Init(99, 65535); while (1){ /* 开始测量 */ // 设置引脚为低电平清零电荷 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); __HAL_TIM_SET_COUNTER(&htimX, 0); // 清除计数值 // 等待一段时间确保完全释放原有电量 HAL_Delay(1); // 切换至高电平开始充电过程 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); // 当检测到达到阈值电压时停止计时 while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1)==GPIO_PIN_RESET){}; endTime=__HAL_TIM_GET_COUNTER(&htimX)-startTime; // 计算得出当前条件下近似等效电容大小 float capacitance=(float)(endTime*PrescaleValue)/(VoltageChangeRate*ResistanceValue); // 输出结果显示给用户或者其他处理环节调用 printf("Measured Capacitance:%f uF\n",capacitance); } } ``` 此段示例仅提供了一个基础框架用于理解整个操作序列安排思路,并未包含全部细节部分比如错误检查机制等内容需开发者自行补充完善。 #### 3. 提升精度措施建议 为了进一步提高所设计系统的准确性表现可以从以下几个方面着手改进: - 对采集的数据实施滤波运算减少噪声干扰影响效果显著; - 应用多组样本统计分析技术如均值法剔除异常点后再求取平均值得更贴近真实状况的结果;
评论 37
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BT-BOX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值