天津大学自动化2010级计控实验报告(共15页).doc
精选优质文档-倾情为你奉上计算机控制实验报告学号: 班级:自动化2班 姓名:叶林奇实验一 数字量输入输出一、实验目的与要求1.通过实验熟悉并掌握实验装置原理与使用方法,掌握数据采集卡的基本使用方法。2.通过实验掌握数字输入输出通道数据采集方法。二、实验结果1、模板程序运行结果2、框架程序及运行结果Public Const SampingTime = 25 '设置采样周期,单位msSub MyDeviceOpen() '注册数据采集卡 ErrCde = DRV_DeviceOpen(0, DeviceHandle) '注册数据采集卡 Call PCI_1711ErrorTest '调用PCI_1711ErrorTest()子程序,验证函数是否执行成功 End SubSub MyOperation(intInput As Integer, intOutput As Integer) lpDioReadPort.Port = intInput '设置数字采样端口号 lpDioReadPort.value = DRV_GetAddress(DiValue) '设置读入数字量存储地址 ErrCde = DRV_DioReadPortByte(DeviceHandle, lpDioReadPort) '读取相应端口的数字量 Call PCI_1711ErrorTest '调用PCI_1711ErrorTest()子程序,验证函数是否执行成功 Call UpdateLed(DiValue) '数据刷新并显示 lpDioWritePort.Port = intOutput '设置数字量输出端口号 lpDioWritePort.Mask = 255 '输出端口各位数字量状态都可改变(值为255) lpDioWritePort.state = DiValue '设置输出数字量值 ErrCde = DRV_DioWritePortByte(DeviceHandle, lpDioWritePort) '数字量的输出 Call PCI_1711ErrorTest '调用PCI_1711ErrorTest()子程序,验证函数是否执行成功 End Sub Sub MyDeviceClose() '释放数据采集卡 ErrCde = DRV_DeviceClose(DeviceHandle) '释放数据采集卡 Call PCI_1711ErrorTest '调用子程序,验证函数是否执行成功 End Sub Sub PCI_1711ErrorTest() '验证函数是否执行成功 If (ErrCde <> 0) Then DRV_GetErrorMessage ErrCde, szErrMsg Response = MsgBox(szErrMsg, vbOKOnly, "Error!") Exit Sub End If End Sub实验二 A/D、D/A转换实验一、 实验目的与要求1、实验掌握模拟量通道中A/D,D/A转换的实现方法,掌握用计算机进行多通道A/D,D/A转换的基本方法。2、学习掌握A/D,D/A转换的相关知识。二、实验线路分析图中,模拟信号的输入输出均采用带权值的加法器。对其分析如下: 三、实验结果与分析(右下角波形为AI13)(右下角波形为AO1)对实验结果分析如下: AD采样从AI1输入DA转换从AO1输出 Uout=5-2Uin 1、原始斜坡信号 2、AI1波形(0V段由5V下移得到) Uout=5-2Uin 3、AO1波形(DA转换输出值限定为05V) 4、AI13波形框架程序:Public Const SampingTime = 10 '设置采样周期,单位msSub MyDeviceOpen() '注册数据采集卡ErrCde = DRV_DeviceOpen(0, DeviceHandle) Call PCI_1711ErrorTest '调用PCI_1711ErrorTest()子程序,验证函数是否执行成功 End SubSub MyOperation(intchan, lngread As Long, intout As Integer, intchanout As Integer) '初始化设置数据采样通道 lpAIConfig.DasChan = intchan '采样通道 lpAIConfig.DasGain = 1 'A/D增益 为1时,增益范围为:-5V+5VErrCde = DRV_AIConfig(DeviceHandle, lpAIConfig) '初始化特定的模拟量输入通道 Call PCI_1711ErrorTest '调用子程序,验证函数是否执行成功 '开始数据采集 lpAIBinaryIn.chan = intchan '采样通道 lpAIBinaryIn.TrigMode = 0 '触发方式(1外触发,0内触发,即软件触发) lpAIBinaryIn.reading = lngread '从采样通道读到的数字量 ErrCde = DRV_AIBinaryIn(DeviceHandle, lpAIBinaryIn) '读单个模拟量通道的数据返回模拟量对应的二进制数据 Call PCI_1711ErrorTest '调用子程序,验证函数是否执行成功 Call display '调用显示曲线子过程'数据输出lpAOBinaryOut.chan = intchanout '输出通道 lpAOBinaryOut.BinData = intout '输出数据 Call DRV_AOBinaryOut(DeviceHandle, lpAOBinaryOut) '接收数据量通过模拟量输出通道输出得到对应的电压值 Call PCI_1711ErrorTest '调用子程序,验证函数是否执行成功 End Sub Sub MyDeviceClose() '释放数据采集卡 ErrCde = DRV_DeviceClose(DeviceHandle) Call PCI_1711ErrorTest '调用子程序,验证函数是否执行成功 End SubSub PCI_1711ErrorTest() '验证函数是否执行成功 If (ErrCde <> 0) Then DRV_GetErrorMessage ErrCde, szErrMsg Response = MsgBox(szErrMsg, vbOKOnly, "Error!") Exit Sub End IfEnd Sub四、思考题改变采样周期系统输入输出波形有什么变化,为什么?答:增大采样周期输入输出波形看起来会更连续,减小采样周期输入输出波形会出现明显的锯齿状,甚至严重失真。原因:根据奈奎斯特采样定理,当采样频率大于等于信号频率的2倍,采样到的信号才不发生失真。实验三、数字滤波一、实验目的与要求通过实验让学生掌握一阶惯性滤波,四点加权滤波方法及影响相应滤波方法效果的因素二、 实验结果与分析1、一阶惯性滤波要求设计一个相当于 的数字滤波器,由一阶差分法可得到近似公式Yn=(1-) Xn+Yn-1其中,Yn是第n次采样后滤波结果输出值; Xn是第n次采样值; Yn-1是上次滤波结果输出值;1- =T/,是滤波平滑系数,T是采样周期;=0.2=0.4=0.6=0.8=0.9结果分析:值越大,惯性系数越大, Yn-1在Yn中所占比重越大,滤波后的波形越平滑2、四点加权滤波:近似公式:Yk=a1*Xk+a2*Xk-1+a3*Xk-2+a4*Xk-3 Xk是第k次采样值,Yk是第k次采样后滤波结果输出值,a1、a2、a3、a4是各次采样权系数,且a1+a2+a3+a4=1结果分析:不同的加权系数对应的滤波输出波形也不同,当加权系数1=0.2,加权系数2=0.3,加权系数3=0.2时输出波形较为理想框架程序:Public Const SampingTime = 50 '一阶惯性滤波采样周期,单位msPublic Const SampingTime1 = 50 '四点加权滤波采样周期,单位msSub MyDeviceOpen() '注册数据采集卡 ErrCde = DRV_DeviceOpen(0, DeviceHandle) '注册数据采集卡 Call PCI_1711ErrorTest '调用PCI_1711ErrorTest()子程序,验证函数是否执行成功 End Sub Sub MyOperation(address As Long) '参数配置 lpAIConfig.DasChan = intchan '采样通道 intchan lpAIConfig.DasGain = 0 'A/D增益 为0时,增益范围为:-10V+10V ErrCde = DRV_AIConfig(DeviceHandle, lpAIConfig) '初始化特定的模拟量输入通道 Call PCI_1711ErrorTest '调用子程序,验证函数是否执行成功 '采集数据 AiVolIn.chan = intchan '采样通道 AiVolIn.gain = 0 '设置增益 AiVolIn.TrigMode = 0 '触发方式(内部触发) AiVolIn.voltage = address '采样通道模拟量值 ErrCde = DRV_AIVoltageIn(DeviceHandle, AiVolIn) '读模拟量通道,返回对应的电压值 Call PCI_1711ErrorTest '调用子程序,验证函数是否执行成功End SubSub MyDeviceClose() '释放数据采集卡 ErrCde = DRV_DeviceClose(DeviceHandle) '释放数据采集卡 Call PCI_1711ErrorTest '调用子程序,验证函数是否执行成功 End SubSub PCI_1711ErrorTest() '验证函数是否执行成功 If (ErrCde <> 0) Then DRV_GetErrorMessage ErrCde, szErrMsg Response = MsgBox(szErrMsg, vbOKOnly, "Error!") Exit Sub End IfEnd Sub专心-专注-专业