TI邀请赛简易电子秤(B题)_第1页
TI邀请赛简易电子秤(B题)_第2页
TI邀请赛简易电子秤(B题)_第3页
TI邀请赛简易电子秤(B题)_第4页
TI邀请赛简易电子秤(B题)_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、2012年年TI杯杯模模拟拟电电子子系系统统专专题题邀邀请请赛赛报报告告 29 队队 简易电子秤(简易电子秤(B 题)题)摘要:摘要:本设计以 TI 的 MSP430FR5739 单片机为核心并使用现场所提供的电阻应变片称重传感器、运算放大器等器件,设计并制作一款简易电子秤,完成题目所要求的 10200g 范围的称重和去皮、计价等显示功能并达到高精度显示的要求。同时具有休眠等低功耗的系统工作模式,且完成了题目要求的“唤醒”功能。关键字:关键字:简易 高精度 休眠 低功耗 唤醒放大器模数转换处理器键 盘液晶显示传感器1、系统结构、系统结构 : 本系统设计的是一个简易电子秤,系统采用电阻应变片称重

2、传感器作为系统传感器,其中采样信号从传感器绿色和白色信号线传出作为放大器的输入信号,放大器由两片 INA333 级联构成,信号经放大器放大到合适的幅度后再经过模数转换器传送给处理器,最终将处理过的数据结果经由液晶显示。 图 1 系统整体方案2、实现方案:、实现方案:本系统要求利用所提供的电阻应变片称重传感器、运算放大器等器件,设计并制作一款简易电子秤。题目要求以数字方式稳定地显示被测物体重量;称重范围为 10200g,并且在全称重范围内称重精度优于 1%,尽量提高称重精度;根据题目要求,本系统可以分为信号采集模块,信号放大模块,模数转换模块,处理器模块,液晶显示模块,和键盘输入模块。一、信号采

3、集模块设计系统设计信号采集模块使用的是电阻应变片称重传感器,此传感器共有四根线,分别为红、白、绿、黑。其中红线接电源正,白线接地,绿线和黑线都为信号线,当电阻应变片称重传感器式传感器感受到的压力不同时,绿线和黑线两根信号线会传出不同的信号,通过对信号的放大,分析和处理得出电阻应变片称重传感器上面受到的压力。二、信号放大模块设计系统信号由电阻应变片称重传感器产生,由于传感器产生的信号幅度很小,不利于分析,因此用信号放大器将信号放大后再进行分析和处理。在放大器的制作过程中,选用 INA333 做放大元件,选用 OPA734 做减法器来抑制零点漂移。最后用 RC 滤波器做滤波,得到稳定精确的数据。三

4、、模数转换模块根据题目要求,系统在全称重范围内称重精度优于 1%,并尽量提高称重精度;并且在实现计算价格功能方面,要求系统可以显示最大金额为 999.9 元,并且金额误差不大于 0.1 元;由此可知,系统所需 A/D 位数应该高于 12 位,因此设计时选用 16 位 ADS1114 作为模数转换芯片。四、液晶显示模块,题目要求系统低功耗,所以在显示方面我们选择了超低功耗的 NOKIA5110显示屏提供系统数据显示。该显示屏在关闭背光模式下可以低功耗正常工作。3、电路设计与原理图:、电路设计与原理图:一、过压保护电路设计在电子设计过程中,经常出现电压过大烧毁电路的情况,为了防止此类事故发生,在设

5、计系统的时候,设计了过压保护电路,当电压达到预设的过压保护临界点的时候,电路自动断路,防止电压过达烧坏后级电路。具体电路如图2 所示,当电压达到 10v 时,LM311 会使 8050 三极管导通,从而驱动继电器,电压自动关闭,选用二极管 IN4007 的作用为续流二极管,通过此电路设计,保证了系统能够长期有效安全的工作。 图 2 过压保护电路二、信号采集模块电路实际信号采集模块的内部电路结构如图 3 所示,其中 R1、R2、R3、R4 分别是应变电阻,A、B、C、D 分别为四个电阻的连接点,其中,A 点和 C 点与电源连接,B 点与 D 点为信号输出端,当应变片电阻受到的压力不同时,电阻的阻

