基于STM32设计的数字电子秤

1. 项目介绍 称重计量是现在社会活动中不可缺少的部分,随着国际交流的发展,称重计量的国际间的统一显得越来越重要。
电子称重技术是现代称重计量和控制系统工程的重要基础之一。近年来,随着现代科技进步,电子称重技术取得了突飞猛进的发展,电子秤在计量领域中也占有越来越重要的地位。尤其是商用电子衡器,以其准确度高、反应灵敏、性能稳定、结构简单、环境适应性强、便于与电子计算机结合而实现称重计量与过程控制自动化等特点,而被广泛用于工商贸易、能源交通、冶金矿山、轻工食品、医药卫生、航空航天等领域。
电子秤的工作原理首先是通过称重传感器采集到被测物体的重量并将其转换成电压信号,输出电压信号通常很小,需要通过前端信号处理电路进行准确的线性放大。放大后的模拟电压信号经a/d转换电路转换成数字量,被送入到主控电路的单片机中,再经过单片机控制oled显示屏,从而显示出被测物体的重量,在实际应用中为提高数据采集的精度,并尽量减少外界电气干扰还需要在传感器与a/d芯片之间加上信号调理电路。
当前项目是采用采用stm32+称重模块+oled实现了简单的电子秤项目,称重模块上采用24位的adc芯片,精度较高。实现了称重,校准、去皮等功能。
硬件介绍:
mcu:stm32f103zet6,只要是stm32f1x系列本工程代码都通用的。
称重模块: 淘宝购买的称重模块
oled: spi接口的0.96寸oled屏,采用的是中景园电子的oled屏。
完整工程下载地址: https://download.csdn.net/download/xiaolong1126626497/63993934
视频演示地址: https://live.csdn.net/v/182608
项目运行效果:
2. 项目实现 2.1 称重传感器 称重传感器就是一个压力传感器,其又叫做悬臂梁压力传感器。安装时需要一端固定,另一端受力。其内部有四个应变电阻片,共同组成了一个电桥,当受力端施加压力时,传感器壳体会发生形变,从而影响应变电阻片的阻值。
下面是称重传感器的原理图:
称重传感器实物图:
称重传感
器是采用 cs1237 作为转换芯片,用于把微小的电压信号转换为具有 24 位精度的数字信号。模块信号输入端可以接受差分信号,内部具有可编程运算放大器用于放大输入端的弱小信号。模块内置温度传感器,可粗略估计周围温度。模块可用于多种工业过程控制场合,比如电子秤,血液计,智能变换器等。
cs1237中有1路adc,集成了1路差分输入,信号输入可以是差分输入信号ainp、ainn,也可以是温度传感器的输出信号,输入信号的切换由寄存器(ch_sel[1:0])控制。
cs1237是采用2线spi串行通信,通过sclk和drdy/dout可以实现数据的接收以及功能配置。
实现代码如下:
#include adc-cs1237.hstatic long ad_res_last=0; //上一轮的adc数值保存/*定义cs1237使用的gpio口clk pb14 时钟线out pb15 数据输出线*/void cs1237_gpio_init(void){ rcc->apb2enr |= 0x01 crh |= 0x03000000; //通用推挽输出 50mhz gpiob->odr |= 1crh |= 0x80000000; //上下拉输入模式}void cs1237_dout(void) //配置pb15为输出{ gpiob->crh &= 0x0fffffff; //寄存器清零 gpiob->crh |= 0x30000000; //通用推挽输出 50mhz}//cs1237进入低功耗模式void cs1237_power_down(void){ clk_high delay_us(200); //clk上拉时间应超过100us,恢复后下拉时间至少10us}//配置cs1237芯片void con_cs1237(void){ u8 i; u8 dat; u8 count_i=0; //溢出计时器 dat = cs_con; // 0100 1000 cs1237_dout(); out_high delay_ms(310); //上电建立时间 cs1237_drdy(); //配置pb15为输入 clk_low //时钟拉低 while(int) //芯片准备好数据输出 时钟已经为0,数据也需要等cs1237全部拉低为0才算都准备好 { printf(123\r\n); delay_ms(100); //10hz下转换时间是100ms count_i++; if(count_i > 150) { clk_high; cs1237_dout(); out_high return; //超时,则直接退出程序 } } for(i=0;i<29;i++) // 1 - 29 { one_clk; } cs1237_dout(); clk_high;delay_us(6);out_high;clk_low;delay_us(6); //30 clk_high;delay_us(6);out_high;clk_low;delay_us(6); //31 clk_high;delay_us(6);out_low;clk_low;delay_us(6); //32 clk_high;delay_us(6);out_low;clk_low;delay_us(6); //33 clk_high;delay_us(6);out_high;clk_low;delay_us(6); //34 clk_high;delay_us(6);out_low;clk_low;delay_us(6); //35 clk_high;delay_us(6);out_high;clk_low;delay_us(6); //36 one_clk; //37 写入了0x65 for(i=0;i<8;i++) // 38 - 45个脉冲了,写8位数据 { clk_high; delay_us(6); if(dat&0x80) out_high else out_low dat < 150) { clk_high; cs1237_dout(); out_high; return 1; //超时,则直接退出程序 } } for(i=0;i<29;i++) // 1 - 29 { one_clk; } cs1237_dout(); clk_high;delay_us(6);out_high;clk_low;delay_us(6);//30 clk_high;delay_us(6);out_low;clk_low;delay_us(6);//31 clk_high;delay_us(6);out_high;clk_low;delay_us(6);//32 clk_high;delay_us(6);out_low;clk_low;delay_us(6);//33 clk_high;delay_us(6);out_high;clk_low;delay_us(6);//34 clk_high;delay_us(6);out_high;clk_low;delay_us(6);//35 clk_high;delay_us(6);out_low;clk_low;delay_us(6);//36 one_clk;//37 写入了0x56 cs1237_drdy(); dat=0; for(i=0;i<8;i++) // 38 - 45个脉冲了,读取数据 { one_clk; dat < 300) { clk_high; cs1237_dout(); out_high; return 0; //超时,则直接退出程序 } } cs1237_dout(); out_high //端口锁存1, cs1237_drdy(); dat=0; for(i=0;i<24;i++) //获取24位有效转换 { clk_high; delay_us(6); dat <= i;//丢弃多余的位数 return dat;}//初始化adc相关参数int init_cs1237(void){ con_cs1237();//配置cs1237 if(read_con() != cs_con)//如果读取的adc配置出错,则重启 { printf(读取错误\r\n); return 0; } delay_us(10000); ad_res_last = read_cs1237(); ad_res_last = read_cs1237(); ad_res_last = read_cs1237(); return 0;}//数字一阶滤波器 滤波系数a,小于1。上一次数值b,本次数值c out = b*a + c*(1-a)//下面这个程序负责读取出最终adc数据long read_18bit_ad(void) //18位的{ float out,c; out = ad_res_last; c = read_cs1237(); if(c!=0) // 读到正确数据 { out = out*lv_bo + c*(1-lv_bo); ad_res_last = out;//把这次的计算结果放到全局变量里面保护 } return ad_res_last;}  
2.2 oled显示屏 oled显示屏是0.96寸 spi接口显示屏,采用ssd1306驱动,兼容3.3v或5v电源输入,非常常见,淘宝一搜一大堆,当前选择的是中景园电子的oled显示屏。
在调试设备或者测试数据时,有时候需要实时观察数据的变化,加入显示屏可以把观察设备的运行情况,数据变化等。在成本和难易程度上,oled显示屏是非常适合初学者去学习与应用的。
oled视频实物图:
示例代码:


简单的锁存过流故障检测器具有快速响应时间
用TPL250如何驱动buck电路(开关管用mos管),需要加自举电容吗?
易烊千玺自拍水平又提高了?华为nova5系列夜景自拍实力助阵
GPS抗干扰器实现强有力的保护!
采用CAE电子设备散热分析工具对大功率DC-DC变换器进行热仿真研究
基于STM32设计的数字电子秤
郑州联通将助力“新基建”背景下5G网络的高质量发展
Phison会进入RAM-based Storage这个市场吗?
LED电平指示器电路原理
车用以太网或将成实现ADAS及自动驾驶关键
Phoenix Contact 用于电子应用的 LPC 2,5 PCB 连接器
谷歌Pixel 6新品售价或高达近7000元
荣耀9、华为P10对比评测:华为荣耀9表现“优秀”,华为P10已跌至“冰点价”!
长飞全光网全面打造光通信智能工厂
多路串口服务器的功能特点及行业应用分析
全面讲解涂鸦PaaS2.0开发平台!让你快速开发出有创意的智能硬件产品
共达电声在深圳证券交易所召开了重大资产重组说明会
新iPhone将升级玻璃面板,3D Touch将被淘汰!
低压开关柜组成_低压开关柜的工作原理
如何选购对讲机?