基于LM324和OP07的电子秤电路(野火指南者STM32显示)

文章介绍了如何区分电子秤信号线,通过测量四个电阻的阻值确定R1≈R3,R2≈R4,并说明R2>R1的上下电源和左右信号线布局。接着,解释了传感器的工作原理,涉及ADC采集、差分放大器和OP07信号放大。代码示例展示了基于ADC的电子秤电路实验,用于读取重量数据。

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

(个人学习记录)

电子秤信号线的区分

0cdd51840dd64287b8aa2b1604c3cb73.jpeg

 商家一般会给出各条线的具体信息(仅供参考),为了安全起见,还是需要自己会测量好0418b6a0295e44b29201c21c21c83059.jpeg

 上图中的电子秤结构可以理解为四个电阻(事实上就是四个电阻),结构如下图12097fff948549f7afdab0d13b4f8aea.png

可以先在草稿纸上画出如上图所示草图,然后通过四根线分别测出四个电阻的阻值,会发现R1≈R3,R2≈R4,且R2>R1按照上图结构,上下为电源,上正下负;左右为信号线,在测信号线之前先把传感器放正(就是安装时的正放,别倒过来安装),先固定电源负和其中一根信号线,通过自己用手压传感器来看阻值的变化,阻值变大则为正,变小为负

电路原理

R1,R2,R3,R4组成假设为一个电子秤传感器,通过采集传感器两端的信号,经过差分放大器放大,再记过OP07进行信号放大。

1a69e281d5c7405184c8314c9409284c.png

 原理图

20a2497546f0479bae3b4780e2f16d40.png

 PCB0dcf294cda44490382ca61717163f3e0.png

 效果演示

图中显示的253数值是硬件误差,这里懒得软件清零了

e7aa96919641428ebd4e15a8910f6ba3.png

 100g砝码(每1克数值变化2)d2a3f89fdd2b44cfae127669f53e5bc4.png

 50g砝码b17bcac382a6439881471cb1fee169d7.png

 150g砝码9442cc2455494517b1d07beb809b7c57.png

 代码基于野火指南者

08_7 ADC采集实验(电子秤电路) https://www.aliyundrive.com/s/PuFbWhx44X8 提取码: m42q 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。

#include "adc.h"


/**********************************************************
功  能:ADC1初始化配置函数
参  数:无
返回值:无
**********************************************************/
void ADC_Hardware_Init(void)
{
	GPIO_InitTypeDef GPIO_TypeDefStructure;
	ADC_InitTypeDef ADC_TypeDefStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	//开启时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_ADC1,ENABLE);
	
	GPIO_TypeDefStructure.GPIO_Pin = GPIO_Pin_5;//选择端口
	GPIO_TypeDefStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入
	GPIO_Init(GPIOC,&GPIO_TypeDefStructure);//初始化配置
	
	// 配置中断优先级
	NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);

	/*****************  ADC设置  ******************/
	// 配置ADC时钟为PCLK2的8分频,即9MHz
	RCC_ADCCLKConfig(RCC_PCLK2_Div8); 

	
	ADC_TypeDefStructure.ADC_Mode = ADC_Mode_Independent;//独立模式
	ADC_TypeDefStructure.ADC_ScanConvMode = DISABLE;// 禁止扫描模式,多通道才要,单通道不需要
	ADC_TypeDefStructure.ADC_ContinuousConvMode = ENABLE;//连续转换
	ADC_TypeDefStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//禁止触发检测
	ADC_TypeDefStructure.ADC_DataAlign = ADC_DataAlign_Right;//转换结果右对齐
	ADC_TypeDefStructure.ADC_NbrOfChannel = 1;//1个转换在序列规则中
	ADC_Init(ADC1,&ADC_TypeDefStructure);//初始化配置
	
	ADC_Cmd(ADC1,ENABLE);//ADC使能
}


/**********************************************************
功  能:ADC采集函数
参  数:无
返回值:最近一次的转换结果
**********************************************************/
uint16_t ADC_Collect(void)
{
	ADC_RegularChannelConfig(ADC1,ADC_Channel_15,1,ADC_SampleTime_55Cycles5);//ADCX,ADC通道,规则序列, 采样时间
	ADC_SoftwareStartConvCmd(ADC1,ENABLE);//开启软件ADC1功能
	while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == RESET);//等待转换结束
	return ADC_GetConversionValue(ADC1);//返回最近一次转换结果
}


/**********************************************************
功  能:通过LCD显示转换结果
参  数:无
返回值:无
**********************************************************/
void Display_result(void)
{
	
	adcx = ADC_Collect();
	sprintf(show,"Test T:%4d",adcx);
	ILI9341_DispStringLine_EN(LINE(4),show);
	Delay_ms(500);

}