6、值会发生变化,从而 B 点和 D 点的输出电压会发生变化,这个电压信号经过后级的放大和处理,从而分析出应变片电阻所受压力大小,完成信号采集、处理功能。 图 3 应变片电阻传感器内部电路三、信号放大电路设计在信号放大的过程中,使用 INA333 做为信号放大器,如图 4 所示,其中利用 R1、R2 和 R3、R4 分压分别获得基准电压,利用 OPA2530 做电压缓冲,OPA734 通过减法运算,抑制了零点漂移。最后利用 RC 滤波器滤去系统产生的纹波,使系统输出稳定准确的信号。 图 4 信号放大电路原理图四、模数转换电路:在电路设计中,对传感器输出的模拟信号,单片机无法直接读取它的数值是多少,

7、所以需要一个 A/D 转换电路将模拟信号转换为数字信号,系统采用的是型号为 ADS1114 的 A/D 芯片,这款芯片是具有内部基准的超小型、低功耗、16 位模数转换器。ABCDF 图 5 ADS1114 应用电路原理图五、核心控制电路设计系统选用的单片机是由 TI 提供的 MSP430FR5739,具体原理图如图 6 所示。 图 6 MSP430FR57394、系统校准方法、系统校准方法:020040060080010001200140016001800200010g30g50g70g90g110g130g150g170g190g系列1在对电子称的测试过程中,我们发现电子秤称得的数据与电子称

8、上所放砝码不满足严格的线性关系。我们发现,在一定小范围内电子秤的线性度较好,因此我们使用分段线性插值的方法,线性运算锁定在电子秤量程的若干小部分。虽然在整个量程范围内,电子秤传感器的线性度不是很好,但是在量程范围内某个小的区间内,电子秤传感器的线性度还是很好的。在具体操作过程中我们把电子秤的量程平均分为 19 分,由此我们得到 19 个区间,然后通过测试测得每个区间边缘处的电压值,当测得电压值在这个区间时,我们利用线性关系直接算出这点的电压值,从而得出这点对应的质量值,通过以上处理,对电子秤的非线性性进行了补偿,使系统在测量范围内得到的数据满足精度要求。 图 7 砝码质量与相关电压拟合图5、称

9、重测试数据、称重测试数据一、测试工具:Agilent U1272 万用表MSO-X 3054A 示波器学生模拟电源砝码二、测试方法测试任务一:电压保护电路测试启动系统,在系统正常工作时,将学生电源电压增大,在测试时我们发现,当系统电压大于 10v 时,系统可以自动断电保护电路,这一操作验证了系统可以自动断电保护的功能测试任务二:称重稳定时间测试启动系统,在系统稳定时用镊子在电子秤头盘上放置任意质量的砝码,同时开始计时,当系统读数稳定时停止计时,记录的这段时间就是系统达到稳定所需的时间。在测试过程中,进行了多次测量,然后取平均值作为系统稳定所需的时间砝码质量10g20g30g40g50g60g7

10、0g80g90g100g稳定时间4s4s3s2.5s4s3.5s3s4s2.5s4s砝码质量110g120g130g140g150g160g170g180g190g200g稳定时间3s3s3.5s4s4s3s3.5s4s3s4s 表 1 稳定时间与砝码质量关系表测试任务三:称重精确度测试启动系统,用镊子在电子秤托盘上一次放置 10g、20g、 、 、200g 砝码,记录每次放置砝码时系统显示屏的读数,如表 2 所示,观察并分析可以知道,在测量范围内系统的称重精度优于 1%,满足题目要求。 砝码质量10g20g30g40g50g60g70g80g90g100g称重质量10.05g20.06g30

11、.06g39.94g50.12g60.16g70.20g80.16g90.05g100.05g砝码质量110g120g130g140g150g160g170g180g190g200g称重质量110.96g120.12g130.96g139.90g150.48g160.16g169.96g180.02g190.04g199.94g 表二 称重质量与砝码质量关系表测试任务四:去皮功能测试启动系统,在电子秤托盘上放置任意砝码作为皮,通过按键输入去皮功能指令。系统会自动去皮置零,在继续放置砝码时,系统会在零的基础上称量出后放砝码的质量,在计算系统金额的时候,系统自动略去去皮的质量,在实际测试的时候,可

