电子系统设计课程设计报告

  • 格式:doc
  • 大小:7.44 MB
  • 文档页数:17

《电子系统设计》课程设计报告姓名:___________________学号:___________________班级:___________________目录目录 (1)一.设计题目 (2)二.设计目的 (2)三.设计内容及要求 (2)设计原理 (2)(1) 传感器测量电路 (2)(2) 放大电路 (3)(3) A/D转换电路 (3)(4) 传感器供电电源 (3)四、设计提示 (4)(1) 放大电路设计 (4)(2) 传感器专用直流稳压电源 (5)(3) 单片机电路 (5)(4) 电路调试 (8)(5) 软件设计 (8)(6) 仿真调试 (13)五、设计总结 (15)六、注意事项 (15)附录: (15)一.设计题目压力测量仪 二.设计目的1) 使学生掌握电阻应变传感器的原理、选用及正确使用方法;了解压力测量仪的工作原理。

2) 提高学生的知识运用能力和系统设计能力。

3) 通过安装、调试电路、软件调试等实践环节,提高学生的动手能力和分析问题、解决问题的能力。

三.设计内容及要求设计原理压力测量仪由以下五个部分组成:传感器、传感器驱动电源、前置放大器、滤波放大器、A/D 转换路、单片机系统、显示器电路等组成。

其原理框图如图1所示:(1) 传感器测量电路压力传感器的测量电路通常使用电桥测量电路,它将应变电阻值的变化转换为电压的变化,这就是可用的输出信号。

电桥电路由四个电阻组成,如图2所示:桥臂电阻R1,R2,R3和R4,其中两对角点接电源电压伟U ,另两个对角电阻应变式传感器前置放大器A/D 转 换 器 89C52单片机键盘接口压力显示滤波放大器传感器驱动电源图1压力测量仪结构框图点为桥路的输出Uo,桥臂电阻为应变电阻。

当R1R4=R2R3时,电桥平衡,则测量对角线上的输出Uo为零。

当传感器受到外界物体重量影响时,电桥的桥臂阻值发生变化,电桥失去平衡,则测量对角线上有输出,Uo≠0。

图2 传感器电桥测量电路(2) 放大电路压力测量仪的放大系统是把传感器输出的微弱信号进行放大,放大的信号应能满足A/D转换的要求。

该系统使用的A/D转换可用0809 A/D转换,所以放大器的输出应为0V ~5V。

为了准确测量,放大系统设计时应保证输入级是高阻,输出级是低阻,系统应具有高的抑制共模干扰的能力。

(3) A/D转换电路传感器的输出信号放大后,通过A/D转换器把模拟量转换成数字量。

(4) 传感器供电电源参考图2,设四个桥臂的初始电阻相等且均为R,当有重力作用时,两个桥臂电阻增加△R,而另外两个桥臂的电阻减少,减小量也为△R。

由于温度变化影响使每个桥臂电阻均变化△RT。

这里假设△R远小于R,并且电桥负载电阻为无穷大,则电桥的输出为:Uo= U( R+△R+△RT)/( R-△R+△RT +R+△R+△RT)- U( R-△R+△RT)/( R+△R+△RT +R-△R+△RT)= U△R/(R+△RT)即Uo= U*△R/(R+△RT)说明电桥的输出与电桥的电源电压E的大小和精度有关,还与温度有关。

如果△RT=0,则电桥的电源电压U恒定时,电桥的输出与△R/R成正比。

当△RT≠0时,即使电桥的电源电压U恒定,电桥的输出与△R/R也不成正比。

这说明恒压源供电不能消除温度影响。

由于工艺过程不能使每个桥臂电阻完全相等,因此,在零压力时,仍有电压输出。

2.设计要求(1)以单片机为核心,设计压力测量系统。

(2)传感信号处理电路。

该电路实现微伏级信号的放大、滤波。

(3)A/D通道设计。

实现传感信号模拟量的转换,单片机获取压力信息。

(4)键盘及接口电路。

(5)显示电路。

(6)满足要求的系统软件。

四、设计提示(1) 放大电路设计首先,由于传感器测量范围是0 ~100g,灵敏度约0.5mV/V,其输出信号只有0 ~3mV左右;而A/D转换的输入应为0V ~5V,现取0V-4V对应显示0 ~100g,当量为40mV/g,因此要求放大器的放大倍数约为1300倍,一般采用二级放大器组成。

其次,在电路设计过程中应考虑电路抗干扰环节、稳定性。

选择低失调电压,低漂移,高稳定性,经济性的芯片。

电源电压±5V。

最后,电路中还应有调零和调增益的环节;才能保证电子电平没有称重时显示零读数;测压力时读数正确反映被测压力。

(2) 传感器专用直流稳压电源传感器的电源是+6.6V电压。

对于给定的传感器其输入电阻为1KΩ;输出电阻为500Ω。

(3) 单片机电路单片机电路完成对A/D通道的数据采集,信号处理及显示。

A/D转换电路、单片机电路的设计,画出电路图。

