传感器课程设计
- 格式:docx
- 大小:179.06 KB
- 文档页数:6
1 一、 实现目标
WTP616平行梁式称重传感器主要适用口袋秤,手掌秤等电子称重。采用该传感器设计一个在量程范围内,且能够显示重量的小型电子称。
二、 设计方案
1. 稳压电路:
采用7805稳压芯片,使激励电源电压稳定在5V,防止电源波动带来的测量方面的误差。
2. 传感器主要技术参数 主要技术参数
额定载荷(Kg) 500g 绝缘电阻(MΩ) >=2000(100VDC)
精度等级 C3 激励电压(V) 5~10(DC)
综合误差(%F.S) 0.05 温度补偿范围(℃) -10~+40
灵敏度(mV/V) 0.7±0.1 使用温度范围(℃) -20~+55
非线性(%F.S)
0.05 零点温度影响(%F.S/10℃) 0.2
滞后(%F.S)
0.05 灵敏度温度影响(%F.S/10℃) 0.15
重复性(%F.S) 0.05 安全过载范围(%F.S) 150
蠕变(%F.S/30min) 0.05 极限过载范围(%F.S)
零点输出(%F.S) ±1 防护等级
输入阻抗(Ω) 1000±50 电缆线
输出阻抗(Ω) 1000±50
接线方法
输入(电源) + : 红色;输入(电源) - : 黑色;输出(信号) + : 绿色;输出(信号) - :白色 稳压电路传感器放大电路数据采集显示电路2
3.放大电路:
由于传感器的输出电阻很大,这就要求放大器有更大的输入电阻。从而不吸收传感器的输出电流。采用仪表放大器,它具有高共模抑制比、高输入阻抗、低噪声、低线性误差、低失调漂移增益设置灵活和使用方便等特点。
4.数据采集显示电路:
采用ATmega16单片机,该单片机内部集成有一个10位逐次比较(successive
approximation)ADC电路。将放大后的模拟电压量转化为数字量并显示。
三、 各部分电路图
1.稳压电路图:
直流输入时,该电路的输出稳定在5V。输出经过一阶RC低通滤波,保证输出电压的稳定性。
2.传感器电路图: 3
R1,R2为工作电阻,Rw为调零电阻,Rs,Rp作为零点温度补偿,其中Rp为温度系数为负,阻值较大的电阻。二极管D1,D2用于灵敏度温度补偿。
3.放大电路:
传感器采用5V电压时,满量程输出为3.5mV,此电压太小,要求将其放大到5V,放大倍数为1428.6。
仪表放大器由三个OP07构成两级差分放大器电路。其中,运放U1,U2为同相差分输入方式,同相输入可以大幅度提高电路的输入阻抗,减小电路对微弱输入信号的衰减;差分输入可以使电路只对差模信号放大,而对共模输入信号只起跟随作用,使得送到后级的差模信号与共模信号的幅值之比(即共模抑制比CMRR)得到提高。这样在以运放U3为核心部件组成的差分放大电路中,在CMRR要求不变情况下,可明显降低对电阻R3和R4,R6和R5的精度匹配要求,从而使仪表放大器电路比简单的差分放大电路具有更好的共模抑制能力。在R1=R2,R3=R4,R6=R5的条件下,图中电路的增益为:G=(1+2R1/R7)(R6/R3)。
图中输入电压1mV,输出电压1.43V,输入输出之比约为1428。
4
4.数据采集显示电路:
如图,ATmega16单片机PD口低四位作为数码管的位控制,采用动态扫描方式构成输出显示。而PA0(ADC0)口作为模拟电压测量的输入(ADC输入)。ADC的参考电压源采用AVcc,系统5v电源经过L、C2滤波后到AVcc,提高了AVcc的稳定性,电容C3并接在AREF和地之间进一步提高参考电压的稳定性。对于单端输入的A/D转换,其转换结果为ADC =(VIN×1024)/ VREF。其中VIN表示选定的输入引脚上的电压,VREF表示选定的参考电源的电压。则输入的电压值VIN=ADC×VREF/1024。若称重值超过量程,则喇叭会报警。
5
五、附录程序
#include
flash char led_7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
flash char position[6]={0xfe,0xfd,0xfb,0xf7};
unsigned char dis_buff[4]={0,0,0,0},posit;
bit time_2ms_ok;
// ADC电压值送显示缓冲区函数
voidadc_to_disbuffer(unsigned intadc)
{
char i;
for (i=0;i<=3;i++)
{
dis_buff[i]=adc % 10;
adc /= 10;
}
}
// Timer 0 比较匹配中断服务
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
time_2ms_ok = 1;
}
// ADC 转换完成中断服务
interrupt [ADC_INT] void adc_isr(void)
{
unsignedintadc_data,adc_v;
adc_data=ADCW; //读取ADC置换结果
adc_v=(unsigned long)adc_data*5000/1024; //换算成电压值
adc_to_disbuffer(adc_v);
}
void display(void) // 4位LED数码管动态扫描函数
{
PORTD |= 0x0f;
PORTC = led_7[dis_buff[posit]];
if (posit==3) PORTC |= 0x80;
PORTD&= position[posit];
if (++posit >=4 ) posit = 0;
}
// 系统主程序
void main(void)
{ DDRB=0x01;//PB0设置为输出
PORTB=0x01;
DDRD=0x0f; 6
PORTD=0x0f;
DDRC=0xff; // LED显示控制I/O端口初始化
PORTC=0x00;
// T/C0 初始化
TCCR0=0x0B; // 内部时钟,64分频(4M/64=62.5KHz),CTC模式
TCNT0=0x00;
OCR0=0x7C; // OCR0 = 0x7C(124),(124+1)/62.5=2ms
TIMSK=0x02; // 允许T/C0比较中断
// ADC 初始化
ADMUX=0x40; // 参考电源AVcc、ADC0单端输入
SFIOR&=0x1F;
SFIOR|=0x60; // 选择T/C0比较匹配中断为ADC触发源
ADCSRA=0xAD; // ADC允许、自动触发转换、ADC转换中断允许、ADCclk=125Kz
#asm("sei") // 开放全局中断
while (1)
{
if (time_2ms_ok)
{
display(); // LED扫描显示
time_2ms_ok = 0;
}
If(adc v>5) PB0=0X01;//超重报警
}
}