基于R的失重秤设计.docx
- 文档编号:9168893
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:26
- 大小:503.37KB
基于R的失重秤设计.docx
《基于R的失重秤设计.docx》由会员分享,可在线阅读,更多相关《基于R的失重秤设计.docx(26页珍藏版)》请在冰豆网上搜索。
基于R的失重秤设计
1设计目的
1.1失重秤介绍
失重秤,是一种间断给料连续出料的称重设备,由于失量控制是在料斗中进行,可达到较高的控制精度,结构又易于密封,故在粉料控制时与用螺旋秤来相比是一大提高。
适用于水泥、石灰粉、煤粉等微细物料的控制配料。
1.2失重秤现状和设计目的
目前在冶金、化工等工厂都会用到精确称量,因为失重秤比传统的称量方式精度更高成本更低,所以采用失重秤的配料方式在工业称量中得到了广泛的运用。
因此,通过设计基于ARM的失重秤设计,运用ARM强大的运算与控制能力,从而达到对重量的精确测量。
同时熟悉与掌握嵌入式系统在工业控制中的应用。
2设计任务及要求
1、输出为12V的直流稳压电源为传感器供电,输出为3.3V的直流电源为逻辑控制器供电
2、设计出键盘输入与显示电路(键盘显示板),用来显示当前的重量
3、将托盘的重力转换为电压输出,并对输出的差动信号放大
4、运用逻辑控制器将输出放大信号进行A/D采样,完成自动校零与自动校
满,并将重量在键盘显示板上进行显示与通过键盘显示板控制系统的运行。
3设计方案选择
3.1设计12V与3.3V稳压电源
要得到一个输出为12V的稳压电源,必须把220V的交流电经过变压器降压为16V~30V的交流电压,然后接入整流桥。
经过滤波以后接入12V直流稳压管,将电压输出稳定在12V,作为电桥及运放的电源。
然后再将12V的输出电压接入可调电压稳压管,将输出电压调整为3.3V,作为逻辑器件的电源。
3.2设计键盘输入与显示电路
键盘显示板的设计可以运用一般人眼的滞留时间在0.1s左右这一个生理特点,用2片8位的移位寄存器芯片串联来共同驱动两个四共阴极的LED数码显示管,一个移位寄存器芯片控制八个数码管中的位码(即:
第几位点亮),另一个控制被点亮的数码管的段码(即:
所显示的数)。
这样每隔2ms的时间,用SPI将段码和位码发送到移位寄存器里,这样数码管所显示的数的“存活期”为2ms。
当2ms以后,就应该显示下一个数码管应该显示的数字,这时通过SPI又将新的段码与位码发送到移位寄存器里。
可以计算得知,八个数码管的扫描周期为16ms,完全小于人眼的分辨时间0.1s,将看到连续的数字显示在显示板上。
同时,8个按键是公共端接上拉电阻,并将按键的公共端引出,作为按键按下的输入到逻辑器件的借口,按键的另一端分别接到保存数码管位码的移位寄存器引脚上。
这样,相当于每隔2ms在显示数字的同时也扫描了一个按键。
3.3设计重力感应与放大电路
将重力的变化转换为电压的变化可以采用三个压力传感器,选择三个压力传感器是为了固定托盘和更好的然每一个压力传感器都能感应到压力的变化,当重力发生变化时,每一个传感器的输出电压差发生等比例的变化,但是变化的电压及其微弱,一般小于1mv,从而必须将输出电压变化的部分用于放大电路进行放大。
信号放大部分可以使用两级放大,前一级使用运算放大器做加减差动放大,将三个传感器输出的正负信号输出端分别接入放大器的正负输入端,放大电路将把输入信号做加减运算后将传感器输出的差动电压信号进行10倍放大,后一级主要用于电压的调零于(抵消掉因为托盘的重量引起的电压输出)与放大。
由于传感器输出的差动电压也会受到外部环境的影响,所以在调零时通常将最低电压调整在100mv左右,给环境变化的影响留出100mv的余量。
这100mv可以在后面的逻辑控制器件的程序处理时将其减去,从而减少了环境变化对测量数据的影响。
将最高的输出电压定在3300mv的A/D可采样电压范围以内,以免超出A/D的采样范围影响测量。
3.4逻辑控制器的软件实现方案
逻辑控制器件主要完成的功能是控制A/D对输入的电压进行采样并将A/D的采样值与重量的量纲相对应,运用
(
初始化的AD值,
为放入固定重量的砝码后的AD值,
为放入砝码的重量,
为放入未知重物后的AD值,
为未知重物的重量)计算出托盘里面重物的重量,然后输出到键盘显示板上进行显示。
具体方案:
a、每隔20ms通过A/D对输入的电压进行采样,在采样50次以后求出所有采样和的平均值
b、在每次系统启动后自动进入校零和校满程序并保存
,
c、在校零和校满以后进入测量程序,根据每次采样出来的AD值运用计算公式将重量通过键盘显示板显示出来
4器件选择
4.1稳压电源器件的选择
在本系统中需要两种不同电压值的直流电源,分别为12V和3.3V。
a、稳压管LM7812具有输出稳定性好、使用方便、输出过流、过热自动保护,最大输入电压为35V,最大输出电流为1.5A,最高结温为150℃,适用于各种电源稳压电路,而且采用TO-220封装形式,便于在万能板上进行焊接,故采用LM7812作为电桥及放大电路的供电稳压管。
b、LM317是通过调节端口1的电压就可以调节输出电压的可调稳压管,最大输出可调电压可达37V,最大输出电流可达2A,因此选择将其输出调为3.3V为逻辑控制器件提供电压。
4.2八位移位寄存器芯片与数码显示管的选择
键盘显示板的核心部分是八位移位寄存器芯片,它完成了数码显示与按键扫描这两个任务。
74LS164为8位移位寄存器(串行输入,并行输出),串行数据输入端可控制数据,当清除端(CLEAR)为低电平时,输出端(QA-QH)均为低电平。
当A、B任意一个为低电平是可禁止新的数据输入,在时钟端(CLOCK)脉冲上升沿的作用下QA为低电平。
当A、B端有一个为高电平,则另一个允许输入数据,并在CLOCK上升沿的作用下决定QB的状态。
其时序图如下:
图174LS164时序图
四共阴极的LED数码显示管,四个共阴极数码显示管的a~h段是分别连接在一起,共同引出公共的a~h段的控制线。
其连接图如下:
图2四共阴极LED数码显示管连接图
4.3压力传感器与运算放大器的选择
a、将压力的信号转换为电信号需要使用压力传感器来进行转换,在这里使用应变片压力传感器(图3),将压力信号转换为差动电压信号输出,只需要在传感器的电源端接入12V的电压,两条信号输出端就会输出差动电压信号。
b、LM324是四运放集成电路,它采用14脚双列直插塑料封装,便于在万用板上焊接。
它的内部包含四组形式完全相同的运算放大器,除电源共用外,四组运放相互独立。
每一组运算放大器可用图4所示的符号来表示,它有5个引出脚,其中“+”、“-”为两个信号输入端,“V+”、“V-”为正、负电源端,“Vo”为输出端。
两个信号输入端中,Vi-(-)为反相输入端,表示运放输出端Vo的信号与该输入端的相位相反;Vi+(+)为同相输入端,表示运放输出端Vo的信号与该输入端的相位相同。
图3应变片压力传感器图4运算放大器
4.4逻辑控制器的选择
LPC2131是基于一个支持实时仿真和嵌入式跟踪的32/16位ARMTTDMI-STMCPU的微控制器,并带有32KB的嵌入的高速Flash存储器。
128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行。
对代码规模有严格控制的应用可使用16位Thumb模式将代码规模降低超过30%,而性能的损失却很小。
LPC2131的主要特性如下:
a)8KB片内静态RAMl
b)32KB片内Flash程序存储器。
c)1个8路10位A/D转换器共包含8/16个模拟输入,每个通道的转换时间低至2.44us。
d)2个32位定时器(带4路捕获和4路比较通道)、PWM单元(6路输出)和看门狗。
e)多个串行接口,包括2个16C550工业UART、2个高速I2C接口(400Kbits/s)、SPI接口。
f)向量中断控制器。
可配置优先级和向量地址。
g)多达47个可承受5V的通用I/O口(LQFP64封装)。
h)多达9个边沿或电平触发的外部中断引脚。
5硬件电路及分析
5.1稳压电源电路
图5为12V稳压电源的电路图。
经过变压器后将220V的市电降压为16V的交流电,经过C1将交流电中的高次谐波过滤后接入到整流桥整流后再经过1000uF的C2和220uF的C3平波后接入稳压管LM7812,后面输出为稳定的12V直流压,C4和C5的作用是进一步滤除直流电压中的高频交流成分,使电源更稳定。
图512V稳压电源的电路图
图6为运用LM317输出可调电源的电路图。
将经过LM7812稳压输出的12V电压
输入到该电路的
端,经电容C1滤波后送入LM317第3脚(输入端),二脚输出稳定的直流电压,调正端(一脚)与输出端的电压为1.25V的基准电压为了保证稳压管的输出特性,R1的电阻应小于240Ω。
为了输出电压可调,调整端与地之间接可变电阻器R2,调节R2的值可将输出电压调整为3.3V。
输出电压的计算公式为:
电路中C1是为了滤除输入电压存在的交流成分,C3是为了旁路基准电压的纹波,提高电源的纹波抑制性能。
图6LM317输出可调电源
5.2键盘输入与显示电路
图7为键盘输入与显示的电路图。
数据通过JP1接口中的DATA在CLK的上升沿作用下以串行的方式输入到移位寄存器,可以将CLK端接在SPI的时钟端上,将DATA端接在SPI的MOSI(主出从入)端口上,这样通过SPI就能将所要存入移位寄存器的数发送出去。
从图中可见,第一片移位寄存器控制的是数码管的位码,第二位移位寄存器控制的是数码管的段码。
因此,在SPI发送数据时应该先将8位段码发送到第一片寄存器中,然后发送8位位码。
这样,第一片寄存器中的段码被移入到第二片中,第一片寄存器中保存的是数码管的位码。
同时,8个按键的公共端是通过上拉电阻电阻R9接到VCC,而且在JP1中还有一个端口KEY作为按键到ARM的输入端。
图7键盘显示板电路
5.3差动信号放大电路
图8为用于对输入的差动电压信号进行放大的电路。
将3个差动信号的正负分别通过10KΩ的电阻接入到运算放大器的正负端,就会通过第一级差动放大器将差动信号放大10倍,然后放大信号输入到第二级的放大电路。
电路里接入了一个滑动变阻器,用于调节输出信号的零点。
在电路的最后接入了一个470uF的平波电容,是为了使输出的信号更加稳定,减少各种因素带来的电路输出信号的波动。
图8差动信号放大电路
5.4使用到的ARM内部功能模块
系统中使用到的ARM的内部硬件模块与外部器件的连接如图9所示。
图9
6软件设计
本系统软件部分的主要功能是完成对外部输入信号的AD采样,并且在对重量自校零和校满后使AD值与重量的量纲相对应,并且将所测得的重量通过SPI发送到键盘显示板上进行显示,其流程图(图10)如下:
图10程序流程图
7调试与分析
系统程序是在ARM公司的集成开发环境ADS1.2中完成开发与调试。
软件设计,是基于嵌入式系统程序设计的前后台设计思想(即传统的主函数加中断的程序设计思想),整个系统的运行是在一个while
(1)加上若干个中断服务程序。
中断部分主要是完成2ms的精确定时和SPI的定时发送的功能。
在整个while
(1)里面完成了按键检测和AD值与重量量纲的转化和将所需要显示的数转换为BCD码的功能。
8参考文献
[1]周立功等.深入浅出ARM7:
LPC213X/214X上册.北京航空航天大学出版社.2005.6
[2]华成英,童诗白等.模拟电子技术基础(第四版).高等教育出版社.2006.1
[3][日]铃木雅臣编著.晶体管电路设计(上).北京:
科学出版社,2004.9
[4]谭浩强,C程序设计[M],清华大学出版社
[5]韩亚萍编著.ProtelDXP基础教程.北京:
清华大学出版社,2005.5
[6]张珺,王祖麟.基于LPC2131的失重秤配料系统设计.自动化技术与应用,2007(6)
9附录
9.1总电路图
输出12V直流电压
输出3.3V直流电压
应变片压力传感器
差动信号放大电路
9.2元器件清单
序号
元件名
参数
数量(个)
1
蒸馏二极管IN4001
最大电流1A、电压50V
4
2
电解电容
1000uF耐压50V
1
3
电解电容
470uF
2
4
电解电容
47uf
1
5
陶瓷电容
0.1uF(104)
5
6
稳压管LM317
最大电流1A、电压35V
1
7
稳压管LM7812
最大电流1A、电压35V
1
8
散热片
铝制
2
9
运算放大器LM324
单、双电源供电
1
10
电阻
1K欧姆
若干
11
电阻
240欧姆
若干
12
电阻
10K欧姆
若干
13
电阻
500欧姆
若干
14
可调变阻器
0~100K欧姆
3
15
移位寄存器74LS164
8位串入并处
2
16
LED共阴数码管
4位8段LED数码管
2
17
按键
——
8
18
二极管
——
2
19
变压器
输出16V以上的交流电压
1
20
插针
——
若干
9.3主要程序清单
#include"config.h"
uint8constwm[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uint8constdm[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint8constM_8pai[8]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09};
uint8data_buf[8];
uint32xs_cs=0;//需要显示的数值
uint32ADC_Data=0;
uint8count;//正在发送第几位段码
uint32time_ds=0;//定时共用变量
uint8time_20ms_flag=0;//定时20ms标志
uint8time_2ms_flag=0;//2ms定时标志
uint8key_n=9;//保存第几号键被按下
//********************************************************************
uint8dw0(uint8n)//对IO0PIN第n位进行读操作
{
uint8i;
if((IO0PIN&(1< elsei=1; returni; } //******************************************************************** voidDelayNS(uint32dly)//长软件延时 { uint32i; for(;dly>0;dly--) for(i=0;i<5000;i++); } //******************************************************************** uint8key_sm(void)//按键函数,在使用完key_n后 {//要将key_n置为大于7的数 uint8statickey; uint8statickey_befor=0,key_now=0,ax_flag=0; key_befor=key_now; key_now=dw0(3); if((key_befor==1)&&(key_now==0)&&(ax_flag==0)) { ax_flag=1; key=count; } if((key_befor==1)&&(key_now==1)&&(ax_flag==1)&&(key==count)) { ax_flag=0; returnkey; } return9; } //******************************************************************** voidad_int(void)//AD初始化函数 { PINSEL1=1<<28;//P0.30连接到AD0.3 /*进行ADC模块设置*/ AD0CR=(1<<3)|//SEL=8,选择通道3 ((Fpclk/1000000-1)<<8)|//转换时钟为1MHz (0<<16)|//BURST=0,软件控制转换操作 (0<<17)|//CLKS=0,使用11clock转换 (1<<21)|//PDN=1,正常工作模式 (0<<22)|//TEST1: 0=00,正常工作模式 (1<<24)|//START=1,直接启动ADC转换 (0<<27);//直接启动ADC转换时,此位无效 DelayNS(10); ADC_Data=AD0DR;//读取ADC结果,并清除DONE标志位 } //******************************************************************** voidbin_bcd(uint32xs_data)//二进制转BCD码函数 { uint32sum; uint8i; sum=xs_data; for(i=0;i<8;i++) { data_buf[i]=sum%10; sum=sum/10; } //**************************************************************** voidtimer0int(void)//定时器初始化函数 { T0TC=0; T0PR=0; T0MCR=0x03; T0MR0=Fpclk/500;//定时为2ms T0TCR=0x01; } //***************************************************************** voidmspi_send(uint8data)//spi发送程序 { S0PDR=data; while((S0PSR&0x80)==0); } //***************************************************************** void__irqtimer0_isr(void)//定时器0中断服务程序,发送数据 { mspi_send(dm[data_buf[count]]);//发送段码 mspi_send(~(wm[count]));//发送位码,数码管共阴,按位取反 key_n=key_sm();//按键返回部分 count++;//发送下一个 if(count>=8) count=0; time_2ms_flag=1;//2ms定时,置1 time_ds++; if(time_ds>=5001)//最长定时10s time_ds=0; if(time_ds%10==0)//20ms定时 time_20ms_flag=1; T0IR=0x01; VICVectAddr=0x00; } //***************************************************************** voidvic_timer0_int(void)//定时器0中断初始化函数 { VICIntSelect&=~1<<4; VICVectCntl0=0x20|4; VICVectAddr0=(uint32)timer0_isr; VICIntEnable|=1<<4; IRQEnable(); } //***************************************************************** voidmspi_int(void)//SPI初始化函数 { PINSEL0=(PINSEL0&(~(0xFF<<8)))|(0x55<<8); S0PCR=(0<<3)| (1<<4)| (1<<5)| (0<<6)| (0<<7); S0PCCR=10; } intmain(void) { uint8key_7_n=0; uint16adc_base=0; uint16adc_base_400=0; uint8adc_count=0; uint16ad_data_50=0;//求50平均值后的AD值 uint16zl_g=0;//重量,单位为g uint32adc_data_buf=0; PINSEL0&=~(3<<6);//将p0.3设为gpio IO0DIR&=~(1<<3);//p0.3设为输入功能 PINSEL2&=~(1<<3);//选择P1.16~P1.25为GPIO功能 IO1DIR|=0xFF<<18;//将P1.18~P1.25设为输出功能 IO1CLR|=0xFF<<18;//输出低电平 timer0int(); vic_timer0_int(); mspi_int(); ad_int(); while (1) { if(time_20ms_flag==1) { time_20ms_flag=0; if(adc_count<50) { AD0CR|=1<<24;//进行第一次转换 while((ADDR&0x80000000)==0);//等待转换结束 AD0CR|=1<<24;//再次启动转换 while((AD0DR&0x80000000)==0);//等待转换结束 ADC_Data=AD0DR;//读取ADC结果 ADC_Data=(ADC_Data>>6)&0x3f
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 失重 设计