传感器课程设计报告.docx
《传感器课程设计报告.docx》由会员分享,可在线阅读,更多相关《传感器课程设计报告.docx(25页珍藏版)》请在冰点文库上搜索。
传感器课程设计报告
实训报告
课程名称传感器与测试技术技能实习
学院
专业
班级
学生姓名
学号
一、设计课题……………………………………………1
二、整体设计方案………………………………………4
三、蓄电池充放电量管理系统…………………………8
四、使用硬件介绍………………………………………10
五、调试过程……………………………………………13
六、实训小结……………………………………………13
七、附录…………………………………………………15
实习报告
1.设计课题
设计一个蓄电池电量计的自动测控系统,能自动采集蓄电池的充、放电电流并转化,数据判读后进行电量分析、计算。
具体技术要求:
1.对蓄电池放电、充电的数据采集,转换和实时显示蓄电池充电电量,放电电量和当前总电量。
2.电量计电量的计算
(1)数据判读
具体测控时每隔0.5s采集充、放电参数一次,每次采集后与相应的阀值进行对比,当这个数值超出范围,即作为无效值放弃,连续采集、对比6次,将无效值剔除后的值取平均,作为本次的有效遥测参数值。
如果6次数据都是无效值,则进行下一组数据采集。
(上、下限阀值用户可设置)
(2)放电电量计算
放电电量通过测量的”蓄电池组放电电流”计算,具体表达方式如下:
每隔0.5s采集蓄电池放电电流,连续采集6次,作超限判定及平均值的计算。
若参数有效,开始放电电量的计算;放电电量存储单元累加
Q放=Q放0+K*∫I放dt,
K为充放电比值,可用户设置,dt取0.5s,I3为dt内放电电流平均值。
Q放0的初值为0.用户可以设置,用于修正放电量的计算结果。
(3)充电电量计算
充电电量通过测量”蓄电池充电电流”计算,具体表达方式如下:
每0.5s采集蓄电池充电电流,连续采集6次,作超限判定及平均值的计算。
若参数有效,开始充电电量的计算;充电电量存储单元累加
Q充=∫I充dt
dt取0.5s,I充为dt内充电电流平均值。
二.设计方案
在编辑的VB程序中,操作者可以经过自己手动输入,设置充电阀值的上限与下限,信号经A/D转化卡取在范围内的信号进行计算,A/D转换模块将输入的模拟电压转换为数字电压,每0.5秒进行一次信号采集,每采集完6个有效信号,取这6个有效信号的平均值进行积分运算,并显示出剩余的电量值。
用户还需手动输入充放电比值K与Q放0的初值,以保证当电量在自己设定的值下发出警报。
(VB程序见附录)
程序界面如下:
界面左上角的label框显示采集信号的数值,设定每隔0.5秒采集一次信号,将采集的信号放入LIST1中,用户手动输入上下阀值,下方的滚动条用来设置采样频率,程序根据用户输入的上下限阀值进行信号筛选,当信号在用户设置的范围内,称为有效信号,并且在LIST1的右侧打“√”。
然后将有效信号放入LIST2中,采集满6个则程序自动清空。
当LIST2中出现6个有效信号时,程序将计算LIST3中将显示这6个有效信号的平均值。
LABEL2:
每当LIST3中出现一个平均值,对这个平均值进行积分,不断进行累加,直至实时电量充满或放完,系统自动停止工作。
(积分公式为:
Q放=Q放0+K*∫I放dt,Q放0为用户自定义的值,K为充放电比值,可用户设置,dt取0.5s,I为dt内放电电流平均值。
)LIST4中显示实时电量,以充电为例,实时电量=满电量-充放电量-Q放0。
TEXT5记录当前的实时电量值,以便下次充电或放电设置的初值。
Command1:
充电
Command2:
放电
Command3:
停止
程序流程框图如下:
点击运行
设定自定义参数
开始监控
采集电压信号(每隔
0.5S一次),显示在
List1
采集的信号
是否在阀值范围内?
YN
每六位有效值取
一次平均值,并显示
在list3
根据求得的数据与
已设的参数,代入
公式进行计算,同步
显示当前的充放电量
和实时电量
是否到达
Y要求的电量?
N
结束
(模拟运行过程中用三节1.5V干电池替代输入信号)
以下是VB在运行过程中的图片:
程序在模拟充放电工作状态时:
当充电值到达用户设定上限时:
当放电值到达用户设定的最低值时:
设置充电比值K:
三、蓄电池充放电量管理系统
根据流程图可知,系统的硬件采用三层体系:
第一层:
程序电源模拟器、电子负载模拟器、太阳能电池模拟器和电源控制器。
第二层:
通讯GPIB接口和通信RS232接口,用于连接模拟器和上位控制系统GPIB接口以及上位控制系统RS232接口。
第三层:
电源演示控制系统(上位控制系统)
系统软件总体框架:
由总框架图可知,整个蓄电池的工作系统有许多不同的模块组合而成,本次课程设计的核心内容便是“电源参数设置平台”这一模块的制作,通过对相关资料的查阅我们得知电源演示控制系统具有模拟太阳电池输出伏,安特性曲线功能,反映电池的输出功率,用代替±Y太阳电池翼,并给两条母线供电和蓄电组充电功能,能够满足卫星一次电源系统供电及测试要求。
针对系统的设计要求,拟定的界面需要达成如下功能:
软件采用窗口操作方式,人机界面友好。
提供不同的供电曲线设置。
实现对程控电流模拟器的远程控制。
实现对电子负载模拟器的远程控制。
可实现模拟光照阴影循环周期功能。
测试状态下,实现对太阳电池阵模拟器状态判读及参数偏差报警。
基于图形模式的测试数据回放和监控。
四、使用硬件介绍
研华USB/4704型AD采集卡
设备与计算机连接方式:
采集卡的A/D转换端口
采集卡的D/A转换端口
具体参数如下:
传输速度:
48KS/S,14位,8通道多功能USB模块
连接方式:
支持USB2.0
供电方式:
总线供电
通道:
8个模拟输入通道
分辨率:
14位分辨率AI
采样率高达48kS/s的 8-CHDI/8-chDO,2路AO和一个32位计数器
USB-4704是一种使用方便的USB数据采集模块。
设备能够直接从USB端口获得所有所需的电力,因此比要求外部电源连接。
5、系统调试过程
软件编辑完成开始运行之后,第一步先要选定充放电的阀值上下限,这时,将3节1.5V的干电池组合在一起连接到A/D采集卡的信号输入段作为采集到的输入信号,通过程序将数据采集卡采集到的号放入lsit1框中。
在调试的时候,Label3中现实的积分值对我们来说是一个较大的挑战。
由于之前从未接触过使用vb计算过积分,vb软件中也没有自带积分的功能。
在老师的帮助下老师才解决了这个问题,所谓积分,其实就是在一定范围之内将变量按照一定规律进行累加,在掌握了这一规律后,我们使用了一下简单的循环语句便计算出了这个积分的值。
在调试过程中我们也遇到了许多程序编写的错误。
编写代码时,VB会对程序进行语法检查,当发现程序中存在打字错误,遗漏关键字或标点符等语法错误。
在顺利编辑调试完VB程序之后,老师要求我们制作一个控件,通过这个控件能够实现将采集卡的数据放到VB程序里这一过程,通过对采集卡使用说明书的阅读,我们找到了这些语句,并通过对示例程序的阅读和理解,掌握了这些语句的使用方法,成功实现了数据的录入。
6、实训小结
这是大三的最后一个实训,在感叹时光飞逝的同时,也不得不承认自己动手能力仍有较大的欠缺,虽然学了一学期的机械工程测试技术,但也只是了解到了一些皮毛而已,通过老师的上课,我对传感器的一些基本知识有了了解,对于传感器的工作方式也有了一个大致的印象,它是一门综合应用相关课程的知识和内容,其涉及范围很广,电工学,高等数学,工程控制原理等等各方面都有涉及。
我们在学习的时候就遇到了许多困难,但是这门课的实用性很强,因此本次实训就显得非常重要。
我们小组的实验课题是蓄电池电量计测控系统。
我们的任务是设计一个蓄电池电量计的自动测控系统,能自动采集蓄电池的充、放电电流并转化,数据判读后进行电量分析、计算。
经过了为期一周的时间,我们对于AD采集卡的大致原理有了一定的了解,在组长的带领下我们开始了vb程序的编辑,编程中出现了许许多多的困难,但我们并没有放弃,最终在老师的帮助下我们调试成功。
实训伊始,由于自己的理论知识基础不好,在实验过程遇到了许多困难,这也使我感到理论知识的重要性。
但是我并没有气馁,在实验中发现问题,通过在网络上查找资料,自学等等,独立思考,最终解决问题,从而也就加深我对课本理论知识的理解,达到了“双赢”的效果。
在做测试技术的实验前,我以为不会难做,就像以前做物理实验一样,做完实验,然后两下子就将实验报告做完.直到做完测试实验时,我才知道其实并不容易做,但学到的知识与难度成正比,使我受益匪浅。
通过这次测试技术的实验,使我学到了不少实用的知识,更重要的是,做实验的过程,思考问题的方法,这与做其他的实验是通用的,真正使我们受益匪浅。
一个短暂而又充实的实训,对我们走向社会起到了一个桥梁纽带的作用,这将会是人生的一段重要的经历,对于培养我将来走上工作岗位的学习能力也有着很大帮助。
理论联系实践才能发挥出巨大的能量,每每想到这句话心中都会感慨万千,感谢学校给我们提供了一个这样的机会,让我们的知识能够学的更扎实,性格也得到了磨练,只有认真对待方能事倍功半。
附录(VB程序):
PrivateSubcmdExit_Click()
frmRun.Hide
frmDevSel.Show
frmDevSel.cmdExit.SetFocus
EndSub
PrivateSubcmdRead_Click()
DimttAsLong
DimvoltageAsSingle
tmrRead.Enabled=False
AiVolIn.chan=lpAIConfig.DasChan
AiVolIn.gain=lpAIConfig.DasGain
'AiVolIn.TrigMode=AiCtrMode
'internaltriger
AiVolIn.TrigMode=0
AiVolIn.voltage=DRV_GetAddress(voltage)
shapLed.FillColor=QBColor(12)
ErrCde=DRV_AIVoltageIn(DeviceHandle,AiVolIn)
If(ErrCde<>0)Then
DRV_GetErrorMessageErrCde,szErrMsg
Response=MsgBox(szErrMsg,vbOKOnly,"Error!
!
")
ExitSub
EndIf
UpDateValue(voltage)
EndSub
PrivateSubcmdRead_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
shapLed.FillColor=QBColor(12)
EndSub
PrivateSubCommand1_Click()
tmrRead.Enabled=True
tmrRead1.Enabled=False
Command2.Enabled=False
IfText1.Text=""Then
MsgBox"请设置阀值上限"
tmrRead.Enabled=False
Label7.Caption=""
List1.Clear
EndIf
IfText2.Text=""Then
MsgBox"请设置阀值下限"
tmrRead.Enabled=False
Label7.Caption=""
List1.Clear
EndIf
IfText3.Text=""OrText3.Text="0"Then
MsgBox"请设置充放电比值K"
tmrRead.Enabled=False
Label7.Caption=""
List1.Clear
EndIf
IfText4.Text=""Then
MsgBox"请设置Q放0的初值"
tmrRead.Enabled=False
Label7.Caption=""
List1.Clear
EndIf
EndSub
PrivateSubCommand2_Click()
tmrRead1.Enabled=True
tmrRead.Enabled=False
Command1.Enabled=False
IfText1.Text=""Then
MsgBox"请设置阀值上限"
tmrRead1.Enabled=False
Label7.Caption=""
List1.Clear
EndIf
IfText2.Text=""Then
MsgBox"请设置阀值下限"
tmrRead1.Enabled=False
Label7.Caption=""
List1.Clear
EndIf
EndSub
PrivateSubCommand3_Click()
'Text5.Visible=False
Command1.Enabled=True
Command2.Enabled=True
tmrRead.Enabled=False
tmrRead1.Enabled=False
List1.Clear
List2.Clear
List3.Clear
s=0
i=0
EndSub
PrivateSubForm_Load()
hscrlFreq_Change
Label2.Caption=""
Label3.Caption=""
Label7.Caption=""
Text1.Text=""
Text2.Text=""
Text3.Text=""
Text4.Text=""
Text5.Text=""
Command1.Caption="放电"
Command2.Caption="充电"
Command3.Caption="停止"
'Text5.Visible=False
tmrRead.Enabled=False
tmrRead1.Enabled=False
EndSub
PrivateSubForm_Unload(CancelAsInteger)
frmDevSel.Show
EndSub
PrivateSubhscrlFreq_Change()
'IfhscrlFreq.value=0Then
'tmrRead.Interval=0
'Else
'tmrRead.Interval=10000/hscrlFreq.value
'EndIf
txtSample.Text=Format(0.5,"###0.00")
'"ReadOneShot"woulddisablethe"trmREAD"Timer,
'soitneedtoenablehere.
tmrRead.Enabled=True
tmrLed.Enabled=True
EndSub
PrivateSubtmrLed_Timer()
shapLed.FillColor=QBColor(8)
EndSub
PrivateSubtmrRead_Timer()
DimvoltageAsSingle
shapLed.FillColor=QBColor(12)
AiVolIn.chan=lpAIConfig.DasChan
AiVolIn.gain=lpAIConfig.DasGain
'AiVolIn.TrigMode=AiCtrMode
'internaltriger
AiVolIn.TrigMode=0
AiVolIn.voltage=DRV_GetAddress(voltage)
ErrCde=DRV_AIVoltageIn(DeviceHandle,AiVolIn)
If(ErrCde<>0)Then
DRV_GetErrorMessageErrCde,szErrMsg
Response=MsgBox(szErrMsg,vbOKOnly,"Error!
!
")
ExitSub
EndIf
UpDateValue(voltage)
StaticiAsInteger
DimsAsDouble
DimbAsDouble
IfVal(txtVoltRead.Text)>Val(Text2.Text)AndVal(txtVoltRead.Text)<=Val(Text1.Text)Then'上、下限阀值用户可设置
List1.AddItemtxtVoltRead.Text&"√"
i=i+1
Else
List1.AddItemtxtVoltRead.Text
i=i+1
EndIf
IfRight(List1.List(i-1),1)="√"Then
List2.AddItemLeft(List1.List(i-1),Len(List1.List(i-1))-1)
EndIf
IfList2.ListCount=6Then
IfList2.ListCount<>0Then
Fora=0ToList2.ListCount
s=s+Val(List2.List(a))
Next
b=s/6
b=Format(b,"0.0000")
List3.AddItemb
List2.Clear
EndIf
List1.Clear
i=0
s=0
EndIf
kk=Text3.Text'K为充放电比值,可用户设置
Qfang0=Text4.Text'可用户设置
dt=0.5'dt取0.5s
Fora=0ToList3.ListCount
Ifang=Ifang+Val(List3.List(a))
Qfang=Qfang0+kk*Ifang*dt
Qfang=Format(Qfang,"0.0000")
Label2.Caption=Val(Qfang)
Label3.Caption=Val(100-Qfang)
Label13.Caption=Val(100-Qfang)
Text5.Text=Label3.Caption
IfLabel3.CaptiontmrRead.Enabled=False
Label3.Caption=Val(Text4.Text)
MsgBox"电量不得低于"&Val(Text4.Text)&",停止放电"
ExitFor
EndIf
Next
EndSub
PrivateSubUpDateValue(fValueAsSingle)
'Sincetheoutputboxistoosmalltodisplayallthedigits
'oftheinputvoltage,soitmustusetoformattogetbetter
'display.
txtVoltRead.Text=Format(fValue,"###0.00")
EndSub
PrivateSubtmrRead1_Timer()
DimvoltageAsSingle
shapLed.FillColor=QBColor(12)
AiVolIn.chan=lpAIConfig.DasChan
AiVolIn.gain=lpAIConfig.DasGain
'AiVolIn.TrigMode=AiCtrMode
'internaltriger
AiVolIn.TrigMode=0
AiVolIn.voltage=DRV_GetAddress(voltage)
ErrCde=DRV_AIVoltageIn(DeviceHandle,AiVolIn)
If(ErrCde<>0)Then
DRV_GetErrorMessageErrCde,szErrMsg
Response=MsgBox(szErrMsg,vbOKOnly,"Error!
!
")
ExitSub
EndIf
UpDateValue(voltage)
StaticiAsInteger
DimsAsDouble
DimbAsDouble
IfVal(txtVoltRead.Text)>Val(Text2.Text)AndVal(txtVoltRead.Text)<=Val(Text1.Text)Then'上、下限阀值用户可设置
List1.AddItemtxtVoltRead.Text&"√"
i=i+1
Else
List1.AddItemtxtVoltRead.Text
i=i+1
EndIf
IfRight(List1.List(i-1),1)="√"Then
List2.AddItemLeft(List1.List(i-1),Len(List1.List(i-1))-1)
EndIf
IfList2.ListCount=6Then
IfList2.ListCount<>0Then
Fora=0ToList2.ListCount
s=s+Val(List2.List(a))
Next
b=s/6
b=Format(b,"0.0000")
List3.AddItemb
List2.Clear
EndIf
List1.Cle