西南科技大学
城市学院
课程设计
设计题目:压力峰值检测器
系 别:机电工程 专 业:自动化 班 级:1001
姓 名:刘守勋 刘科鹏 黄雪芝 冯浩
指导老师:陈亮 组长:黄雪芝
目录
任务与要求.................................................3
设计的初步分析……………………………………….3
设计的系统框图……………………………………….3
运算放大器部分……………………………………….4
A/D转换部分……………………………………………7
单片机部分与数据处理………………………….11
数码管显示部分……………………………………..14
实验心得体会………………………………………….17
压力信号峰值检测器的设计
一·任务与要求
设计一个压力信号峰值检测器,具体要求如下:
1) 测量结果用4位数字显示,显示范围为0000—1999Kg。 2) 传感器输出在实验室时用0—5mv的信号源模拟传感器。 3) 要求检测仪能稳定的保持输入信号的峰值。
设计的初步分析
由于传感器输出电压在0—5mv之间电压很小,所以先用运算放大器将传感器输出电压放大1000倍,放大后电压范围变为0—5v,然后通过A/D转换,将模拟信号转换为数字信号,数字信号通过单片机进行处理,单片机通过逐次比较检测出峰值及最大值并显示在四位数码管上。
设计的系统框图
运算放大器部分
差分放大器属于一种特殊的仪表放大器,通常被设计用于需要较大的直流或交流共模干扰的场所。这其中包括通用的电流检测应用,如电机控制、电池充电和电源转换;
另包括大量高共模电平的汽车电流检测应用,如电池电平监测、传
动控制、燃油喷射控制、发动机管理、悬挂控制、电控转向、电控刹车、以及混合动力驱动和混合动力电池控制。因这此控制大多通过放大负载电路上分流电阻两端的电压差以获取电流,所以也常被称作电流分流放大器。
集成运算放大器的原理
由运放构成的高阻抗差分放大电路
图为高输入阻抗差分放大器,应用十分广泛.从仪器测量放大器,到特种测量放大器,几乎都能见到其踪迹。
从图中可以看到A1、A2两个同相运放电路构成输入级,在与差分放大器A3串联组成三运放差分防大电路。电路中有关电阻保持严格对称,具有以下几个优点:
(1)A1和A2提高了差模信号与共模信号之比,即提高了信噪比;
(2)在保证有关电阻严格对称的条件下,各电阻阻值的误差对该电路的共模抑制比KCMRR没有影响;
(3)电路对共模信号几乎没有放大作用,共模电压增益接近零。
因为电路中R1=R2、 R3=R4、 R5=R6 ,故可导出两级差模总增益为:
Avd=
uoui1-ui2
⎛Rp+2R1=- RP
⎝
⎫R5⎪
⎪R ⎭3
通常,第一级增益要尽量高,第二级增益一般为1~2倍,这里第一级选择100倍,第二级为10倍。则取R3=R4=R5=R6=10KΩ,要求匹配性好,一般用金属膜精密电阻,阻值可在10KΩ~几百KΩ间选择。则
Avd=(RP+2R1)/RP
先定RP,通常在1KΩ~10KΩ内,这里取RP=1KΩ,则可由上式求得R1=99RP/2=49.5KΩ
取标称值51KΩ。通常RS1和RS2不要超过RP/2,这里选RS1= RS2=510,用于保护运放输入级。
A1和A2应选用低温飘、高KCMRR的运放,性能一致性要好。
集成运算放大器的
整体仿真效果图:
A/D转换部分
ADC0832 为8
位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过DI 数据输入端,可以轻易的实现通道功能的选择。
单片机对ADC0832 的控制原理
正常情况下ADC0832 与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI 并联在一根数据线上使用。当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK 输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。在第2、3个脉冲下沉之前DI端应输入2 位数据用于选择通道功能,其功能项见官方资料。
如资料 所示,当此2 位数据为“1”、“0”时,只对CH0 进行单通道转换。当2位数据为“1”、“1”时,只对CH1进行单通道转换。当2 位数据为“0”、“0”时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。当2 位数据为“0”、“1”时,将CH0作为负输入端IN-,CH1 作为正输入端IN+进行
输入。到第3 个脉冲的下沉之后DI端的输入电平就失去输入作用,此后DO/DI端则开始利用数据输出DO进行转换数据的读取。从第4个脉冲下沉开始由DO端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据。直到第11个脉冲时发出最低位数据DATA0,一个字节的数据输出
DC0832封装以及各端子
完成。也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下沉输出DATA0。随后输出8位数据,到第19 个脉冲时数据输出完成,也标志着一次A/D转换的结束。最后将CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了。
作为单通道模拟信号输入时ADC0832的输入电压是0~5V且8位分辨率时的电压精度为19.53mV。如果作为由IN+与IN-输入的输入时,可是将电压值设定在某一个较大范围之内,从而提高转换的宽度。但值得注意的是,在进行IN+与IN-的输入时,如果IN-的电压大于IN+的电压则转换后的数据结果始终为00H。
A/D转换的程序设计:
uchar ADC0832(void) //AD转换,返回结果 {
uchar i=0; uchar j; uint dat=0; uchar ndat=0;
ADDI=1; _nop_(); _nop_();
ADCS=0;//拉低CS端 _nop_(); _nop_();
ADCLK=1;//拉高CLK端 _nop_(); _nop_();
ADCLK=0;//拉低CLK端,形成下降沿1 _nop_(); _nop_();
ADCLK=1;//拉高CLK端
_nop_(); _nop_();
ADCLK=0;//拉低CLK端,形成下降沿2 _nop_(); _nop_();
ADCLK=1;//拉高CLK端 ADDI=1; _nop_(); _nop_();
ADCLK=0;//拉低CLK端,形成下降沿3
_nop_(); _nop_(); dat=0; for(i=0;i
dat|=ADDO;//收数据 ADCLK=1; _nop_(); _nop_();
ADCLK=0;//形成一次时钟脉冲 _nop_(); _nop_(); dat
if(i==7)dat|=ADDO; }
for(i=0;i
j=j|ADDO;//收数据 ADCLK=1; _nop_(); _nop_();
ADCLK=0;//形成一次时钟脉冲 _nop_(); _nop_(); j=j>=1; }
ADCS=1;//拉低CS端 ADCLK=0;//拉低CLK端
ADDO=1;//拉高数据端,回到初始状态 dat
return(dat); }
单片机部分与数据处理
单片机选用ATC89C51
单片机程序
#include #include
#define uchar unsigned char #define uint unsigned int
sbit ADCS =P2^4; sbit ADDI =P2^6; sbit ADDO =P2^7; sbit ADCLK =P2^5; sbit S1=P2^0; sbit S2=P2^1; sbit S3=P2^2; sbit S4=P2^3;
uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//显示0-9段码
void delay(unsigned char t) {
uchar j,i;
for(i=0;i
for(j=0;j
void main(void) {
uint a=0,b=0; double c; shuma(a); while(1) {
a=ADC0832( ); c=a*2000.0/255; a=c; if(a>=b) {shuma(a);
b=a;
}
else shuma(b);
} }
整体仿真效果图:
数码管显示部分
显示原理:
数码管首先从上到右,到下到左,到中间,
最后到小数点分别标记为
a b c d e f g dp八段其中小数点位DP为最高位,a段为最低位,要想显示什么字符只需要使对应的段发光即可,一般的习惯是单片机的端口的最低位接a段,次低位接b段,...最高位(如p0.7)接dp,显示码从高往低表示为为 dp g f e d c b a 如要显示“1”,只需要将b、c段点亮即可,若是共阴极,片选是低电平选中,某一段输出高电平点亮,即显示码为00000110 即0x06,其他的依照该方法类推 单片机的电流很小,所以加上拉电阻,提供驱动电流,电阻大小为1k。 数码管选用共阳数码管,0到9的编码为: 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
数码管的示意图如下图所示
仿真图如下:
数码管显示程序
/*******************数码管显示函数*****************/
uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//显示0-9段码
void shuma(uint a) { uint qian,bai,shi,ge,i; qian=a/1000; //千位 bai=a%1000/100; //百位 shi=a%1000%100/10; //十位 ge=a%1000%100%10; //个位 if(qian==0) //屏蔽最高位 为“0”的情况 { qian=10; if(bai==0) { bai=10; if(shi==0) shi=10; } } S1=0;S2=0;S3=0;S4=0; for(i=0;i
}
P0=0xff; S3=0;
S4=1;
P0=seg[ge]; delay(20); P0=0xff; S4=0;
整体仿真效果图:
压力峰值检测器实验心得体会
这次我们小组做的压力峰值检测器实验,我们实验的实验思路是:测量结果是用4位数
字显示,显示范围是在0000—1999Kg之内,而要求是传感器输出,在实验室时用0—5mv的信号源模拟传感器,但是传感器输出电压在0—5mv之间电压很小,所以需要对其进行放大,放大一千倍后,传感器输出电压为0—5v,然后再通过模数转换,将模拟信号转换成数字信号,再通过单片机的处理,比较,输出最大的压力值。
这次实验,我们运用了以前所学的模拟电子技术和数字电子技术,同时结合单片机来完成的,这次实验中,我们小组四个人每个人负责不同的版块共同来完成这个实验:冯浩负责单片机部分,刘科鹏负责数码管显示部分,刘守勋负责放大器部分,而我负责模数转换部分,每个人负责把自己的那部分做好后,再合在一起来调试,通过不断的调整,修改,我们才完成了这个实验。
在做实验前,一定要将课本上的知识吃透,因为这是做实验的基础,否则你做实验的难度就会加大,也会浪费做实验的时间,比如做做我们这个实验时模数转换部分时,你得了解该用什么芯片和这个芯片的功能,在做放大器这部分时,得了解以前老师所讲和课本上的放大器部分的知识后才能知道怎么运用,还有就是做实验时一定要亲力亲为,务必将每个步骤,每个细节弄清楚,龙明白,实验后,还要复习,思考,这样你的印象才深刻,记得才牢固。
通过这次实验,我们更加了解到了专业基础知识对于我们的重要性,也更加知道一个团队合作精神的重要性,在实验过程中我受益匪浅,它让我深刻体会到实验前的理论知识准备,每一个实验不是一开始都是成功的,总要通过不停地修改,调整才会呈现出一个成功的实验,在这次试验中,我们付出了很多,但学到的更多。
西南科技大学
城市学院
课程设计
设计题目:压力峰值检测器
系 别:机电工程 专 业:自动化 班 级:1001
姓 名:刘守勋 刘科鹏 黄雪芝 冯浩
指导老师:陈亮 组长:黄雪芝
目录
任务与要求.................................................3
设计的初步分析……………………………………….3
设计的系统框图……………………………………….3
运算放大器部分……………………………………….4
A/D转换部分……………………………………………7
单片机部分与数据处理………………………….11
数码管显示部分……………………………………..14
实验心得体会………………………………………….17
压力信号峰值检测器的设计
一·任务与要求
设计一个压力信号峰值检测器,具体要求如下:
1) 测量结果用4位数字显示,显示范围为0000—1999Kg。 2) 传感器输出在实验室时用0—5mv的信号源模拟传感器。 3) 要求检测仪能稳定的保持输入信号的峰值。
设计的初步分析
由于传感器输出电压在0—5mv之间电压很小,所以先用运算放大器将传感器输出电压放大1000倍,放大后电压范围变为0—5v,然后通过A/D转换,将模拟信号转换为数字信号,数字信号通过单片机进行处理,单片机通过逐次比较检测出峰值及最大值并显示在四位数码管上。
设计的系统框图
运算放大器部分
差分放大器属于一种特殊的仪表放大器,通常被设计用于需要较大的直流或交流共模干扰的场所。这其中包括通用的电流检测应用,如电机控制、电池充电和电源转换;
另包括大量高共模电平的汽车电流检测应用,如电池电平监测、传
动控制、燃油喷射控制、发动机管理、悬挂控制、电控转向、电控刹车、以及混合动力驱动和混合动力电池控制。因这此控制大多通过放大负载电路上分流电阻两端的电压差以获取电流,所以也常被称作电流分流放大器。
集成运算放大器的原理
由运放构成的高阻抗差分放大电路
图为高输入阻抗差分放大器,应用十分广泛.从仪器测量放大器,到特种测量放大器,几乎都能见到其踪迹。
从图中可以看到A1、A2两个同相运放电路构成输入级,在与差分放大器A3串联组成三运放差分防大电路。电路中有关电阻保持严格对称,具有以下几个优点:
(1)A1和A2提高了差模信号与共模信号之比,即提高了信噪比;
(2)在保证有关电阻严格对称的条件下,各电阻阻值的误差对该电路的共模抑制比KCMRR没有影响;
(3)电路对共模信号几乎没有放大作用,共模电压增益接近零。
因为电路中R1=R2、 R3=R4、 R5=R6 ,故可导出两级差模总增益为:
Avd=
uoui1-ui2
⎛Rp+2R1=- RP
⎝
⎫R5⎪
⎪R ⎭3
通常,第一级增益要尽量高,第二级增益一般为1~2倍,这里第一级选择100倍,第二级为10倍。则取R3=R4=R5=R6=10KΩ,要求匹配性好,一般用金属膜精密电阻,阻值可在10KΩ~几百KΩ间选择。则
Avd=(RP+2R1)/RP
先定RP,通常在1KΩ~10KΩ内,这里取RP=1KΩ,则可由上式求得R1=99RP/2=49.5KΩ
取标称值51KΩ。通常RS1和RS2不要超过RP/2,这里选RS1= RS2=510,用于保护运放输入级。
A1和A2应选用低温飘、高KCMRR的运放,性能一致性要好。
集成运算放大器的
整体仿真效果图:
A/D转换部分
ADC0832 为8
位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过DI 数据输入端,可以轻易的实现通道功能的选择。
单片机对ADC0832 的控制原理
正常情况下ADC0832 与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI 并联在一根数据线上使用。当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK 输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。在第2、3个脉冲下沉之前DI端应输入2 位数据用于选择通道功能,其功能项见官方资料。
如资料 所示,当此2 位数据为“1”、“0”时,只对CH0 进行单通道转换。当2位数据为“1”、“1”时,只对CH1进行单通道转换。当2 位数据为“0”、“0”时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。当2 位数据为“0”、“1”时,将CH0作为负输入端IN-,CH1 作为正输入端IN+进行
输入。到第3 个脉冲的下沉之后DI端的输入电平就失去输入作用,此后DO/DI端则开始利用数据输出DO进行转换数据的读取。从第4个脉冲下沉开始由DO端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据。直到第11个脉冲时发出最低位数据DATA0,一个字节的数据输出
DC0832封装以及各端子
完成。也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下沉输出DATA0。随后输出8位数据,到第19 个脉冲时数据输出完成,也标志着一次A/D转换的结束。最后将CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了。
作为单通道模拟信号输入时ADC0832的输入电压是0~5V且8位分辨率时的电压精度为19.53mV。如果作为由IN+与IN-输入的输入时,可是将电压值设定在某一个较大范围之内,从而提高转换的宽度。但值得注意的是,在进行IN+与IN-的输入时,如果IN-的电压大于IN+的电压则转换后的数据结果始终为00H。
A/D转换的程序设计:
uchar ADC0832(void) //AD转换,返回结果 {
uchar i=0; uchar j; uint dat=0; uchar ndat=0;
ADDI=1; _nop_(); _nop_();
ADCS=0;//拉低CS端 _nop_(); _nop_();
ADCLK=1;//拉高CLK端 _nop_(); _nop_();
ADCLK=0;//拉低CLK端,形成下降沿1 _nop_(); _nop_();
ADCLK=1;//拉高CLK端
_nop_(); _nop_();
ADCLK=0;//拉低CLK端,形成下降沿2 _nop_(); _nop_();
ADCLK=1;//拉高CLK端 ADDI=1; _nop_(); _nop_();
ADCLK=0;//拉低CLK端,形成下降沿3
_nop_(); _nop_(); dat=0; for(i=0;i
dat|=ADDO;//收数据 ADCLK=1; _nop_(); _nop_();
ADCLK=0;//形成一次时钟脉冲 _nop_(); _nop_(); dat
if(i==7)dat|=ADDO; }
for(i=0;i
j=j|ADDO;//收数据 ADCLK=1; _nop_(); _nop_();
ADCLK=0;//形成一次时钟脉冲 _nop_(); _nop_(); j=j>=1; }
ADCS=1;//拉低CS端 ADCLK=0;//拉低CLK端
ADDO=1;//拉高数据端,回到初始状态 dat
return(dat); }
单片机部分与数据处理
单片机选用ATC89C51
单片机程序
#include #include
#define uchar unsigned char #define uint unsigned int
sbit ADCS =P2^4; sbit ADDI =P2^6; sbit ADDO =P2^7; sbit ADCLK =P2^5; sbit S1=P2^0; sbit S2=P2^1; sbit S3=P2^2; sbit S4=P2^3;
uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//显示0-9段码
void delay(unsigned char t) {
uchar j,i;
for(i=0;i
for(j=0;j
void main(void) {
uint a=0,b=0; double c; shuma(a); while(1) {
a=ADC0832( ); c=a*2000.0/255; a=c; if(a>=b) {shuma(a);
b=a;
}
else shuma(b);
} }
整体仿真效果图:
数码管显示部分
显示原理:
数码管首先从上到右,到下到左,到中间,
最后到小数点分别标记为
a b c d e f g dp八段其中小数点位DP为最高位,a段为最低位,要想显示什么字符只需要使对应的段发光即可,一般的习惯是单片机的端口的最低位接a段,次低位接b段,...最高位(如p0.7)接dp,显示码从高往低表示为为 dp g f e d c b a 如要显示“1”,只需要将b、c段点亮即可,若是共阴极,片选是低电平选中,某一段输出高电平点亮,即显示码为00000110 即0x06,其他的依照该方法类推 单片机的电流很小,所以加上拉电阻,提供驱动电流,电阻大小为1k。 数码管选用共阳数码管,0到9的编码为: 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
数码管的示意图如下图所示
仿真图如下:
数码管显示程序
/*******************数码管显示函数*****************/
uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//显示0-9段码
void shuma(uint a) { uint qian,bai,shi,ge,i; qian=a/1000; //千位 bai=a%1000/100; //百位 shi=a%1000%100/10; //十位 ge=a%1000%100%10; //个位 if(qian==0) //屏蔽最高位 为“0”的情况 { qian=10; if(bai==0) { bai=10; if(shi==0) shi=10; } } S1=0;S2=0;S3=0;S4=0; for(i=0;i
}
P0=0xff; S3=0;
S4=1;
P0=seg[ge]; delay(20); P0=0xff; S4=0;
整体仿真效果图:
压力峰值检测器实验心得体会
这次我们小组做的压力峰值检测器实验,我们实验的实验思路是:测量结果是用4位数
字显示,显示范围是在0000—1999Kg之内,而要求是传感器输出,在实验室时用0—5mv的信号源模拟传感器,但是传感器输出电压在0—5mv之间电压很小,所以需要对其进行放大,放大一千倍后,传感器输出电压为0—5v,然后再通过模数转换,将模拟信号转换成数字信号,再通过单片机的处理,比较,输出最大的压力值。
这次实验,我们运用了以前所学的模拟电子技术和数字电子技术,同时结合单片机来完成的,这次实验中,我们小组四个人每个人负责不同的版块共同来完成这个实验:冯浩负责单片机部分,刘科鹏负责数码管显示部分,刘守勋负责放大器部分,而我负责模数转换部分,每个人负责把自己的那部分做好后,再合在一起来调试,通过不断的调整,修改,我们才完成了这个实验。
在做实验前,一定要将课本上的知识吃透,因为这是做实验的基础,否则你做实验的难度就会加大,也会浪费做实验的时间,比如做做我们这个实验时模数转换部分时,你得了解该用什么芯片和这个芯片的功能,在做放大器这部分时,得了解以前老师所讲和课本上的放大器部分的知识后才能知道怎么运用,还有就是做实验时一定要亲力亲为,务必将每个步骤,每个细节弄清楚,龙明白,实验后,还要复习,思考,这样你的印象才深刻,记得才牢固。
通过这次实验,我们更加了解到了专业基础知识对于我们的重要性,也更加知道一个团队合作精神的重要性,在实验过程中我受益匪浅,它让我深刻体会到实验前的理论知识准备,每一个实验不是一开始都是成功的,总要通过不停地修改,调整才会呈现出一个成功的实验,在这次试验中,我们付出了很多,但学到的更多。