电子秤课程设计实验报告.doc

上传人:w****2 文档编号:6500929 上传时间:2020-02-27 格式:DOC 页数:19 大小:292.50KB
返回 下载 相关 举报
电子秤课程设计实验报告.doc_第1页
第1页 / 共19页
电子秤课程设计实验报告.doc_第2页
第2页 / 共19页
电子秤课程设计实验报告.doc_第3页
第3页 / 共19页
点击查看更多>>
资源描述
电 子 设 计 实 验 报 告电子科技大学 设计题目: 电子称 姓 名: 学生姓名 任务与要求 一、任务 使用电阻应变片称重传感器,实现电子秤。用砝码作称重比对。二、要求 准确、稳定称重;称重传感器的非线性校正,提高称重精度;实现“去皮”、计价功能; 具备“休眠”与“唤醒”功能,以降低功耗。电子秤第一节 绪论摘要:随着科技的进步,在日常生活以及工业运用上,对电子秤的要求越来越高。常规的测试仪器仪表和控制装置被更先进的智能仪器所取代,使得传统的电子测量仪器在远离、功能、精度及自动化水平定方面发生了巨大变化,并相应的出现了各种各样的智能仪器控制系统,使得科学实验和应用工程的自动化程度得以显著提高。影响其精度的因素主要有:机械结构、传感器和数显仪表。在机械结构方面,因材料结构强度和刚度的限制,会使力的传递出现误差,而传感器输出特性存在非线性,加上信号放大、模数转换等环节存在的非线性,使得整个系统的非线性误差变得不容忽视。因此,在高精度的称重场合,迫切需要电子秤能自动校正系统的非线性。此外,为了保证准确、稳定地显示,要求所采用的ADC具有足够的转换位数,而采用高精度的ADC,自然增加了系统的成本。基于电子秤的现状,本文提出了一种简单实用并且精度高的智能电子秤设计方案。通过运用很好的集成电路,使测量精度得到了大大提高,由于采用数字滤波技术,使稳态测量的稳定性和动态测量的跟随性都相当好。并取得了令人满意的效果。关键词:压力传感器,AD620N放大电路,ADC模数转换,STM32单片机,OLED显示屏,矩阵键盘,电子秤。1. 1引言 本课程设计的电子秤以单片机为主要部件,利用全桥测量原理,通过对电路输出电压和标准重量的线性关系,建立具体的数学模型,将电压量纲(V)改为重量纲(g)即成为一台原始电子秤。其中测量电路中最主要的元器件就是电阻应变式传感器。电阻应变式传感器是传感器中应用最多的一种,本设计采用全桥测量电路,是系统产生的误差更小。输出的数据更精确。而AD620N放大电路的作用就是把传感器输出的微弱的模拟信号进行一定倍数的放大,以满足A/D转换器对输入信号电平的要求。A/D转换的作用是把模拟信号转变成数字信号,进行模拟量转数字量转换,然后把数字信号输送到显示电路中去,最后由OLED屏幕显示出测量结果。配置有矩阵键盘可以对电子秤进行一定的操作如去皮,计价,并可当下手动录入价格,并显示价格。 1.2系统的设计与理论分析1.2.1系统设计根据设计要求,设计的主要内容如下:1) 利用电阻应变式传感器,并采用全桥测量电路2) 设计一款电子秤,利用OLED屏幕显示被称物体的重量3) 利用矩阵键盘对电子秤进行去皮,计价,录入价格的操作。4) 电路分成以下几个部分: a.运放电路 b.电路的滤波及电压跟随器电路 c.单片机数据处理及控制电路,包括矩阵键盘,OLED屏幕等。 d.双电源供电及变压电路。1.2.2 基本工作原理及原理框图 OLED显示重量单片机数据处理及控制STM32的A/D模数转换Ad620n信号放大电路全桥电阻应变式传感器输出信号10V双电源供电10V单电源供电3.3V单电源供电图一:基本硬件系统结构图 全桥电阻应变式传感器输入电压,当标准重物放置在传感器之上时,电阻值发生改变,使加载到全桥电路上的输出电压发生变化,变化范围约为3mV到10mV运用AD620N仪表放大电路将微弱模拟信号放大,并经过LM358搭建的电压跟随器电路滤波。送至STM32单片机中进行A/D模数转换,将模拟信号转变成单片机能够识别的数字信号,并且利用单片机控制整个电路的同时,处理数字信号,并且控制在OLED中显示实时结果。OLED改变显示内容单片机识别,发出改变显示内容的指令矩阵键盘发出指令按键 图二:部分控制电路基本结构图 矩阵键盘上的按键被按下后,单片机识别并判断指令内容(如:去皮,计价,录入单价等),并向OLED屏发出改变显示内容的指令。 第二节 硬件电路的设计与选择2.1传感器的选择电阻应变式传感器是将被测量的力,通过它产生的金属弹性形变转换成电阻变化的元件。由电阻应变片和测量线路两部分组成。本次设计中使用YZC-133压力传感器。下表为相关技术参数。注:该技术参数为店家提供,本小组并未将所有参数进行检验。量程(kg)3kg综合误差(%F.S)0.05额定输出温度飘移(%F.S/10)0.15灵敏度(mv/v)1.00.1零点输出(mV/V)0.1非线性(%F.S)0.05输入电阻( )100050重复性(%F.S)0.05输出电阻( )100050滞后(%F.S)0.05绝缘电阻(M)2000(100VDC)蠕变(%F.S/3min)0.05推荐激励电压(V)312零点漂移(%F.S/1min)0.05工作温度范围 ()-10+50零点温度漂移(%F.S/10)0.2过载能力(%F.S)150 由于其激励电压越高,准确度越高的特性,本次设计使用10V电源供电。2.2信号放大电路的设计与选择由上文中可知,10V单电源供电的压力传感器输出最大值只有10mV,stm32的AD量程为03.3V,则可以放大330倍。此处由于信号源仅有10mV,并且放大倍数较大,选用AD620N仪表放大器而非一般的运算放大器做放大电路,以得到较高的精确度和输出电压的良好的线性性。 放大电路为: 图3 运算放大器电路 AD620是一种低功耗,高精度的仪表放大器,它只需要一个外界电阻,即可设置各种增益(1到1000)。AD620N与分离元件组成的仪表放大器相比较具有体积小,功耗低,精度高等优点。电源电压上15V均可以。之前曾经使用正5V的单电源供电,但是使用时发现输出电压在1.3V到3.6V之间,由于分度值的要求,不能满足本题的要求,故选用双电源供电。此处使用10V的双电源供电。由此公式可计算出我们所需要的电阻,放大330倍约需要使用150电阻。2.4电压跟随器电路设计由于精度要求,为了降低信号的噪声,此处增用一个电压跟随器电路已达成接近滤波的效果。电压跟随器的显著特点就是,输入阻抗高,而输出阻抗低。一般来说,输入阻抗可以达到几兆欧姆,而输出阻抗低,通常只有几欧姆,甚至更低。在电路中,电压跟随器一般做缓冲级(buffer)及隔离级。因为,电压放大器的输出阻抗一般比较高,通常在几千欧到几十千欧,如果后级的输入阻抗比较小,那么信号就会有相当的部分损耗在前级的输出电阻中。在这个时候,就需要电压跟随器进行缓冲。起到承上启下的作用。电压跟随器还可以提高输入阻抗,可以大幅度减小输入电容的大小,为应用高品质的电容提供保证。此处采用如图所示的电路。经过电压跟随器处理的信号噪声有明显的减少,使数据的稳定性提高。信号部分(AD620N仪表放大器和LM358电压跟随器)的电路如图所示2.5单片机数据处理及控制电路2.5.1 STM32 STM32系列芯片是由ST公司开发并发布一系列相关固件库以方便开发人员进行开发的一款实用性强,功能强大,开发较容易的32位微处理器(单片机)。在工业上适用于高性能、低成本、低功耗的嵌入式开发。作为一款32位单片机芯片,它使用了ARM公司的Cortex-M3高性能内核,并集成了12通道的DMA处理器,定时器,3个12位的us级的A/D转换器,2通道12位D/A转换器,3个SPI接口,2个IIC接口和串行接口UART,并因其集成度之高及价格低廉而被广泛使用。 在目前的时代发展中,电子产品对于传感器的使用逐渐增多,ADC功能也相应变得重要。而在这方面,STM32系列芯片上集成的外设ADC也可以算得上非常强大。增强型产品(STM32F103xC,STM32F103xD,STM32F103xE系列为ST推出的增强型产品)内嵌3个12位的ADC,每个多达21个外部通道,可以实现单次或多次扫描转换。ADC的结果可以左对齐或右对齐的方式存储在16位数据寄存器中。 对于ADC来说,分辨率,转换时间和ADC类型是最重要的。32的外设ADC有12位的分辨率,不能直接测量负电压;转换时间是可编程的,采样时间最短为1m;ADC类型则是逐次比较性的ADC。ADC的参考电压引脚分别为VREF+(模拟参考量正极),VDDA(模拟电源),VREF-(模拟参考负极),VSSA(模拟电源地)和模拟量输入脚(16个)。在过程中,输入信号经过通道被送到ADC部件,ADC部件需要收到触发信号才开始进行转换,如EXTI触发,定时器触发或软件触发。ADC部件接收到触发信号后,在ADCCLK时钟的驱动下对输入通道信号进行采样,并进行模数转换,其中ADCCLK是来自ADC预分频器的。得到的数据被保存在16位的规则通道寄存器中,可以通过CPU指令或DMA把它读取到内存(变量)中。 在ADC的程序设置上,可以设置多种模式,如同步注入模式,同步规则模式等,并可以进行多通道的轮流采集等设置,功能强大,简便易用。 32系列芯片不仅有强大的ADC,还有同样强大的定时器功能。在定时器方面,STM32有8个16位的定时器,其中TIM6,TIM7为基本定时器,TIM1,TIM8是高级定时器,其他为通用定时器。这些定时器有定时,信号频率测量,信号的PWM测量,PWM输出,三相六步电机控制及编码器接口等功能。图6. STM32单片机引脚图2.5.2单片机的引脚连接关系单片机与矩阵键盘的连接: GPIOPC1-PIN1 PC2-PIN2 PC3-PIN3 PC4-PIN4 PC5-PIN5 PC6-PIN6 PC7-PIN7 PC8-PIN8单片机与OLED屏幕的连接: GPIOPA3-CS PA4-RST PA5-DC PA6-SCLK(D0) PA7-SDIN(D1) 3.3V-VDD+(非单片机引脚) GND-GND(非单片机引脚) 单片机与传感电路的连接: VCC-3.3V GND-GND PA1-电压跟随器的信号口 其中PA1复用ADC1功能。第三节 软件程序的设计与选择3.1软件程序计算 经过放大,滤波与电压跟随器的信号电压从adc中取值,经过20组测量数据,我们测量出了电源电压(伏)与重量(千克)的关系(数据没有保存,测试成功之后只留下了变换函数),经过非线性校准之后的函数为 ( )/1000。3.2最终软件程序(部分) RCC.c,OLED.c,ADC.c,TIM.c,keyboard.c,main.c。其中adc.c如下:#include ProHead.h#include ADC.hextern float mass;extern float mass0;extern float mass_get;extern u8 danjia4;extern u8 danjia_point ; float adc_get1000;extern float mass00;extern float adc;u8 x;void ADC_Config(void) GPIO_InitTypeDef GPIO_InitStructure;ADC_InitTypeDef ADC_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 ;/| GPIO_Pin_1 | GPIO_Pin_2;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;GPIO_Init(GPIOA, &GPIO_InitStructure);ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; /独立模式 ADC_InitStructure.ADC_ScanConvMode = DISABLE; /连续多通道模式 ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; /连续转换 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; /转换不受外界决定 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; /右对齐 ADC_InitStructure.ADC_NbrOfChannel = 1; /扫描通道数 ADC_Init(ADC1, &ADC_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_71Cycles5); /通道X,采样时间为1.5周期,1代表规则通道第1个这个1是啥意思我不太清楚只有是1的时候我的ADC才正常。 ADC_Cmd(ADC1, ENABLE); /使能或者失能指定的ADC ADC_ResetCalibration(ADC1); /重置ADC1校准寄存器while(ADC_GetResetCalibrationStatus(ADC1);/等待ADC1校准重置完成ADC_StartCalibration(ADC1);/开始ADC1校准while(ADC_GetCalibrationStatus(ADC1);/等待ADC1校准完成ADC_SoftwareStartConvCmd(ADC1 ,ENABLE);/使能或者失能指定的ADC的软件转换启动功能void ADC_Read(void) static u16 i;float he = 0;u16 j;mass = 0;for(i=0;i1000;i+)while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) = RESET); /检查制定ADC标志位置1与否 ADC_FLAG_EOC 转换结束标志位 mass_get = (float)ADC_GetConversionValue(ADC1) / 4096 * 3.3;adc_geti = mass_get ; for(j=0;j1000;j+) he = he+adc_getj;mass_get = he/1000;mass_get = mass_get - mass00;adc = mass_get - mass0;mass = (0.7835*adc*adc*adc - 1.3802*adc*adc +1010.3*adc )/1000; void insertsort(float x,int n) int i , j;float a;for (i=0;in-1;i+) a=x i+1; j=i; while (a xj) xj+1 = xj; j-; xj+1 = a; Keyboard.c部分程序如下:void update_key(void) unsigned char i, j; for(i = 0; i 4; i+) /i?,? GPIO_ResetBits(key_outputi.GPIO_x, key_outputi.GPIO_pin); for(j = 0; j 4; j+) /j?,? if(GPIO_ReadInputDataBit(key_inputj.GPIO_x, key_inputj.GPIO_pin) = 0) u16 t = 40000; while (t-); if (GPIO_ReadInputDataBit(key_inputj.GPIO_x, key_inputj.GPIO_pin) = 0) keyij = 1; key_down(i,j); /printf(i=%drn,i); /printf(j=%drn,j); /keypoint = 0 ; /delay_ms(300); else keyij = 0; GPIO_SetBits(key_outputi.GPIO_x, key_outputi.GPIO_pin); Oled.c中部分程序如下:void show_mass(void) switch(oled_point)case 1 : /正常显示重量show_string_and_mass(); break;case 0 : /显示系统内存已有单价,可以进行价格选择OLED_ShowCHinese(0,0,14);OLED_ShowCHinese(16,0,15); OLED_ShowNum(28,3,danjia0,1,1); OLED_ShowNum(36,3,danjia1,1,1); OLED_ShowNum(44,3,danjia2,1,1); OLED_ShowNum(52,3,danjia3,1,1); break;case 2 : /键入单价界面break;case 3 : /计价界面jiage = mass * (danjia0*10 + danjia1 + danjia2*0.1 + danjia3*0.01);get_char(price,jiage);OLED_ShowNum(20,3,price4,1,1);OLED_ShowNum(28,3,price3,1,1);OLED_ShowNum(36,3,price2,1,1);OLED_ShowNum(44,3,price1,1,1);OLED_ShowNum(52,3,price0,1,1);OLED_ShowCHinese(60,3,16);/void show_m_by_number(void) get_char(fanhaoyang,mass);OLED_ShowNum(20,3,fanhaoyang4,1,1);OLED_ShowNum(28,3,fanhaoyang3,1,1);OLED_ShowNum(36,3,fanhaoyang2,1,1);OLED_ShowNum(44,3,fanhaoyang1,1,1);OLED_ShowNum(52,3,fanhaoyang0,1,1);void get_char(u8 get,float from) u16 i = (u16)(from*1000); get4 =(u8)(i/10000); get3 =(u8)(i - get4*10000)/1000); get2 =(u8)(i - get4*10000 - get3*1000) / 100); get1 =(u8)(i - get4*10000 - get3*1000 - get2*100)/10); get0 =(u8)(i - get4*10000 - get3*1000 - get2*100 - get1*10); get5 = 0;void show_string_and_mass(void)OLED_ShowString(0,0,weight);OLED_ShowString(68,3,weight2);get_char(fanhaoyang,mass);OLED_ShowNum(20,3,fanhaoyang4,1,1);OLED_ShowNum(28,3,fanhaoyang3,1,1);OLED_ShowNum(36,3,fanhaoyang2,1,1);OLED_ShowNum(44,3,fanhaoyang1,1,1);OLED_ShowNum(52,3,fanhaoyang0,1,1);if(qupi_point = 0)OLED_ShowCHinese(0,5,17);OLED_ShowCHinese(16,5,18);OLED_ShowCHinese(32,5,19);Main.c如下:#include Prohead.h#include bmp.hfloat mass_get; float mass0; float mass; float mass00 = 0;u8 keypoint ;u8 oled_point;u8 get5;u8 stop_point = 1;float adc;extern u8 fanhaoyang5;void ALL_Config(void) RCC_Config();LED_Config();USART_Config();ADC_Config();keyboard_init();oled_point = 1;OLED_Init();OLED_Clear(); mass0 = 0;int main() delay_ms(5000);ALL_Config();ADC_Read();mass00 = adc;while(1) TIM4_Int_Init(10,7199); if(stop_point)delay_ms(300);update_key();ADC_Read();show_mass(); else OLED_Clear(); update_key(); /printf(I am a robot.);/printf(mass = %frn,mass); 第四节 结论与分析确定设计方案后,在调试阶段经过电桥连接,调零电路、运放模拟、A/D模数转换器电路、单片机控制电路、数码管显示电路的实物模拟,各个部分工作正常。然后进行电路焊接,但是由于人为原因,电路存在虚焊、短接等错误,导致整个电路无法正常工作。经过反复检查调试,电路还是不能正常工作。 起初ad620n使用单电源供电方式,但是发现输出电压有区间限制在1.3V到3.3V,后把AD620N的REF脚接入-10V,VCC脚用+10V进行双电源供电。输出电压的限制就没有了,经过放大可以1V左右到3.3V(2kg满量程输入)。电压数据精确到mv位,满足从02kg最小分度值为1g的精确度。4.3总结 在此次课程设计中,我们遇到了以下问题: 1、电桥偏位电压过大。由于偏位电压过大,使电子秤量程大大降低。因此,我们通过分压调零电路,消除偏位电压。 2、运算放大器小信号放大困难。由于电桥输出的变量信号非常小,因此,我们必须将该小信号放大到达到A/D转换器的分辨率。运放芯片我们先后尝试了LM358、OP07、LM741,经过对比发现,LM741对小信号的放大较为稳定,不会出现较大的跳跃。经过八天的努力,最终如期完成任务,在做电子秤的过程中,我们碰到不少困难,但是经过请教老师、小组商讨、上网查资料,将困难一个个克服。1、 熟悉AT89S52单片机功能及工作特性,掌握其接口扩展方法。2、 通过对数据采集的分析,了解各种传感器、放大器及A/D转换器对信号的转换、传输,有了更深的认识。 元器件清单:STM32最小系统板一个、LM358(附芯片座)一个、压力传感器一个、AD620N仪表放大器一个(附芯片座)、OLED显示屏一块、电路板一块、10V电源(学生电源)、3.3V降压模块、电容,电阻、矩阵键盘。评语: 成绩:
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!