12、以重新设定“零”重量点,满足题目要求。测试任务五:金额与金额精确度测试启动系统,在电子秤托盘上放置任意砝码,稳定后通过按键输入金额计算指令与单价,系统会自动计算出金额总值。在误差允许范围内,系统金额误差控制在 0.1 元以下,满足题目要求。测试任务六:休眠“低功耗”功能测试启动系统,在电子秤托盘上放置 10200g 任意质量砝码,当系统稳定后开始计时,如果系统在 20s 时进入休眠状态,则说明系统具有低功耗功能,在实际测试时我们可以看到,当系统稳定 20s 时系统的显示屏幕会自动关闭,系统此时进入了低功耗状态,由此可以验证系统具有低功耗功能。 6、系统程序设计、系统程序设计系统程序流程图图 8

13、 程序流程图7、参考文献、参考文献1 曹磊著;MSP430 单片机 C 程序设计与实践.北京:北京航空航天大学出版社.2007.72 谭浩强著;C 语言程序设计(第四版).北京:清华大学出版社.2010.6附录:程序代码(部分):void Delay_ms(unsigned int);void Delay_us(unsigned int);#include msp430fr5739.h#include Nokia5110.h#include ADS1115_I2C.h#include ADS1115.h#define key_scan P3OUT#define key_read (P1IN &

14、amp; 0 x0f)unsigned char Key_Scan();void LCD_initial();unsigned int V_mes;unsigned int V_zero;int V_mod;int Wt; /0.1gint Wt_tmp;int Wt_zero;int Wtg;int Wtd;unsigned int Pri;unsigned int Pri_m;unsigned char P_flag;float Pri_r;float Tot_r;unsigned int Tot_y;unsigned int Tot_d;/*const float Vth_ar20 =

15、88.5,177.5,266.5,355.5,444.5,535.5,623.5,714.5,802.5,891.5, 980.5,1071.0,1159.5,1248.5,1338.0,1427.5,1517.5,1607.5,1696.0,1783.5;const float Wth_ar20 = 1000.0,2000.0,3000.0,4000.0,5000.0,6000.0,7000.0,8000.0,9000.0,10000.0, 11000.0,12000.0,13000.0,14000.0,15000.0,16000,17000.0,18000.0,19000.0,20000.

16、0;*/const float Vth_ar20 = 88.5,177.5,266.5,355.5,444.5,535.5,623.5,714.5,802.5,891.5, 980.5,1071.0,1159.5,1248.5,1338.0,1427.5,1517.5,1607.5,1696.0,1783.5;const float Wth_ar20 = 1000.0,2000.0,3000.0,4000.0,5000.0,6000.0,7000.0,8000.0,9000.0,10000.0, 11000.0,12000.0,13000.0,14000.0,15000.0,16000,170

17、00.0,18000.0,19000.0,20000.0;void main(void) /Description: Configure ACLK = SMCLK = MCLK = 8MHz WDTCTL = WDTPW + WDTHOLD; / Stop WDT CSCTL0_H = 0 xA5; CSCTL1 |= DCOFSEL0 + DCOFSEL1; / Set max. DCO setting CSCTL2 = SELA_3 + SELS_3 + SELM_3; / set ACLK = MCLK = DCO CSCTL3 = DIVA_0 + DIVS_0 + DIVM_0; /

18、 set all dividers /LCD initializition Nokia5110_initial(); Nokia5110_set_xy(0,0); Nokia5110_write_str( UESTC); Nokia5110_set_xy(0,1); Nokia5110_write_str(ADC:); Nokia5110_set_xy(0,2); Nokia5110_write_str(Wei:); Nokia5110_set_xy(0,3); Nokia5110_write_str(Pri:); Nokia5110_set_xy(0,4); Nokia5110_write_

19、str(Tot:); /Key scan PORT P3DIR |= 0 x0f; /P3.0P3.3 output P1DIR &= 0 xf0; /P1.0P1.3 input /ADC initializition ADS1115_configure(); ADS1115_point_cons(); P1DIR &= BIT6; P1DIR |= BIT7; unsigned char key; unsigned int cnt=0, cnt2=0, cnt3, cnt_sleep=0; float Vdc=0; int tmp; V_zero = 30; Wt_zero