如下图所示其PCB图如下所示(4) 电路调试调零:±5V电压接到传感器恒压电路的输入端,测量传感器的输出。

在空载时,传感器的输出应为零,但由于制造工艺误差,输出一般不为零,调节调零电路,使其输出为零。

定标:当传感器放上100g的砝码时,放大器的输出应为4V。

小于4V或大于4V时应调节放大器的增益。

加载正确的变化应为:测量0 ~100g,输出电压变化约为0 ~4V.电路实物调试图如下(5) 软件设计系统软件主要包括:数据采集、非线性补偿、数字滤波、传感器建模、标度变换、键盘显示等模块。

源程序如下:#include "STC12C5A60S2.h"#include "intrins.h"#include "stdio.h"sbit p20=P2^0;sbit p21=P2^1;sbit p22=P2^2;sbit p23=P2^3;#define vcc 5.0; //基准电压#define ADC_POWER 0x80; //adc电源控制#define ADC_FLAG 0xef; //adc转换完成标志位#define ADC_START 0x08; //adc启动#define SPEED0 0x00; //540时钟周期#define SPEED1 0x20; //360时钟周期#define SPEED2 0x40; //180时钟周期#define SPEED3 0x60; //90时钟周期unsigned char land[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //设置P1ASF寄存器,选择P1口功能(i/o口或ad),0x00是P1口全为I/O口用unsigned char ADC_CHS[8]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};//adc通道输入选择,(其中SPEED1,SPEED0为1,1,90个时钟周期转换一次)sbit rs=P3^2; //lcd寄存器选择端sbit rw=P3^3; //lcd读写端sbit e=P3^4; //lcd使能端unsigned char lcd0[16];unsigned char lcd1[16];unsigned char line; //lcd行标志void delay(unsigned int z) //延时0.1ms{unsigned int x,y;for(x=z; x>0; x--)for(y=132; y>0; y--);}void writecom(unsigned char com) //写lcd指令{rs=0;rw=0;P0=com;e=1;delay(15); //检测忙信号e=0;}void writedat(unsigned char da) //写lcd数据{rs=1;rw=0;P0=da;e=1;delay(15);e=0;}float adc(unsigned char land_i) //adc转换程序{float temp=0,sum=0;unsigned char i;P1ASF=land[land_i]; //P1口用途选择for(i=0;i<10;i++){ADC_CONTR=ADC_CONTR|0x60|0x80|0x08|ADC_CHS[land_i]; //开adc电源,选择转换周期,通道,启动转换//ADC_CONTR=ADC_CHS[land_i]+SPEED3+ADC_POWER+ADC_START;_nop_();_nop_();_nop_();_nop_();while(ADC_CONTR & 0x10==0); //等待转换完成ADC_CONTR=ADC_CONTR & ADC_FLAG; //转换完成标志位清零temp=ADC_RES; //取高八位temp=temp*16/4+ADC_RESL%4; //高八位数加低二位sum=sum+temp;//ADC_CONTR=0x00;}sum=sum/10;sum=(sum/1024)*vcc; //转换成模拟电压值return sum;}char keyscan() //矩阵按键{unsigned char keye;P2=0x0f;if((P2&0x0f)!=0x0f){delay(40);if((P2&0x0f)!=0x0f){P2=0x7f;if(p20==0)keye='#';if(p21==0)keye='*';if(p22==0)keye=0;if(p23==0)keye='d';P2=0xbf;if(p20==0)keye=7;if(p21==0)keye=8;if(p22==0)keye=9;if(p23==0)keye='c';P2=0xdf;if(p20==0)keye=4;if(p21==0)keye=5;if(p22==0)keye=6;if(p23==0)keye='b';P2=0xef;if(p20==0)keye=1;if(p21==0)keye=2;if(p22==0)keye=3;if(p23==0)keye='a';}}return keye;}void initlcd() //lcd初始化{writecom(0x01); //清屏writecom(0x38); //8位总线,5*7点阵writecom(0x0c); //开显示,有光标,闪烁writecom(0x06); //AC自动增一画面不动}void init_adc(void) //adc初始化{P1ASF=0x00; //P1脚初始作I/O口ADC_CONTR=0x00;AUXR1=0x00;}void display(unsigned char line) //lcd显示{unsigned char i;switch(line){case 1:for(i=0;i<16;i++){writecom(0x80+i);writedat(lcd0[i]);}break;case 2:for(i=0;i<=16;i++){writecom(0xc0+i);writedat(lcd1[i]);}break;default:break;}}void main(void){float vol=0,m=0;unsigned char key;//unsigned int k;initlcd(); //lcd初始化init_adc(); //adc初始化while(1){key=keyscan();vol=adc(7);m=vol/40*1000;sprintf(lcd0,"U :%.3fv ",vol );sprintf(lcd1,"M :%.3fg ",m);display(line);line++;display(line);}}(6) 仿真调试将程序烧入到单片机内后,接上电源,开始逐个放砝码,记LCD上显示的数据于表中。