比赛设计的电子称是以单片机为主要部件,用C语言进行软件设计。通过传感器测量信号,经过A/D转换系统转换信号输送给CPU控制系统,通过诺基亚5110屏幕显示系统数据,键盘输入系统用来输入操作指令,阀值报警系统可以防止超量程损坏电子称。 系统采用32位的M051芯片作为单片机的主控芯片,外围以称重电路显示电路,报警电路,键盘电路等构成系统电路板,从而实现了自动称重的各种控制功能。 最终视频演示:https://v.youku.com/v_show/id_XMTQyNjY1Mzg0NA==.html 硬件框图 软件框图: 调试过程 调试工具:逻辑分析仪 示波器 信号发生器 万用表 串口调试助手 调试步骤: 1:压力传感器 淘宝链接: https://item.taobao.com/item.htm?spm=2013.1.0.127.C... 以上是压力传感器在淘宝的网址 将压力传感器用10伏电压供电,当传感器上放1千克的物体,绿线白线之间的差分电压为0.5毫伏。说明传感器良好。 2:AD转换模块 用的是HX71124位AD转换模块 淘宝链接: https://item.taobao.com/item.htm?spm=a230r.1.10.168... AD的时序 24位AD,用信号发生器给1mv的信号,用串口调试助手对应的十进制输出为48到64,0到20mv的线性关系较好,20mv对应的十进制输出为1100到1241之间。然后改用压力传感器给信号,当压力传感器上不放物体时,对应的十进制输出为1912000,低三位数据的浮动较大,在处理数据时取高4位,结果得到最低位数据每增加1,表示重量增加2.12g。 调试进程: 能用键盘输入小数,与单价相乘,并显示浮点型总价,重量的精确度为2g,当重量超过40千克时,led灯会闪,发出警报。不足之处:每次上电时,在不放重物的情况下,初始值有变化,从0~6不等,用软件改初始值后能维持一段时间,但下次开机时初始值仍不为0. 软件部分遇到的问题及解决过程 1:显示频点不亮 出现的原因 :I/O口接错。 2:显示不清楚: 解决方法:在显示后面加延时,或者是利用其它程序的延时,将显示部分写在其它程序的后面,或者是将一直显示的字写在主函数里面,只执行一遍,这种方法显示效果很好,但 是无法进行刷新,高位显示的数据一旦出现,便不会再消失 3:按键检测不到 出现的原因,局部变量与全局变量命名相同,导致出现错误 还有是因为,延时过长。 4:数据浮动较大 解决方法:用去大去小取平均的数字滤波,但有时会在10个数据中出现几次最大值,于是又进行了中位值滤波限幅滤波。 5:读取不到数据 出现的原因,P-DOUT不能给其他变量赋值。 解决方法:赋值时将P-DOUT换成PIN 硬件部分遇到的问题及解决过程 M051电子称PCB中的一些错误总结 1. AD模块中的两根差分信号线 中间要用一根地线隔开,线宽应加粗点, 差分信号走线:走线长度,宽度相等。(共模分量减小) 间距相同(差分阻抗一致,反射减小)。 (解决办法:割断PCB上面的这两根线,反面加两根飞线) 2. 电源模块中:变压器出来12V有效值,最高值接近17v,所以用击穿电压为16V的滤波电容 不行。 (解决办法,换个击穿电压为35V的电容。) 3. 蓝牙模块位置放反了,天线旁边不能有其他的线,所以天线一般放在板子的边缘。(以后画此模块要注意了) 4. 诺基亚5110屏的封装 四个固定孔间距大了一点点,板子厚度要用1.0cm的。 5. 画pcb时没预留正负极接口,之后硬件调试不方便。 6. 焊接元器件时,要先焊接电源模块,再测试此模块的工作情况。 再依次焊接其他模块。 7. 拼版时,两个板子之间的距离稍微要留大点,方便回来切割。 8. 画完PCB后,把最后画好的要存好档,不要以后调试时把以前错误的图拿出来调试 9. 5110屏幕布局时放倒了,以后画板时要搭档多交流。 10:电压过高,导致显示频黑屏,蜂鸣器不受软件控制,一直响。 解决方法:将220转12的变压器换成220转6伏的变压器。 11:AD接反 解决方法:将排针反过来焊接 12:AD采集数据浮动很大 出现的原因:由于布线时两根输入信号线平行,也有可能是因为信号线太细,造成干扰 解决方法:将两根信号线隔断,再接线。 画M051电子称PCB的规范总结 1,布局时:每个模块电路里的元器件尽量放在一起,(遵循布线最短原则) 晶振电路元器件电容晶振的摆放,且下面不能走其他线,此电路离芯片对应的IO口要靠近。 最小系统vcc旁的电容也要靠近mcu 2.布线时: 1. 线宽:最小用10mil,主电源线,电源线要更宽,这个根据电流大小判断。 每个模块的电源线也要适当加粗。 2.先
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值