20、 = 0; Pri = 0; while (1) if(key=Key_Scan() != 0 xff) if(cnt_sleep=19) LCD_initial(); cnt_sleep=0; cnt2 = 0; if(key = 0 x0a) V_zero=V_mes; Wt_zero=0; cnt2=0; else if(key = 0 x0b) Wt_zero = Wt; cnt2=0; else if(key = 0 x0c) Nokia5110_set_xy(25,3); Nokia5110_write_str(input ); Delay_ms(800); Nokia5110_s

21、et_xy(25,3); Nokia5110_write_str( ); Nokia5110_set_xy(25,3); Pri_m=1; Pri=0; P_flag=0; while(key=Key_Scan()!=0 x0f) if(key0 x0a & !P_flag) Nokia5110_write_integer(key); Pri = Pri*10 + key; else if(key = 0 x0e) Nokia5110_write_str(.); P_flag = 1; else if(key0 x0a & P_flag) Nokia5110_write_int

22、eger(key); Pri = Pri*10 + key; Pri_m *= 10; Nokia5110_write_str(); Pri_r = (float)Pri)/(float)Pri_m); if(P1IN & BIT6) if(cnt127) tmp=ADS1115_read(); Vdc+=(float)tmp); cnt+; else V_mes = (int)(Vdc/2048.0); /(11.16)/1.179/2048=1/216.36, *0.998457-8.454738 V_mod = V_mes - V_zero; Vdc=0; cnt=0; if(c

23、nt = 127) if(P1OUT & BIT7) P1OUT &= BIT7; else P1OUT |= BIT7; Nokia5110_set_xy(25,1); Nokia5110_write_integer(V_mod); Nokia5110_write_str( ); Wt_tmp = Wt; if(V_mod=0) Wt = 0; else if(V_modVth_ar19) Wt = (unsigned int)(Wth_ar18 + (V_mod-Vth_ar18)*1000.0/(Vth_ar19-Vth_ar18); else for(cnt3=0;cn

24、t3=18;cnt3+) if(V_mod Vth_arcnt3) Wt = (unsigned int)(Wth_arcnt3 + (V_mod-Vth_arcnt3)*1000.0/(Vth_arcnt3+1-Vth_arcnt3); /*Wt = (int)(1.1198*(float)V_mod) + 1.3308);*/ if(cnt2 =0) Nokia5110_set_xy(25,2); Nokia5110_write_integer(Wtg); Nokia5110_write_str(.); if(Wtd10) Nokia5110_write_str(0); Nokia5110

25、_write_integer(Wtd); Nokia5110_write_str( ); else Nokia5110_set_xy(25,2); Nokia5110_write_str(-); Nokia5110_write_integer(-Wtg); Nokia5110_write_str(.); if(-Wtd40 | Wt_tmp-Wt=0) Nokia5110_set_xy(25,2); Nokia5110_write_integer(Wtg); Nokia5110_write_str(.); if(Wtd10) Nokia5110_write_str(0); Nokia5110_

26、write_integer(Wtd); Nokia5110_write_str( ); else Nokia5110_set_xy(25,2); Nokia5110_write_str(-); Nokia5110_write_integer(-Wtg); Nokia5110_write_str(.); if(-Wtd=19) LCD_initial(); cnt_sleep = 0; if(Wtg*100+Wtd = 0) Tot_r = (float)(Wtg*100+Wtd)*Pri_r/10.0; Tot_y = (unsigned int)(Tot_r/10); Tot_d = (un

27、signed int)(Tot_r - (float)Tot_y*10.0)*10); else Tot_y = 0; Tot_d = 0; Nokia5110_set_xy(25,4); Nokia5110_write_integer(Tot_y); Nokia5110_write_str(.); if(Tot_d10) Nokia5110_write_str(0); Nokia5110_write_integer(Tot_d); Nokia5110_write_str( ); if(cnt_sleep19) cnt_sleep+; else Nokia5110_clear(); nokia

28、5110_rst_l; void Delay_ms(unsigned int m) while(m-) int i=1340; while(i-); void Delay_us(unsigned int u) /10us while(u-);unsigned char Key_Scan() static unsigned char key=0 xff; static unsigned char i; static unsigned char key_scan_tmp; for(i=0;i=3;i+) key_scan_tmp = key_scan = (0 x01i); Delay_ms(2); if(key_read != 0 x00) Delay_ms(5); if(key_read

温馨提示

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

评论

0/150

提交评论