电子秤课程设计实验报告_第1页
电子秤课程设计实验报告_第2页
电子秤课程设计实验报告_第3页
电子秤课程设计实验报告_第4页
电子秤课程设计实验报告_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

...wd......wd......wd...电子设计实验报告电子科技大学设计题目:电子称姓名:学生姓名任务与要求一、任务使用电阻应变片称重传感器,实现电子秤。用砝码作称重比对。二、要求准确、稳定称重;称重传感器的非线性校正,提高称重精度;实现“去皮〞、计价功能;具备“休眠〞与“唤醒〞功能,以降低功耗。电子秤第一节绪论摘要:随着科技的进步,在日常生活以及工业运用上,对电子秤的要求越来越高。常规的测试仪器仪表和控制装置被更先进的智能仪器所取代,使得传统的电子测量仪器在远离、功能、精度及自动化水平定方面发生了巨大变化,并相应的出现了各种各样的智能仪器控制系统,使得科学实验和应用工程的自动化程度得以显著提高。影响其精度的因素主要有:机械构造、传感器和数显仪表。在机械构造方面,因材料构造强度和刚度的限制,会使力的传递出现误差,而传感器输出特性存在非线性,加上信号放大、模数转换等环节存在的非线性,使得整个系统的非线性误差变得不容无视。因此,在高精度的称重场合,迫切需要电子秤能自动校正系统的非线性。此外,为了保证准确、稳定地显示,要求所采用的ADC具有足够的转换位数,而采用高精度的ADC,自然增加了系统的成本。基于电子秤的现状,本文提出了一种简单实用并且精度高的智能电子秤设计方案。通过运用很好的集成电路,使测量精度得到了大大提高,由于采用数字滤波技术,使稳态测量的稳定性和动态测量的跟随性都相当好。并取得了令人满意的效果。关键词:压力传感器,AD620N放大电路,ADC模数转换,STM32单片机,OLED显示屏,矩阵键盘,电子秤。1引言本课程设计的电子秤以单片机为主要部件,利用全桥测量原理,通过对电路输出电压和标准重量的线性关系,建设具体的数学模型,将电压量纲〔V〕改为重量纲〔g〕即成为一台原始电子秤。其中测量电路中最主要的元器件就是电阻应变式传感器。电阻应变式传感器是传感器中应用最多的一种,本设计采用全桥测量电路,是系统产生的误差更小。输出的数据更准确。而AD620N放大电路的作用就是把传感器输出的微弱的模拟信号进展一定倍数的放大,以满足A/D转换器对输入信号电平的要求。A/D转换的作用是把模拟信号转变成数字信号,进展模拟量转数字量转换,然后把数字信号输送到显示电路中去,最后由OLED屏幕显示出测量结果。配置有矩阵键盘可以对电子秤进展一定的操作如去皮,计价,并可当下手动录入价格,并显示价格。1.2系统的设计与理论分析1.2.1系统设计根据设计要求,设计的主要内容如下:利用电阻应变式传感器,并采用全桥测量电路设计一款电子秤,利用OLED屏幕显示被称物体的重量利用矩阵键盘对电子秤进展去皮,计价,录入价格的操作。电路分成以下几个局部:a.运放电路b.电路的滤涉及电压跟随器电路c.单片机数据处理及控制电路,包括矩阵键盘,OLED屏幕等。d.双电源供电及变压电路。1.2.2基本工作原理及原理框图OLED显示重量单片机数据处理及控制STM32的A/D模数转换Ad620n信号放大电路全桥电阻应变式传感器输出信号OLED显示重量单片机数据处理及控制STM32的A/D模数转换Ad620n信号放大电路全桥电阻应变式传感器输出信号10V双电源供电10V单电源供电10V双电源供电10V单电源供电3.3V单电源供电3.3V单电源供电图一:基本硬件系统构造图全桥电阻应变式传感器输入电压,当标准重物放置在传感器之上时,电阻值发生改变,使加载到全桥电路上的输出电压发生变化,变化范围约为3mV到10mV运用AD620N仪表放大电路将微弱模拟信号放大,并经过LM358搭建的电压跟随器电路滤波。送至STM32单片机中进展A/D模数转换,将模拟信号转变成单片机能够识别的数字信号,并且利用单片机控制整个电路的同时,处理数字信号,并且控制在OLED中显示实时结果。OLED改变显示内容单片机识别,发出改变显示内容的指令OLED改变显示内容单片机识别,发出改变显示内容的指令矩阵键盘发出指令按键矩阵键盘发出指令按键图二:局部控制电路基本构造图矩阵键盘上的按键被按下后,单片机识别并判断指令内容〔如:去皮,计价,录入单价等〕,并向OLED屏发出改变显示内容的指令。第二节硬件电路的设计与选择2.1传感器的选择电阻应变式传感器是将被测量的力,通过它产生的金属弹性形变转换成电阻变化的元件。由电阻应变片和测量线路两局部组成。本次设计中使用YZC-133压力传感器。下表为相关技术参数。注:该技术参数为店家提供,本小组并未将所有参数进展检验。量程〔kg〕3kg综合误差(%F.S)0.05额定输出温度飘移(%F.S/10℃)≤0.15灵敏度(mv/v)1.0±0.1零点输出(mV/V)±0.1非线性(%F.S)0.05输入电阻(Ω)1000±50重复性(%F.S)0.05输出电阻(Ω)1000±50滞后(%F.S)0.05绝缘电阻(MΩ)≥2000(100VDC)蠕变(%F.S/3min)0.05推荐鼓励电压(V)3~12零点漂移(%F.S/1min)0.05工作温度范围(℃)-10~+50零点温度漂移(%F.S/10℃)0.2过载能力(%F.S)150由于其鼓励电压越高,准确度越高的特性,本次设计使用10V电源供电。2.2信号放大电路的设计与选择由上文中可知,10V单电源供电的压力传感器输出最大值只有10mV,stm32的AD量程为0~3.3V,那么可以放大330倍。此处由于信号源仅有10mV,并且放大倍数较大,选用AD620N仪表放大器而非一般的运算放大器做放大电路,以得到较高的准确度和输出电压的良好的线性性。放大电路为:图3运算放大器电路AD620是一种低功耗,高精度的仪表放大器,它只需要一个外界电阻,即可设置各种增益〔1到1000〕。AD620N与别离元件组成的仪表放大器相比较具有体积小,功耗低,精度高等优点。电源电压上±15V均可以。之前曾经使用正5V的单电源供电,但是使用时发现输出电压在1.3V到3.6V之间,由于分度值的要求,不能满足此题的要求,应选用双电源供电。此处使用±10V的双电源供电。由此公式可计算出我们所需要的电阻,放大330倍约需要使用150Ω电阻。2.4电压跟随器电路设计由于精度要求,为了降低信号的噪声,此处增用一个电压跟随器电路已达成接近滤波的效果。电压跟随器的显著特点就是,输入阻抗高,而输出阻抗低。一般来说,输入阻抗可以到达几兆\t"://baike.baidu/_blank"欧姆,而输出阻抗低,通常只有几欧姆,甚至更低。在电路中,电压跟随器一般做缓冲级(buffer)及\t"://baike.baidu/_blank"隔离级。因为,电压放大器的输出阻抗一般比较高,通常在几千欧到几十千欧,如果后级的输入阻抗比较小,那么信号就会有相当的局部损耗在前级的输出\t"://baike.baidu/_blank"电阻中。在这个时候,就需要电压跟随器进展缓冲。起到\t"://baike.baidu/_blank"承上启下的作用。电压跟随器还可以提高输入阻抗,可以大幅度减小输入电容的大小,为应用高品质的电容提供保证。此处采用如以下列图的电路。经过电压跟随器处理的信号噪声有明显的减少,使数据的稳定性提高。信号局部〔AD620N仪表放大器和LM358电压跟随器〕的电路如以下列图2.5单片机数据处理及控制电路2.5.1STM32STM32系列芯片是由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位的分辨率,不能直接测量负电压;转换时间是可编程的,采样时间最短为1μm;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--PIN1PC2--PIN2PC3--PIN3PC4--PIN4PC5--PIN5PC6--PIN6PC7--PIN7PC8--PIN8单片机与OLED屏幕的连接:GPIOPA3--CSPA4--RSTPA5--DCPA6--SCLK(D0)PA7--SDIN(D1)3.3V--VDD+(非单片机引脚)GND--GND〔非单片机引脚〕单片机与传感电路的连接:VCC--3.3VGND--GNDPA1--电压跟随器的信号口其中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.h"externfloatmass;externfloatmass0;externfloatmass_get;externu8danjia[4];externu8danjia_point;floatadc_get[1000];externfloatmass00;externfloatadc;u8x;voidADC_Config(void){ GPIO_InitTypeDefGPIO_InitStructure; ADC_InitTypeDefADC_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的软件转换启动功能voidADC_Read(void){ staticu16i; floathe=0; u16j; mass=0; for(i=0;i<1000;i++){ while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);//检查制定ADC标志位置1与否ADC_FLAG_EOC转换完毕标志位 mass_get=((float)ADC_GetConversionValue(ADC1))/4096*3.3; adc_get[i]=mass_get;} for(j=0;j<1000;j++){he=he+adc_get[j]; } 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;}voidinsertsort(floatx[],intn){inti,j; floata; for(i=0;i<n-1;i++) {a=x[i+1]; j=i; while(a<x[j]){ x[j+1]=x[j]; j--; } x[j+1]=a; }}Keyboard.c局部程序如下:voidupdate_key(void){ unsignedchari,j; for(i=0;i<4;i++)//i????,?????? {GPIO_ResetBits(key_output[i].GPIO_x,key_output[i].GPIO_pin); for(j=0;j<4;j++)//j????,????????????? { if(GPIO_ReadInputDataBit(key_input[j].GPIO_x,key_input[j].GPIO_pin)==0){ u16t=40000; while(t--); if(GPIO_ReadInputDataBit(key_input[j].GPIO_x,key_input[j].GPIO_pin)==0){key[i][j]=1; key_down(i,j);//printf("i=%d\r\n",i);//printf("j=%d\r\n",j);//keypoint=0; //delay_ms(300); } } else{key[i][j]=0; } } GPIO_SetBits(key_output[i].GPIO_x,key_output[i].GPIO_pin); }}Oled.c中局部程序如下:voidshow_mass(void){switch(oled_point){ case1://正常显示重量 show_string_and_mass(); break; case0://显示系统内存已有单价,可以进展价格选择 OLED_ShowCHinese(0,0,14); OLED_ShowCHinese(16,0,15); OLED_ShowNum(28,3,danjia[0],1,1); OLED_ShowNum(36,3,danjia[1],1,1); OLED_ShowNum(44,3,danjia[2],1,1); OLED_ShowNum(52,3,danjia[3],1,1); break; case2://键入单价界面 break; case3://计价界面 jiage=mass*(danjia[0]*10+danjia[1]+danjia[2]*0.1+danjia[3]*0.01); get_char(price,jiage); OLED_ShowNum(20,3,price[4],1,1); OLED_ShowNum(28,3,price[3],1,1); OLED_ShowNum(36,3,price[2],1,1); OLED_ShowNum(44,3,price[1],1,1); OLED_ShowNum(52,3,price[0],1,1); OLED_ShowCHinese(60,3,16);//¼¼}}voidshow_m_by_number(void){get_char(fanhaoyang,mass); OLED_ShowNum(20,3,fanhaoyang[4],1,1); OLED_ShowNum(28,3,fanhaoyang[3],1,1); OLED_ShowNum(36,3,fanhaoyang[2],1,1); OLED_ShowNum(44,3,fanhaoyang[1],1,1); OLED_ShowNum(52,3,fanhaoyang[0],1,1); }voidget_char(u8get[],floatfrom){u16i=(u16)(from*1000);get[4]=(u8)(i/10000);get[3]=(u8)((i-get[4]*10000)/1000);get[2]=(u8)((i-get[4]*10000-get[3]*1000)/100);get[1]=(u8)((i-get[4]*10000-get[3]*1000-get[2]*100)/10);get[0]=(u8)(i-get[4]*10000-get[3]*1000-get[2]*100-get[1]*10);get[5]='\0';}voidshow_string_and_mass(void){OLED_ShowString(0,0,weight); OLED_ShowString(68,3,weight2); get_char(fanhaoyang,mass); OLED_ShowNum(20,3,fanhaoyang[4],1,1); OLED_ShowNum(28,3,fanhaoyang[3],1,1); OLED_ShowNum(36,3,fanhaoyang[2],1,1); OLED_ShowNum(44,3,fanhaoyang[1],1,1); OLED_ShowNum(52,3,fanhaoyang[0],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.h"floatmass_get;floatmass0;floatmass;floatmass00=0;u8keypoint;u8oled_point;u8get[5];u8stop_point=1;floatadc;externu8fanhaoyang[5];voidALL_Config(void){ RCC_Config(); LED_Config(); USART_Config(); ADC_Config(); keyboard_init

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论