锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

【检测技术课案】简易数显电子秤的设计与制作

时间:2022-10-17 10:30:01 数显温度变送器mx

传感器与检测技术课程设计案例1-简单数显电子秤的设计与生产

文章目录

  • 任务目标
  • 一、数显电子秤的工作原理
  • 二、各模块设计
    • 1.应变传感器
    • 2.信号处理电路
    • 3.单片机和AD采样
  • 三、模拟和测试
    • 1.硬件仿真
    • 2.实际测试
    • 3.改进与优化
  • 总结


任务目标

称重技术是广泛应用于工业、农业、交通、贸易和科研领域的重要技术,与社会发展、工业生产和人民生活密切相关。电子秤属于电子衡器,技术水平直接影响生产生活质量和经济效益的发展。

技术指标 要求
量程 0-10kg
分辨率 1g
最大引用误差 <0.1%
绝对误差 <5g

以下是本文的文本内容,案例可供参考

一、数显电子秤的工作原理

电子秤采用单片机处理系统,通过称重传感器将测量转换为电信号。采样信号处理分析后,采集转换重量信号,采用单片机系统计算分析,最后通过显示设置显示,实现快速方便的重量信息显示。

总体设计方案如下图所示:
在这里插入图片描述

二、各模块设计

1.应变传感器

选择10个传感器模块kg量程电阻应变压力传感器,应变压力传感器。实物图和具体技术参数如下图所示。


传感器灵敏度为1mV/V,若电桥的激励电压为10V,满时电压差为10mV,假设电压差与压力传感器受力呈线性关系,则变化率为1uV/g。传感器模块与信号处理电路接线如下:

2.信号处理电路


信号调节电路大致可分为桥路差动放大、跟随器、反向放大、低通滤波四部分。OPA桥式放大器搭建2333,AAD227搭建二级放大器。

原理图
首先,通过差动放大,通过差分接获得电桥差值,并将其放大到适当的值。根据芯片数据手册,放大倍数约为100倍
电压跟踪器可作为电路中的隔离器,具有输入阻抗高、输出阻抗低的特点,可防止前后电路干扰。由于芯片的特性,输入电流不得大于20mA,因此,同相端串联15kΩ电阻。电阻不影响放大倍数。
由于前桥产生的差异为负电压,需要连接到反相器,将电压转换为单片机可测量的正电压,并进一步扩大受放大器性能限制的差异放大电路,使测量范围足够大。相反,放大器的放大倍数Au = - ( Rf / Rin )

最后放大倍数 = (R2/(R1 350))(IN2-IN1)1(-R7/R6)≈300

3.单片机和AD采样

选择单片机部分STM32F103C8T最小系统板,常用,易于快速编写。
需要收集uv芯片自带的12位级信号ad写作不足以胜任任务的需要SPI通信24位AD模块ADS1256。

驱动程序参考-ADS1256驱动

主程序代码如下(示例):

#include "led.h" #include "delay.h" #include "sys.h" #include "key.h" #include "usart.h" #include "exti.h"  #include "ADS1256.h"  #define Au 300.0 int KeyState = 0; char str[15],str2[15];  void Delayvu32 nCount)
{ 
        
  for(; nCount != 0; nCount--);
}
//定时器3 500ms一次中断
void TIM3_Int_Init(u16 arr,u16 psc)
{ 
        
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	NVIC_InitTypeDef NVIC_InitStructure;

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能

	TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500ms
	TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率 
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
 
	TIM_ITConfig(  //使能或者失能指定的TIM中断
		TIM3, //TIM2
		TIM_IT_Update ,
		ENABLE  //使能
		);
	NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中断
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
	NVIC_Init(&NVIC_InitStructure);  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器

	TIM_Cmd(TIM3, ENABLE);  //使能TIMx外设
							 
}

void TIM3_IRQHandler(void)   //TIM3中断
{ 
        
	if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源 
	{ 
        
		TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源 
	  printf(str);
	}
}

int main(void)
{ 
        	
	long double vr,vout,vsum,v[50];
	unsigned char i=0,j=0;
	long ulResult;
	long double ldVolutage;
	
	delay_init();	    	 //延时函数初始化 
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
	uart_init(9600);	 //串口初始化为9600
	
	LED_Init();		  	 //初始化与LED连接的硬件接口 
  LEDx=0;				//点亮LED
	
	EXTIX_Init();		//外部中断初始化
	
	printf("OK\r\n");	
	
	Init_ADS1256_GPIO(); //初始化ADS1256 GPIO管脚 

	Delay(0x1ffFF);
	GPIO_SetBits(GPIOB, GPIO_Pin_11 );  
	ADS1256_Init();
	
	TIM3_Int_Init(4999,7199);//10Khz的计数频率,计数到5000为500ms 
	
	for(i = 0;i < 20;i++) v[i]=0;
	
	while(1)
	{ 
        	    
		 for(i = 0;i < 1;i++)
		{ 
        
			 ulResult = ADS_sum( (i << 4) | ADS1256_MUXN_AINCOM);	
			//ulResult = ADS_sum( ADS1256_MUXP_AIN0 | ADS1256_MUXN_AINCOM); 
			if( ulResult & 0x800000 )
			{ 
        
			 	ulResult = ~(unsigned long)ulResult;
				ulResult &= 0x7fffff;
				ulResult += 1;
				ulResult = -ulResult;
			}
			ldVolutage = (long double)ulResult*0.59604644775390625;
			//printf("第%d通道:",(i & 0x07)?(i & 0x07) - 1:7);
			//sprintf(str,"%lf\r\n",ldVolutage); //double
			//printf("uV\r");
			//printf("%x",(unsigned long)ulResult);//16
			Delay(0x3fFFF);
		}
		vsum = 0;
		for(i = 1;i < 20;i++)
		{ 
        
			v[i] = v[i-1];
			vsum += v[i];
			vsum /= 2.0;
		}
		v[0] = ldVolutage;
		vsum += v[0];
		vsum /= 2.0;
		if(j<20)
		{ 
        
			vr = vsum;
			j++;
		}
		vout = (vsum - vr) / Au;///20.0;
		sprintf(str,"%.0lf -> ",vsum);
		sprintf(str2,"%.0lf g\r\n",vout);
	} 
}
//END

滤波算法采用连续采样20个值(小样本)求平均,实际表现效果良好。

三、仿真和测试

1.硬件仿真


仿真时方案放大倍数为240,后实际方案修改为300

桥路输出电压(mv) 对应物体重量 仿真输出电压
0.001 1g 241.999uV
0.01 10g 2.402mV
0.1 100g 24.001mV
1 1kg 239.997V
10 10kg 2.4V

2.实际测试

3.改进与优化

a)可以考虑修改成三运放构建差动仪表放大的方案。
b)通过实际测试数据进行拟合提高检测精度。
……


总结

本文仅仅简单介绍了简易数显电子秤的设计和制作,为后续其他教学项目的开展提供了样本和案例。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章