当前位置:文档之家› MPU6050+HMC5883驱动程序

MPU6050+HMC5883驱动程序

MPU6050+HMC5883驱动程序
MPU6050+HMC5883驱动程序

#include "MPU6050.h"

#include "includes.h"

#include "math.h"

u8 mpu6050_buffer[14];

u8 hmc5883_buffer[6];

float HMC5883_Angle_F;

u16 HMC5883_Angle_D;

int16_t ax,ay,az;

S_INT16_XYZ GYRO_OFFSET,ACC_OFFSET;

uint8_t GYRO_OFFSET_OK = 1;

uint8_t ACC_OFFSET_OK = 1;

S_INT16_XYZ MPU6050_ACC_LAST,MPU6050_GYRO_LAST;

/**************************实现函数******************************************** //将iic读取到得数据分拆,放入相应寄存器

******************************************************************************* /

void MPU6050_Dataanl(void)

{

MPU6050_ACC_LAST.X=((((int16_t)mpu6050_buffer[0]) << 8) | mpu6050_buffer[1])- 510; //ACC_OFFSET.X;

MPU6050_ACC_LAST.Y=((((int16_t)mpu6050_buffer[2]) << 8) | mpu6050_buffer[3])- 42;//ACC_OFFSET.Y;

MPU6050_ACC_LAST.Z=((((int16_t)mpu6050_buffer[4]) << 8) | mpu6050_buffer[5]);//- 16950;//ACC_OFFSET.Z;

//跳过温度ADC

MPU6050_GYRO_LAST.X=((((int16_t)mpu6050_buffer[8]) << 8) | mpu6050_buffer[9])-227;// - GYRO_OFFSET.X;

MPU6050_GYRO_LAST.Y=((((int16_t)mpu6050_buffer[10]) << 8) | mpu6050_buffer[11])-18;// - GYRO_OFFSET.Y;

MPU6050_GYRO_LAST.Z=((((int16_t)mpu6050_buffer[12]) << 8) | mpu6050_buffer[13])+110;//+26; //- GYRO_OFFSET.Z;

VIEW_16_1=(int16_t)MPU6050_ACC_LAST.X;

VIEW_16_2=(int16_t)MPU6050_ACC_LAST.Y;

VIEW_16_3=(int16_t)MPU6050_ACC_LAST.Z;

VIEW_16_4=(int16_t)MPU6050_GYRO_LAST.X;

VIEW_16_5=(int16_t)MPU6050_GYRO_LAST.Y;

VIEW_16_6=(int16_t)MPU6050_GYRO_LAST.Z;

///////////////////////////////////////////////////////////////////////////////////////////////// ///

if(!GYRO_OFFSET_OK)//开机时候得到陀螺仪的偏移值

{

static int32_t tempgx=0,tempgy=0,tempgz=0;

static uint8_t cnt_g=0;

//LED1_ON;

if(cnt_g==0)

{

GYRO_OFFSET.X=0;

GYRO_OFFSET.Y=0;

GYRO_OFFSET.Z=0;

tempgx = 0;

tempgy = 0;

tempgz = 0;

cnt_g = 1;

return;

}

tempgx+= MPU6050_GYRO_LAST.X;

tempgy+= MPU6050_GYRO_LAST.Y;

tempgz+= MPU6050_GYRO_LAST.Z;

if(cnt_g==200)

{

GYRO_OFFSET.X=tempgx/cnt_g;

GYRO_OFFSET.Y=tempgy/cnt_g;

GYRO_OFFSET.Z=tempgz/cnt_g;

cnt_g = 0;

GYRO_OFFSET_OK = 1;

return;

}

cnt_g++;

}

if(!ACC_OFFSET_OK)//开机时候得到加速度计的偏移值{

static int32_t tempax=0,tempay=0,tempaz=0;

static uint8_t cnt_a=0;

//LED1_ON;

if(cnt_a==0)

{

ACC_OFFSET.X = 0;

ACC_OFFSET.Y = 0;

ACC_OFFSET.Z = 0;

tempax = 0;

tempay = 0;

tempaz = 0;

cnt_a = 1;

return;

}

tempax+= MPU6050_ACC_LAST.X;

tempay+= MPU6050_ACC_LAST.Y;

tempaz+= MPU6050_ACC_LAST.Z;

if(cnt_a==200)

{

ACC_OFFSET.X=tempax/cnt_a;

ACC_OFFSET.Y=tempay/cnt_a;

ACC_OFFSET.Z=tempaz/cnt_a;

cnt_a = 0;

ACC_OFFSET_OK = 1;

return;

}

cnt_a++;

}

}

/**************************实现函数******************************************** //将iic读取到得数据分拆,放入相应寄存器,更新MPU6050_Last

******************************************************************************* /

void MPU6050_READ(void)

{

i2cRead(MPU6050_Addr,MPU6050_RA_ACCEL_XOUT_H,14,mpu6050_buffer);

}

/**************************实现函数******************************************** *函数原型: u8 IICwriteBit(u8 dev, u8 reg, u8 bitNum, u8 data)

*功能: 读修改写指定设备指定寄存器一个字节中的1个位

输入dev 目标设备地址

reg 寄存器地址

bitNum 要修改目标字节的bitNum位

data 为0 时,目标位将被清0 否则将被置位

返回成功为1

失败为0

******************************************************************************* /

void IICwriteBit(u8 dev, u8 reg, u8 bitNum, u8 data){

u8 b;

i2cRead(dev, reg, 1, &b);

b = (data != 0) ? (b | (1 << bitNum)) : (b & ~(1 << bitNum));

i2cWrite(dev, reg, b);

}

/**************************实现函数******************************************** *函数原型: u8 IICwriteBits(u8 dev,u8 reg,u8 bitStart,u8 length,u8 data)

*功能: 读修改写指定设备指定寄存器一个字节中的多个位

输入dev 目标设备地址

reg 寄存器地址

bitStart 目标字节的起始位

length 位长度

data 存放改变目标字节位的值

返回成功为1

失败为0

******************************************************************************* /

void IICwriteBits(u8 dev,u8 reg,u8 bitStart,u8 length,u8 data)

{

u8 b,mask;

i2cRead(dev, reg, 1, &b);

mask = (0xFF << (bitStart + 1)) | 0xFF >> ((8 - bitStart) + length - 1);

data <<= (8 - length);

data >>= (7 - bitStart);

b &= mask;

b |= data;

i2cWrite(dev, reg, b);

}

/**************************实现函数******************************************** *函数原型: void MPU6050_setClockSource(uint8_t source)

*功能: 设置MPU6050 的时钟源

* CLK_SEL | Clock Source

* --------+--------------------------------------

* 0 | Internal oscillator

* 1 | PLL with X Gyro reference

* 2 | PLL with Y Gyro reference

* 3 | PLL with Z Gyro reference

* 4 | PLL with external 32.768kHz reference

* 5 | PLL with external 19.2MHz reference

* 6 | Reserved

* 7 | Stops the clock and keeps the timing generator in reset

******************************************************************************* /

void MPU6050_setClockSource(uint8_t source){

IICwriteBits(MPU6050_Addr, MPU6050_RA_PWR_MGMT_1, MPU6050_PWR1_CLKSEL_BIT, MPU6050_PWR1_CLKSEL_LENGTH, source);

}

/** Set full-scale gyroscope range.

* @param range New full-scale gyroscope range value

* @see getFullScaleRange()

* @see MPU6050_GYRO_FS_250

* @see MPU6050_RA_GYRO_CONFIG

* @see MPU6050_GCONFIG_FS_SEL_BIT

* @see MPU6050_GCONFIG_FS_SEL_LENGTH

*/

void MPU6050_setFullScaleGyroRange(uint8_t range) {

IICwriteBits(MPU6050_Addr, MPU6050_RA_GYRO_CONFIG, MPU6050_GCONFIG_FS_SEL_BIT, MPU6050_GCONFIG_FS_SEL_LENGTH, range);

}

/**************************实现函数******************************************** *函数原型: void MPU6050_setFullScaleAccelRange(uint8_t range)

*功能: 设置MPU6050 加速度计的最大量程

******************************************************************************* /

void MPU6050_setFullScaleAccelRange(uint8_t range) {

IICwriteBits(MPU6050_Addr, MPU6050_RA_ACCEL_CONFIG, MPU6050_ACONFIG_AFS_SEL_BIT, MPU6050_ACONFIG_AFS_SEL_LENGTH, range);

}

/**************************实现函数******************************************** *函数原型: void MPU6050_setSleepEnabled(uint8_t enabled)

*功能: 设置MPU6050 是否进入睡眠模式

enabled =1 睡觉

enabled =0 工作

******************************************************************************* /

void MPU6050_setSleepEnabled(uint8_t enabled) {

IICwriteBit(MPU6050_Addr, MPU6050_RA_PWR_MGMT_1, MPU6050_PWR1_SLEEP_BIT, enabled);

}

/**************************实现函数******************************************** *函数原型: void MPU6050_setI2CMasterModeEnabled(uint8_t enabled)

*功能: 设置MPU6050 是否为AUX I2C线的主机

******************************************************************************* /

void MPU6050_setI2CMasterModeEnabled(uint8_t enabled) {

IICwriteBit(MPU6050_Addr, MPU6050_RA_USER_CTRL, MPU6050_USERCTRL_I2C_MST_EN_BIT, enabled);

}

/**************************实现函数******************************************** *函数原型: void MPU6050_setI2CBypassEnabled(uint8_t enabled)

*功能: 设置MPU6050 是否为AUX I2C线的主机

******************************************************************************* /

void MPU6050_setI2CBypassEnabled(uint8_t enabled) {

IICwriteBit(MPU6050_Addr, MPU6050_RA_INT_PIN_CFG, MPU6050_INTCFG_I2C_BYPASS_EN_BIT, enabled);

}

void MPU6050_setDLPF(uint8_t mode)

{

IICwriteBits(MPU6050_Addr, MPU6050_RA_CONFIG, MPU6050_CFG_DLPF_CFG_BIT, MPU6050_CFG_DLPF_CFG_LENGTH, mode);

}

/**************************实现函数******************************************** *函数原型: void MPU6050_initialize(void)

*功能: 初始化MPU6050 以进入可用状态。

******************************************************************************* /

void MPU6050_INIT(void)

{

i2cInit();

MPU6050_setClockSource(MPU6050_CLOCK_PLL_XGYRO); //设置时钟0x6b 0x01

delay_ms(2);

MPU6050_setFullScaleGyroRange(MPU6050_GYRO_FS_500);//陀螺仪最大量程+-500度每秒

delay_ms(2);

MPU6050_setFullScaleAccelRange(MPU6050_ACCEL_FS_4); //加速度度最大量程+-4G delay_ms(2);

MPU6050_setDLPF(MPU6050_DLPF_BW_42);

delay_ms(2);

MPU6050_setSleepEnabled(0); //进入工作状态

delay_ms(2);

MPU6050_setI2CMasterModeEnabled(0); //不让MPU6050 控制AUXI2C

delay_ms(2);

MPU6050_setI2CBypassEnabled(1); //主控制器的I2C与MPU6050的AUXI2C 直通。控制器可以直接访问HMC5883L

delay_ms(2);

// //配置MPU6050 的中断模式和中断电平模式

// IICwriteBit(MPU6050_Addr, MPU6050_RA_INT_PIN_CFG,

MPU6050_INTCFG_INT_LEVEL_BIT, 0);

// IICwriteBit(MPU6050_Addr, MPU6050_RA_INT_PIN_CFG, MPU6050_INTCFG_INT_OPEN_BIT, 0);

// IICwriteBit(MPU6050_Addr, MPU6050_RA_INT_PIN_CFG, MPU6050_INTCFG_LATCH_INT_EN_BIT, 1);

// IICwriteBit(MPU6050_Addr, MPU6050_RA_INT_PIN_CFG, MPU6050_INTCFG_INT_RD_CLEAR_BIT, 1);

// //开数据转换完成中断

// IICwriteBit(MPU6050_Addr, MPU6050_RA_INT_ENABLE, MPU6050_INTERRUPT_DATA_RDY_BIT, 1);

}

void HMC5883_INIT(void)

{

i2cWrite(HMC5883_Address, HMC5883_ModeReg, 0X00);

}

void HMC5883_READ(void)

{

i2cRead(HMC5883_Address,HMC5883_XOUT_H,6,hmc5883_buffer);

}

void GetAngle(void)

{

HMC5883_READ(); //连续读出数据,存储在BUF中

ax = hmc5883_buffer[0] << 8 | hmc5883_buffer[1]; //Combine MSB and LSB of X Data output register

az = hmc5883_buffer[2] << 8 | hmc5883_buffer[3]; //Combine MSB and LSB of Z Data output register

ay = hmc5883_buffer[4] << 8 | hmc5883_buffer[5]; //Combine MSB and LSB of Y Data output register

// if(ax >= 0xf000) ax=0;

ay=ay+115;

HMC5883_Angle_F= atan2((double)ay,(double)ax) * (180 / 3.14159265) + 180; // angle in degrees

HMC5883_Angle_D=(u16)HMC5883_Angle_F;

}

H文件

#ifndef __MPU6050_H_

#define __MPU6050_H_

#include "stm32f10x.h"

#define true 1

#define false 0

#define MPU6050_READRATE 1000 //6050读取频率

#define MPU6050_READTIME 0.001 //6050读取时间间隔

#define EE_6050_ACC_X_OFFSET_ADDR 0

#define EE_6050_ACC_Y_OFFSET_ADDR 1

#define EE_6050_ACC_Z_OFFSET_ADDR 2

#define EE_6050_GYRO_X_OFFSET_ADDR 3

#define EE_6050_GYRO_Y_OFFSET_ADDR 4

#define EE_6050_GYRO_Z_OFFSET_ADDR 5

#define MPU6050_Addr 0x68

#define MPU6050_ADDRESS_AD0_LOW 0x68 // address pin low (GND), default for InvenSense evaluation board

#define MPU6050_ADDRESS_AD0_HIGH 0x69 // address pin high (VCC)

#define MPU6050_DEFAULT_ADDRESS MPU6050_ADDRESS_AD0_LOW

#define MPU6050_RA_XG_OFFS_TC 0x00 //[7] PWR_MODE, [6:1] XG_OFFS_TC, [0] OTP_BNK_VLD

#define MPU6050_RA_YG_OFFS_TC 0x01 //[7] PWR_MODE, [6:1] YG_OFFS_TC, [0] OTP_BNK_VLD

#define MPU6050_RA_ZG_OFFS_TC 0x02 //[7] PWR_MODE, [6:1] ZG_OFFS_TC, [0] OTP_BNK_VLD

#define MPU6050_RA_X_FINE_GAIN 0x03 //[7:0] X_FINE_GAIN

#define MPU6050_RA_Y_FINE_GAIN 0x04 //[7:0] Y_FINE_GAIN

#define MPU6050_RA_Z_FINE_GAIN 0x05 //[7:0] Z_FINE_GAIN

#define MPU6050_RA_XA_OFFS_H 0x06 //[15:0] XA_OFFS

#define MPU6050_RA_XA_OFFS_L_TC 0x07

#define MPU6050_RA_YA_OFFS_H 0x08 //[15:0] YA_OFFS

#define MPU6050_RA_YA_OFFS_L_TC 0x09

#define MPU6050_RA_ZA_OFFS_H 0x0A //[15:0] ZA_OFFS

#define MPU6050_RA_ZA_OFFS_L_TC 0x0B

#define MPU6050_RA_XG_OFFS_USRH 0x13 //[15:0] XG_OFFS_USR #define MPU6050_RA_XG_OFFS_USRL 0x14

#define MPU6050_RA_YG_OFFS_USRH 0x15 //[15:0] YG_OFFS_USR #define MPU6050_RA_YG_OFFS_USRL 0x16

#define MPU6050_RA_ZG_OFFS_USRH 0x17 //[15:0] ZG_OFFS_USR #define MPU6050_RA_ZG_OFFS_USRL 0x18

#define MPU6050_RA_SMPLRT_DIV 0x19

#define MPU6050_RA_CONFIG 0x1A

#define MPU6050_RA_GYRO_CONFIG 0x1B

#define MPU6050_RA_ACCEL_CONFIG 0x1C

#define MPU6050_RA_FF_THR 0x1D

#define MPU6050_RA_FF_DUR 0x1E

#define MPU6050_RA_MOT_THR 0x1F

#define MPU6050_RA_MOT_DUR 0x20

#define MPU6050_RA_ZRMOT_THR 0x21

#define MPU6050_RA_ZRMOT_DUR 0x22

#define MPU6050_RA_FIFO_EN 0x23

#define MPU6050_RA_I2C_MST_CTRL 0x24

#define MPU6050_RA_I2C_SLV0_ADDR 0x25

#define MPU6050_RA_I2C_SLV0_REG 0x26

#define MPU6050_RA_I2C_SLV0_CTRL 0x27

#define MPU6050_RA_I2C_SLV1_ADDR 0x28

#define MPU6050_RA_I2C_SLV1_REG 0x29

#define MPU6050_RA_I2C_SLV1_CTRL 0x2A

#define MPU6050_RA_I2C_SLV2_ADDR 0x2B

#define MPU6050_RA_I2C_SLV2_REG 0x2C

#define MPU6050_RA_I2C_SLV2_CTRL 0x2D

#define MPU6050_RA_I2C_SLV3_ADDR 0x2E

#define MPU6050_RA_I2C_SLV3_REG 0x2F

#define MPU6050_RA_I2C_SLV3_CTRL 0x30

#define MPU6050_RA_I2C_SLV4_ADDR 0x31

#define MPU6050_RA_I2C_SLV4_REG 0x32

#define MPU6050_RA_I2C_SLV4_DO 0x33

#define MPU6050_RA_I2C_SLV4_CTRL 0x34

#define MPU6050_RA_I2C_SLV4_DI 0x35

#define MPU6050_RA_I2C_MST_STATUS 0x36

#define MPU6050_RA_INT_PIN_CFG 0x37

#define MPU6050_RA_INT_ENABLE 0x38

#define MPU6050_RA_DMP_INT_STATUS 0x39

#define MPU6050_RA_INT_STATUS 0x3A

#define MPU6050_RA_ACCEL_XOUT_H 0x3B

#define MPU6050_RA_ACCEL_XOUT_L 0x3C

#define MPU6050_RA_ACCEL_YOUT_H 0x3D

#define MPU6050_RA_ACCEL_YOUT_L 0x3E

#define MPU6050_RA_ACCEL_ZOUT_H 0x3F

#define MPU6050_RA_ACCEL_ZOUT_L 0x40

#define MPU6050_RA_TEMP_OUT_H 0x41

#define MPU6050_RA_TEMP_OUT_L 0x42

#define MPU6050_RA_GYRO_XOUT_H 0x43

#define MPU6050_RA_GYRO_XOUT_L 0x44

#define MPU6050_RA_GYRO_YOUT_H 0x45

#define MPU6050_RA_GYRO_YOUT_L 0x46

#define MPU6050_RA_GYRO_ZOUT_H 0x47

#define MPU6050_RA_GYRO_ZOUT_L 0x48

#define MPU6050_RA_EXT_SENS_DATA_00 0x49

#define MPU6050_RA_EXT_SENS_DATA_01 0x4A

#define MPU6050_RA_EXT_SENS_DATA_02 0x4B

#define MPU6050_RA_EXT_SENS_DATA_03 0x4C

#define MPU6050_RA_EXT_SENS_DATA_04 0x4D

#define MPU6050_RA_EXT_SENS_DATA_05 0x4E

#define MPU6050_RA_EXT_SENS_DATA_06 0x4F

#define MPU6050_RA_EXT_SENS_DATA_07 0x50

#define MPU6050_RA_EXT_SENS_DATA_08 0x51

#define MPU6050_RA_EXT_SENS_DATA_09 0x52

#define MPU6050_RA_EXT_SENS_DATA_10 0x53

#define MPU6050_RA_EXT_SENS_DATA_11 0x54

#define MPU6050_RA_EXT_SENS_DATA_12 0x55

#define MPU6050_RA_EXT_SENS_DATA_13 0x56

#define MPU6050_RA_EXT_SENS_DATA_14 0x57

#define MPU6050_RA_EXT_SENS_DATA_15 0x58

#define MPU6050_RA_EXT_SENS_DATA_16 0x59

#define MPU6050_RA_EXT_SENS_DATA_17 0x5A

#define MPU6050_RA_EXT_SENS_DATA_18 0x5B

#define MPU6050_RA_EXT_SENS_DATA_19 0x5C

#define MPU6050_RA_EXT_SENS_DATA_20 0x5D

#define MPU6050_RA_EXT_SENS_DATA_21 0x5E

#define MPU6050_RA_EXT_SENS_DATA_22 0x5F

#define MPU6050_RA_EXT_SENS_DATA_23 0x60

#define MPU6050_RA_MOT_DETECT_STATUS 0x61 #define MPU6050_RA_I2C_SLV0_DO 0x63

#define MPU6050_RA_I2C_SLV1_DO 0x64

#define MPU6050_RA_I2C_SLV2_DO 0x65

#define MPU6050_RA_I2C_SLV3_DO 0x66

#define MPU6050_RA_I2C_MST_DELAY_CTRL 0x67

#define MPU6050_RA_SIGNAL_PATH_RESET 0x68 #define MPU6050_RA_MOT_DETECT_CTRL 0x69 #define MPU6050_RA_USER_CTRL 0x6A

#define MPU6050_RA_PWR_MGMT_1 0x6B #define MPU6050_RA_PWR_MGMT_2 0x6C #define MPU6050_RA_BANK_SEL 0x6D

#define MPU6050_RA_MEM_START_ADDR 0x6E

#define MPU6050_RA_MEM_R_W 0x6F

#define MPU6050_RA_DMP_CFG_1 0x70

#define MPU6050_RA_DMP_CFG_2 0x71

#define MPU6050_RA_FIFO_COUNTH 0x72

#define MPU6050_RA_FIFO_COUNTL 0x73

#define MPU6050_RA_FIFO_R_W 0x74

#define MPU6050_RA_WHO_AM_I 0x75

#define MPU6050_TC_PWR_MODE_BIT 7

#define MPU6050_TC_OFFSET_BIT 6

#define MPU6050_TC_OFFSET_LENGTH 6

#define MPU6050_TC_OTP_BNK_VLD_BIT 0

#define MPU6050_VDDIO_LEVEL_VLOGIC 0

#define MPU6050_VDDIO_LEVEL_VDD 1

#define MPU6050_CFG_EXT_SYNC_SET_BIT 5

#define MPU6050_CFG_EXT_SYNC_SET_LENGTH 3

#define MPU6050_CFG_DLPF_CFG_BIT 2

#define MPU6050_CFG_DLPF_CFG_LENGTH 3

#define MPU6050_EXT_SYNC_DISABLED 0x0 #define MPU6050_EXT_SYNC_TEMP_OUT_L 0x1 #define MPU6050_EXT_SYNC_GYRO_XOUT_L 0x2 #define MPU6050_EXT_SYNC_GYRO_YOUT_L 0x3 #define MPU6050_EXT_SYNC_GYRO_ZOUT_L 0x4 #define MPU6050_EXT_SYNC_ACCEL_XOUT_L 0x5 #define MPU6050_EXT_SYNC_ACCEL_YOUT_L 0x6 #define MPU6050_EXT_SYNC_ACCEL_ZOUT_L 0x7

#define MPU6050_DLPF_BW_256 0x00

#define MPU6050_DLPF_BW_188 0x01

#define MPU6050_DLPF_BW_98 0x02

#define MPU6050_DLPF_BW_42 0x03

#define MPU6050_DLPF_BW_20 0x04

#define MPU6050_DLPF_BW_10 0x05

#define MPU6050_DLPF_BW_5 0x06

#define MPU6050_GCONFIG_FS_SEL_BIT 4

#define MPU6050_GCONFIG_FS_SEL_LENGTH 2

#define MPU6050_GYRO_FS_250 0x00

#define MPU6050_GYRO_FS_500 0x01

#define MPU6050_GYRO_FS_1000 0x02

#define MPU6050_GYRO_FS_2000 0x03

#define MPU6050_ACONFIG_XA_ST_BIT 7 #define MPU6050_ACONFIG_YA_ST_BIT 6 #define MPU6050_ACONFIG_ZA_ST_BIT 5 #define MPU6050_ACONFIG_AFS_SEL_BIT 4 #define MPU6050_ACONFIG_AFS_SEL_LENGTH 2 #define MPU6050_ACONFIG_ACCEL_HPF_BIT 2 #define MPU6050_ACONFIG_ACCEL_HPF_LENGTH 3

#define MPU6050_ACCEL_FS_2 0x00

#define MPU6050_ACCEL_FS_4 0x01

#define MPU6050_ACCEL_FS_8 0x02

#define MPU6050_ACCEL_FS_16 0x03

#define MPU6050_DHPF_RESET 0x00

#define MPU6050_DHPF_5 0x01

#define MPU6050_DHPF_2P5 0x02

#define MPU6050_DHPF_1P25 0x03

#define MPU6050_DHPF_0P63 0x04

#define MPU6050_DHPF_HOLD 0x07

#define MPU6050_TEMP_FIFO_EN_BIT 7

#define MPU6050_XG_FIFO_EN_BIT 6

#define MPU6050_YG_FIFO_EN_BIT 5

#define MPU6050_ZG_FIFO_EN_BIT 4

#define MPU6050_ACCEL_FIFO_EN_BIT 3

#define MPU6050_SLV2_FIFO_EN_BIT 2

#define MPU6050_SLV1_FIFO_EN_BIT 1

#define MPU6050_SLV0_FIFO_EN_BIT 0

#define MPU6050_MULT_MST_EN_BIT 7

#define MPU6050_WAIT_FOR_ES_BIT 6

#define MPU6050_SLV_3_FIFO_EN_BIT 5

#define MPU6050_I2C_MST_P_NSR_BIT 4

#define MPU6050_I2C_MST_CLK_BIT 3

#define MPU6050_I2C_MST_CLK_LENGTH 4

#define MPU6050_CLOCK_DIV_348 0x0

#define MPU6050_CLOCK_DIV_333 0x1

#define MPU6050_CLOCK_DIV_320 0x2

#define MPU6050_CLOCK_DIV_308 0x3

#define MPU6050_CLOCK_DIV_296 0x4

#define MPU6050_CLOCK_DIV_286 0x5

#define MPU6050_CLOCK_DIV_276 0x6

#define MPU6050_CLOCK_DIV_267 0x7

#define MPU6050_CLOCK_DIV_258 0x8

#define MPU6050_CLOCK_DIV_500 0x9

#define MPU6050_CLOCK_DIV_471 0xA

#define MPU6050_CLOCK_DIV_444 0xB

#define MPU6050_CLOCK_DIV_421 0xC

#define MPU6050_CLOCK_DIV_400 0xD

#define MPU6050_CLOCK_DIV_381 0xE

#define MPU6050_CLOCK_DIV_364 0xF

#define MPU6050_I2C_SLV_RW_BIT 7

#define MPU6050_I2C_SLV_ADDR_BIT 6

#define MPU6050_I2C_SLV_ADDR_LENGTH 7

#define MPU6050_I2C_SLV_EN_BIT 7

#define MPU6050_I2C_SLV_BYTE_SW_BIT 6

#define MPU6050_I2C_SLV_REG_DIS_BIT 5

#define MPU6050_I2C_SLV_GRP_BIT 4

#define MPU6050_I2C_SLV_LEN_BIT 3

#define MPU6050_I2C_SLV_LEN_LENGTH 4

#define MPU6050_I2C_SLV4_RW_BIT 7 #define MPU6050_I2C_SLV4_ADDR_BIT 6 #define MPU6050_I2C_SLV4_ADDR_LENGTH 7 #define MPU6050_I2C_SLV4_EN_BIT 7 #define MPU6050_I2C_SLV4_INT_EN_BIT 6 #define MPU6050_I2C_SLV4_REG_DIS_BIT 5

#define MPU6050_I2C_SLV4_MST_DLY_BIT 4 #define MPU6050_I2C_SLV4_MST_DLY_LENGTH 5

#define MPU6050_MST_PASS_THROUGH_BIT 7 #define MPU6050_MST_I2C_SLV4_DONE_BIT 6 #define MPU6050_MST_I2C_LOST_ARB_BIT 5 #define MPU6050_MST_I2C_SLV4_NACK_BIT 4 #define MPU6050_MST_I2C_SLV3_NACK_BIT 3 #define MPU6050_MST_I2C_SLV2_NACK_BIT 2 #define MPU6050_MST_I2C_SLV1_NACK_BIT 1

#define MPU6050_INTCFG_INT_LEVEL_BIT 7 #define MPU6050_INTCFG_INT_OPEN_BIT 6 #define MPU6050_INTCFG_LATCH_INT_EN_BIT 5 #define MPU6050_INTCFG_INT_RD_CLEAR_BIT 4 #define MPU6050_INTCFG_FSYNC_INT_LEVEL_BIT 3 #define MPU6050_INTCFG_FSYNC_INT_EN_BIT 2 #define MPU6050_INTCFG_I2C_BYPASS_EN_BIT 1 #define MPU6050_INTCFG_CLKOUT_EN_BIT 0

#define MPU6050_INTMODE_ACTIVEHIGH 0x00

#define MPU6050_INTMODE_ACTIVELOW 0x01

#define MPU6050_INTDRV_PUSHPULL 0x00

#define MPU6050_INTDRV_OPENDRAIN 0x01

#define MPU6050_INTLATCH_50USPULSE 0x00

#define MPU6050_INTLATCH_WAITCLEAR 0x01

#define MPU6050_INTCLEAR_STATUSREAD 0x00

#define MPU6050_INTCLEAR_ANYREAD 0x01

#define MPU6050_INTERRUPT_FF_BIT 7 #define MPU6050_INTERRUPT_MOT_BIT 6 #define MPU6050_INTERRUPT_ZMOT_BIT 5 #define MPU6050_INTERRUPT_FIFO_OFLOW_BIT 4 #define MPU6050_INTERRUPT_I2C_MST_INT_BIT 3 #define MPU6050_INTERRUPT_PLL_RDY_INT_BIT 2 #define MPU6050_INTERRUPT_DMP_INT_BIT 1 #define MPU6050_INTERRUPT_DATA_RDY_BIT 0

// TODO: figure out what these actually do

// UMPL source code is not very obivous

#define MPU6050_DMPINT_5_BIT 5

#define MPU6050_DMPINT_4_BIT 4

#define MPU6050_DMPINT_3_BIT 3

#define MPU6050_DMPINT_2_BIT 2

#define MPU6050_DMPINT_1_BIT 1

#define MPU6050_DMPINT_0_BIT 0

#define MPU6050_MOTION_MOT_XNEG_BIT 7

#define MPU6050_MOTION_MOT_XPOS_BIT 6

#define MPU6050_MOTION_MOT_YNEG_BIT 5

#define MPU6050_MOTION_MOT_ZNEG_BIT 3

#define MPU6050_MOTION_MOT_ZPOS_BIT 2

#define MPU6050_MOTION_MOT_ZRMOT_BIT 0

#define MPU6050_DELAYCTRL_DELAY_ES_SHADOW_BIT 7 #define MPU6050_DELAYCTRL_I2C_SLV4_DLY_EN_BIT 4

#define MPU6050_DELAYCTRL_I2C_SLV3_DLY_EN_BIT 3

#define MPU6050_DELAYCTRL_I2C_SLV2_DLY_EN_BIT 2

#define MPU6050_DELAYCTRL_I2C_SLV1_DLY_EN_BIT 1

#define MPU6050_DELAYCTRL_I2C_SLV0_DLY_EN_BIT 0

#define MPU6050_PATHRESET_GYRO_RESET_BIT 2

#define MPU6050_PATHRESET_ACCEL_RESET_BIT 1

#define MPU6050_PATHRESET_TEMP_RESET_BIT 0

#define MPU6050_DETECT_ACCEL_ON_DELAY_BIT 5 #define MPU6050_DETECT_ACCEL_ON_DELAY_LENGTH 2 #define MPU6050_DETECT_FF_COUNT_BIT 3 #define MPU6050_DETECT_FF_COUNT_LENGTH 2 #define MPU6050_DETECT_MOT_COUNT_BIT 1 #define MPU6050_DETECT_MOT_COUNT_LENGTH 2

#define MPU6050_DETECT_DECREMENT_RESET 0x0

#define MPU6050_DETECT_DECREMENT_1 0x1

#define MPU6050_DETECT_DECREMENT_2 0x2

#define MPU6050_DETECT_DECREMENT_4 0x3

#define MPU6050_USERCTRL_DMP_EN_BIT 7 #define MPU6050_USERCTRL_FIFO_EN_BIT 6

#define MPU6050_USERCTRL_I2C_MST_EN_BIT 5 #define MPU6050_USERCTRL_I2C_IF_DIS_BIT 4

#define MPU6050_USERCTRL_DMP_RESET_BIT 3 #define MPU6050_USERCTRL_FIFO_RESET_BIT 2

#define MPU6050_USERCTRL_I2C_MST_RESET_BIT 1

#define MPU6050_USERCTRL_SIG_COND_RESET_BIT 0

#define MPU6050_PWR1_DEVICE_RESET_BIT 7

#define MPU6050_PWR1_SLEEP_BIT 6

#define MPU6050_PWR1_CYCLE_BIT 5

#define MPU6050_PWR1_TEMP_DIS_BIT 3

#define MPU6050_PWR1_CLKSEL_BIT 2

#define MPU6050_PWR1_CLKSEL_LENGTH 3

#define MPU6050_CLOCK_PLL_XGYRO 0x01

#define MPU6050_CLOCK_PLL_YGYRO 0x02

#define MPU6050_CLOCK_PLL_ZGYRO 0x03

#define MPU6050_CLOCK_PLL_EXT32K 0x04

#define MPU6050_CLOCK_PLL_EXT19M 0x05

#define MPU6050_CLOCK_KEEP_RESET 0x07

#define MPU6050_PWR2_LP_WAKE_CTRL_BIT 7

#define MPU6050_PWR2_LP_WAKE_CTRL_LENGTH 2

#define MPU6050_PWR2_STBY_XA_BIT 5

#define MPU6050_PWR2_STBY_YA_BIT 4

#define MPU6050_PWR2_STBY_ZA_BIT 3

#define MPU6050_PWR2_STBY_XG_BIT 2

#define MPU6050_PWR2_STBY_YG_BIT 1

#define MPU6050_PWR2_STBY_ZG_BIT 0

#define MPU6050_WAKE_FREQ_1P25 0x0

#define MPU6050_WAKE_FREQ_2P5 0x1

#define MPU6050_WAKE_FREQ_5 0x2

#define MPU6050_WAKE_FREQ_10 0x3

#define MPU6050_BANKSEL_PRFTCH_EN_BIT 6

#define MPU6050_BANKSEL_CFG_USER_BANK_BIT 5

#define MPU6050_BANKSEL_MEM_SEL_BIT 4

#define MPU6050_BANKSEL_MEM_SEL_LENGTH 5

#define MPU6050_WHO_AM_I_BIT 6

#define MPU6050_WHO_AM_I_LENGTH 6

/********************HMC5883********************************************/

#define HMC5883_Address 0x1e //0x1e<<1==0x3C //定义器件在IIC总线的地址

#define HMC5883_Register_A 0x00

#define HMC5883_Register_B 0x01

#define HMC5883_ModeReg 0x02

#define HMC5883_XOUT_H 0x03

#define HMC5883_XOUT_L 0x04

#define HMC5883_ZOUT_H 0x05

#define HMC5883_ZOUT_L 0x06

#define HMC5883_YOUT_H 0x07

#define HMC5883_YOUT_L 0x08

#define HMC5883_StatusReg 0x09 #define HMC5883_IdentificationReg_A 0x0A

#define HMC5883_IdentificationReg_B 0x0B

#define HMC5883_IdentificationReg_C 0x0C

extern float HMC5883_Angle_F;

extern u16 HMC5883_Angle_D;

extern u8 hmc5883_buffer[6];

extern int16_t ax,ay,az;

void MPU6050_INIT(void);

void MPU6050_READ(void);

void MPU6050_Dataanl(void);

void HMC5883_INIT(void);

void HMC5883_READ(void);

void GetAngle(void);

#endif

LabVIEW程序实例

1、Build a VI that generate a random number between zero and ten,and then divides it by an input number and diaplays the result on the front panel.If the input number is zero,the VI lights an LED to flag a “divide by zero”error 2、3-1,P43 3、Try create a VI to compute n! 4、求500个随机数中的最大值和最小值。 5、3-3,P44 6、3-4,P46 7、3-5,P49 If implement this equation using regular G arithmetic functions,the block diagram looks like the one in the following illustration.Please imolement the same equation using a Formula Node,and add event to control when the VI executes.

8、设计一个简单信号源,能选择正弦波、三角波和方波并用Waveform Graphe显示。 9、4-1,P68 10、4-5,P72 11、(1)显示一个二维数组的行数和列数(2)查找一个二维数组中最大值,以及最大值在数组中的位置。

12、5-2,P89 13、6-1,P100 14、6-3,P103 15、7-4,P120 16、7-5,P121 17、双边傅里叶

《虚拟仪器设计实验》实验二

实验二、程序结构的使用 一、实验目的 掌握条件结构、循环结构、移位寄存器、顺序结构的使用; 二、实验内容 设计使用循环结构、条件结构、顺序结构控制程序运行的虚拟仪器。具体内容如下:1.求一个数的平方根,当该数大于等于0时,输出开方结果;当该数小于0时,用弹出式对话框报告错误,同时输出错误代码-99999。 2.产生100个随机数并求其最小值和平均值。 3.用随机数(0-1)连续产生0~1的随机数,计算这些随机数平均值达到所用时间。 三、实验步骤 1.求一个数的平方根 启动LabVIEW,打开一个空白的VI。 在前面板窗口适当位置放置一个数值型控制件和一个数值型显示件,并把它们的标签分别修改为“x”和“sqrt(x)”。用编辑文本工具在适当位置,用适当的字体、字号填写实验名称、班级和姓名,图所示前面板供参考。 在框图程序窗口中,从函数模板上找到“大于等于”、“单按钮对话框”,“平方根”和“条件结构”并放置到适当位置,设计框图程序如图所示。 用“姓名实验2-1”为文件名保存你所做工作,如:李红实验。输入x值,运行程序并记录程序运行结果。 图虚拟仪器1的前面板

图虚拟仪器1的框图程序 2.产生100个随机数并求其最小值和平均值 启动LabVIEW,打开一个空白的VI。 在前面板窗口适当位置放置两个数值型显示件,并把它们的标签分别修改为平均值和最小值。用自由“编辑文本”工具在适当位置,用适当的字体、字号填写实验名称、班级和姓名,图所示前面板供参考。 在框图程序窗口中从函数模板上找到“For 循环”并放置到适当位置,为记数端口连接一个32位整型数100;创建两个移位寄存器分别用来从一次循环向下一次循环传递当前最小值和当前随机数累加值;初始化移位寄存器即为移位寄存器左侧端口赋值,设置当前最小值移位寄存器初值为1,当前随机数累加值移位寄存器初值为0,所对应的程序框图如图所示。创建移位寄存器的方法是在循环的左边框或右边框上弹出快捷菜单,然后选择“添加移位寄存器”。 在框图程序窗口中从函数模板上找到“最大值与最小值”、“除”、“加”、“随机数(0~1)函数”,设计框图程序如图所示。

常用焊缝检测方法

常用焊缝检测方法 常用焊缝检测方法 常用焊缝无损检测方法: 1.射线探伤方法(RT) 目前应用较广泛的射线探伤方法是利用(X、γ)射线源发出的贯穿辐射线穿透焊缝后使胶片感光,焊缝中的缺陷影像便显示在经过处理后的射线照相底片上。主要用于发现焊缝内部气孔、夹渣、裂纹及未焊透等缺陷。焊缝检测方法 2.超声探伤(UT) 利用压电换能器件,通过瞬间电激发产生脉冲振动,借助于声耦合介质传人金属中形成超声波,超声波在传播时遇到缺陷就会反射并返回到换能器,再把声脉冲转换成电脉冲,测量该信号的幅度及传播时间就可评定工件中缺陷的位置及严重程度。超声波比射线探伤灵敏度高,灵活方便,周期短、成本低、效率高、对人体无害,但显示缺陷不直观,对缺陷判断不精确,受探伤人员经验和技术熟练程度影响较大。例如:HF300,HF800焊缝检测仪等 3.渗透探伤(PT) 当含有颜料或荧光粉剂的渗透液喷洒或涂敷在被检焊缝表面上时,利用液体的毛细作用,使其渗入表面开口的缺陷中,然后清洗去除表面上多余的渗透液,干燥后施加显像剂,将缺陷中的渗透液吸附到焊缝表面上来,从而观察到缺陷的显示痕迹。液体渗透探伤主要用于:检查坡口表面、碳弧气刨清根后或焊缝缺陷清除后的刨槽表面、工卡具铲除的表面以及不便磁粉探伤部位的表面开口缺陷。焊缝检测方法

4.磁性探伤(MT) 利用铁磁性材料表面与近表面缺陷会引起磁率发生变化,磁化时在表面上产生漏磁场,并采用磁粉、磁带或其他磁场测量方法来记录与显示缺陷的一种方法。磁性探伤主要用于:检查表面及近表面缺陷。该方法与渗透探伤方法比较,不但探伤灵敏度高、速度快,而且能探查表面一定深度下缺陷。例如:DA310磁粉探伤等焊缝检测方法 其他检测方法包括:大型工件金相分析;铁素体含量检验;光谱分析;手提硬度试验;声发射试验等。

实验报告范例(虚拟仪器)

西华大学实验报告 实验课程名称:虚拟仪器 开课学院及实验室:机械工程与自动化学院 2005年 4 月16 日 1 实验目的 (1)学习用声卡作为数据采集装置的LabVIEW 编程方法; (2)从设计中深入理解虚拟仪器的组成,理解数据采集、数据分析的重要性,用LabVIEW 实现测试系统的优点; (3)实验的应用:目前的测试教学实验中常常要用到A/D 采集卡,而A/D 采集卡价格不菲,以实验室有限的经费,不能较多地购置以供同学们实验使用。进而考虑计算机中的声卡本身就是一个A/D 、D/A 的转化装置,而且造价低廉,性能稳定,在教学实验中完全可以满足实验的需求,可以进一步开发研制了一个广泛应用的测试教学实验系统。 2 实验设备、仪器 计算机、声卡、LabVIEW 软件 3 设计一个基于声卡的频谱分析仪,数据 4 实验原理 4.1声卡的基本常识 声卡是现在计算机中非常常见的一个组件,是多媒体的标准配置。 目前市场上的一般声卡按照其位数可以分成8位和16位: 8位:8位声卡把音频信号的大小(音量)分成256个等级(0~255)。 16位:16位声卡把音频信号的大小分成为65536个等级(0~65535)。 在LabVIEW 软件中,对于声卡的声道可以分为mono 8-bit (单声道8位)、mono 16-bit (单声道

16位)、stereo 8-bit(立体声8位)、stereo 16-bit(立体声16位)。其中,16位声道比8位声道采样的信号质量好,立体声(stereo)比单声道(mono)采样信号好,采样的波形稳定,而且干扰小。另外,用单声道采样,左右声道信号都相同,而且每个声道的幅值只有原来幅值的1/2;用立体声采样,左右声道信号互不干扰,可以采两路不同的信号,而且采样的信号幅值与原幅值相同。 声卡的采样频率(rate)有4种选择,即8000Hz、11025 Hz、22050 Hz、44100 Hz,采样频率不同,采到波形的质量也不同,应该根据具体情况而采用合适的频率。 4.2 LabVIEW中有关声卡的函数简介 LabVIEW中提供了一系列使用Windows底层函数编写的与声卡有关的函数。这些函数集中在下图所示的Sound VI下。 图 Sound VI Sound Input函数简介

软件测试的定义及常用软件测试方法介绍

软件测试的定义及常用软件测试方法介绍 一、软件测试的定义 1.定义:使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满 足规定的需求或弄清预期结果与实际结果之间的差别。 2.内容:软件测试主要工作内容是验证(verification)和确认(validation ),下面分别给 出其概念: 验证(verification)是保证软件正确地实现了一些特定功能的一系列活动,即保证软件以正确的方式来做了这个事件(Do it right) 1.确定软件生存周期中的一个给定阶段的产品是否达到前阶段确立的需求的过程 2.程序正确性的形式证明,即采用形式理论证明程序符合设计规约规定的过程 3.评市、审查、测试、检查、审计等各类活动,或对某些项处理、服务或文件等是否 和规定的需求相一致进行判断和提出报告。 确认(validation)是一系列的活动和过程,目的是想证实在一个给定的外部环境中软件的逻辑正确性。即保证软件做了你所期望的事情。(Do the right thing) 1.静态确认,不在计算机上实际执行程序,通过人工或程序分析来证明软件的正确性 2.动态确认,通过执行程序做分析,测试程序的动态行为,以证实软件是否存在问题。 软件测试的对象不仅仅是程序测试,软件测试应该包括整个软件开发期间各个阶段所产生的文档,如需求规格说明、概要设计文档、详细设计文档,当然软件测试的主要对象还是源程序。 二、软件测试常用方法 1. 从是否关心软件内部结构和具体实现的角度划分: a. 黑盒测试 黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。 黑盒测试是以用户的角度,从输入数据和输出数据的对应关系出发进行测试的,很明显,如果本身设计有问题或者说明规格有错误,用黑盒测试是发现不了的。

LabVIEW程序设计步骤

LabVIEW 程序设计步骤 下面通过一个设计实例来详细介绍虚拟仪器软件LabVIEW 的程序设计步骤。 设计目标:假设有一台仪器,需要调整其输入电压,当调整电压超过某一设定电压值时,需通过指示灯颜色变化发出警告。 1 建立新VI 启动LabVIEW 程序,单击VI 按钮,建立一个新VI 程序。 这时将同时打开LabVIEW 的前面板和后面板(框图程序面板)。在前面板中显示控件选板,在后面板中显示函数选板。在两个面板中都显示工具选板。 如果选板没有被显示出来,可以通过菜单查看(View )/工具选板(Tools Palette )来显示工具选板,通过查看(View )/控件选板(Controls Palette )显示控件选板,通过查看(View )/函数选板(Functions Palette )显示函数选板。 也可以在前面板的空白处,单击鼠标右键,以弹出控件选板。 2 前面板设计 输入控制和输出显示可以从控件选板的各个子选板中选取。 本例中,程序前面板中应有1个调压旋钮,1个仪表,1个指示灯,1个关闭按钮共4个控件。 1)往前面板添加1个旋钮控件:控件(Controls )→ 新式(Modern ) → 数值(Numeric ) → 旋钮(Knob ),如图2-14所示,标签改为“调压旋钮”; 2)往前面板添加1个仪表控件:控件(Controls )→ 新式(Modern ) → 数值(Numeric ) → 仪表(Meter ),如图2-14所示,标签改为“电压表”。 3)往前面板添加1个指示灯控件:控件(Controls )→ 新式(Modern )→ 布尔(Boolean ) → 圆形指示灯(Round LED ),如图2-15所示,将标签改为“上限灯”。 4)往前面板添加1个停止按钮控件:控件(Controls )→ 新式(Modern )→ 布尔 图2-15 添加指示灯、按钮控件 图2-14 添加旋钮、仪表控件

基于研华数据采集卡的labview程序设计.doc

第10章基于研华数据采集卡的 L a b V I E W程序设计 本章利用研华公司的PCI-1710HG数据采集卡编写LabVIEW程序,包括:模拟量输入、模拟量输出、开关量输入以及开关量输出等。 10.1 模拟量输入(AI) 10.1.1 基于研华数据采集卡的LabVIEW程序硬件线路 在图10-1中,通过电位器产生一个模拟变化电压(范围是0V~5V),送入板卡模拟量输入0通道(管脚68),同时在电位器电压输出端接一信号指示灯,用来显示电压变化情况。 图10-1 计算机模拟电压输入线路 本设计用到的硬件为:PCI-1710HG数据采集卡、PCL-10168数据线缆、ADAM-3968接线端子(使用模拟量输入AI0通道)、电位器(10K)、指示灯(DC5V)、直流电源(输出:DC5V)等。 10.1.2 基于研华数据采集卡的LabVIEW程序设计任务 利用LabVIEW编写应用程序实现PCI-1710HG数据采集卡模拟量输入。 任务要求: (1)以连续方式读取电压测量值,并以数值或曲线形式显示电压测量变化值;

第10章基于研华数据采集卡的LabVIEW程序设计(2)当测量电压小于或大于设定下限或上限值时,程序画面中相应指示灯变换颜色。 –209 –

LabVIEW 虚拟仪器数据采集与串口通信测控应用实战 – 210 – 10.1.3 基于研华数据采集卡的LabVIEW 程序任务实现 1.建立新VI 程序 启动NI LabVIEW 程序,选择新建(New )选项中的VI 项,建立一个新VI 程序。 在进行LabVIEW 编程之前,必须首先安装研华设备管理程序Device Manager 、32bit DLL 驱动程序以及研华板卡LabVIEW 驱动程序。 2.设计程序前面板 在前面板设计区空白处单击鼠标右键,显示控件选板(Controls )。 (1)添加一个实时图形显示控件:控件(Controls )→新式(Modern )→图形(Graph ) →波形图形(Waveform Chart ),标签改为“实时电压曲线”,将Y 轴标尺范围改为0.0-5.0。 (2)添加一个数字显示控件:控件(Controls )→新式(Modern )→数值(Numeric )→ 数值显示控件(Numeric Indicator ),标签改为“当前电压值:”。 (3)添加两个指示灯控件:控件(Controls )→新式(Modern )→布尔(Boolean )→圆形指示灯(Round LED ),将标签分别改为“上限指示灯:”、“下限指示灯:”。 (4)添加一个停止按钮控件:控件(Controls )→新式(Modern )→布尔(Boolean )→停止按钮(Stop Button )。 设计的程序前面板如图10-2所示。 图10-2 程序前面板 3.框图程序设计——添加函数 进入框图程序设计界面,在设计区空白 处单击鼠标右键,显示函数选板(Functions )。 在函数选板(Functions )下添加需要的函数。 (1)添加选择设备函数:用户库→ Advantech DA&C (研华公司的LabVIEW 函数库)→ EASYIO → SelectPOP → SelectDevicePop.vi ,如 图10-3 SelectPop 函数库

用labview设计一个计算器(虚拟仪器)解读

科目: 姓名:学号: 院系:类别:(学术、专业)

实验一Labview 计算器 一、实验目的 通过利用labview设计一个简易计算器熟练的掌握labview基本功能和基本操作方法。 二、实验要求 利用设计的计算器可以进行简单的四则运算、可以进行平方、开根号和倒数运算、计算器可以进行清零和关闭计算器操作、在输入数据时不慎将某个数字输错可以运用BackSpace清除该值等一些基本简单的运算。 三、实验原理和框图 1、前面板设计 前面板是LabVIEW的图形用户界面,在LabVIEW环境中可以对这些对象的外观和属性进行设计,LabVIEW提供了非常丰富的界面对象,可以方便地设计出生动、直观、操作方便的用户界面。本系统中前面板显示程序的输入和输出对象,即,控件和显示器。本程序中控件主要是按钮,显示器主要是文本显示。 在前面板设计过程中先在前面板整齐排列放置22个确定按钮,将这22按钮的标签隐藏,然后修改这22个确定按钮的名字分别为:0~9十个数字、小数点、正负号、加、减、乘、除、等号、倒数、根号、清零、退格和X的Y次方。 前面板还包括一个文本显示控件用于显示计算的结果和计算器的某些提示,通过改变显示控件的大小使之于计算器的大小相适应。计算器的前面板还有程序框图中while循环的停止按钮,当按钮按下时计算器停止工作退出到LabVIEW的编辑界面。 为了前面板的美观和防止按钮的移动,分别将前面板的各个按钮和文字进行组合和对前面板进行装饰,装饰采用修饰中的平面框。如下图所示:

2.后面板设计 程序框图对象包括接线端和节点,将各个对象连线连接便创建了程序框图,接线端的颜色和符号表明了相应输入控件或显示控件的数据类型。程序框图是程序的核心,程序要实现的功能都是通过程序框图反应出来的。本课程设计的程序框图主要运用了while循环、时间结构、条件结构和平铺顺序等结构。

常见的塑料检测标准和方法

常见的塑料检测标准和方法 检测产品/类别检测项目/参数 检测标准(方法)名称及编号(含年号)序 号 名称 塑料1 光源暴露试验方 法通则 塑料实验室光源暴露试验方法第1部分:通则ISO 4892-1:1999 2 氙弧灯光老化 汽车外饰材料的氙弧灯加速暴露试验SAE J2527:2004 汽车内饰材料的氙弧灯加速暴露试验SAE J2412:2004 塑料实验室光源暴露试验方法第2部分:氙弧灯ISO 4892-2:2006 /Amd 1:2009 室内用塑料氙弧光暴露试验方法ASTM D4459-06 非金属材料氙弧灯老化的仪器操作方法ASTM G155-05a 塑料暴露试验用有水或无水氙弧型曝光装置的操作ASTM D2565-99(2008) 3 荧光紫外灯老化 塑料实验室光源暴露试验方法第3部分:荧光紫外灯ISO 4892-3:2006 汽车外饰材料UV快速老化测试SAE J2020:2003 塑料紫外光暴露试验方法ASTM D4329-05 非金属材料UV老化的仪器操作方法ASTM G154-06 4 碳弧灯老化 塑料实验室光源暴露试验方法第4部分:开放式碳弧灯 ISO 4892-4:2004/ CORR 1:2005 塑料实验室光源曝露试验方法第4部分:开放式碳弧灯 GB/T16422.4-1996 5 荧光紫外灯老化 机械工业产品用塑料、涂料、橡胶材料人工气候老化试验方法荧 光紫外灯GB/T14522-2008 6 热老化 无负荷塑料制品的热老化 ASTM D3045-92(2010) 塑料热老化试验方法GB/T7141-2008 7 湿热老化 塑料暴露于湿热、水溅和盐雾效应的测定ISO4611:2008 塑料暴露于湿热、水喷雾和盐雾中影响的测定GB/T12000-2003 塑料8 拉伸性能塑料拉伸性能的测定第1部分:总则GB/T1040.1-2006

《虚拟仪器设计》课程设计

成绩:《虚拟仪器设计》课程设计 题目:基于LabVIEW的音乐播放器设计 学院精密仪器与光电子工程学院 专业生物医学工程 年级2013级 班级一班 姓名凌伟 学号3013202225 2015年12月26日

目录 1设计目的 (3) 2实施方案 (3) 2.1总体规划 (3) 2.2软件结构设计 (4) 3实验结果 (9) 4总结 (13)

1设计目的 本课题的想法来源于大二第一学期的一门课,叫“面向对象程序设计”,主要内容是应用C++语言编写程序,那时候的期末课程设计我就做的音乐播放器,虽然花费了很多时间,但是最后自己的播放器能运行也是很满足的。于是这次的LabVIEW课程设计打算尝试用另一种编程方式做一个音乐播放器。 本音乐播放器能实现的一些基本功能:打开本地音乐文件、播放音乐、暂停、停止、进度条显示并拖动、音量控制、快进快退、显示当前播放曲目、显示音乐文件路径以及“爱心”流水灯、实时显示当前系统时间等。 另外还有一些功能没能实现,例如将多首歌曲添加到播放列表中,实现上一首、下一首切换;播放音乐时显示歌词;自动切换墙纸等,原因一方面是临近期末时间不够,另一方面是编程能力有限,而且对LabVIEW还比较陌生,不能自如地运用,希望以后有机会能加以改善。 2实施方案 2.1总体规划 该音乐播放器的功能都可以通过软件程序来实现,所以不需要设计硬件结构,只需要一台自带Windows Media Player和LabVIEW应用程序的PC机。在编程时先实现最基本的功能,如打开文件,调用Windows Media Player播放,并将路径和播放曲目显示在前面板上,之后再逐步添加控件实现暂停,停止,音量控制等功能,而流水灯,系统时间和用户指南按钮是在修饰前面板时临时想到的,于是最后就再加入了这些小功能。 主程序流程大致为:点击打开文件按钮→弹出文件对话框→选择音乐文件→显示文件路径和播放曲目→调用Windows Media Player播放歌曲,同时流水灯开始工作→暂停、播放、音量控制等→停止播放,同时流水灯停止工作,文件路径

橡胶制品常用测试方法及标准

1.胶料硫化特性 GB/T 9869—1997橡胶胶料硫化特性的测定(圆盘振荡硫化仪法) GB/T 16584—1996橡胶用无转子硫化仪测定硫化特性 ISO 3417:1991橡胶—硫化特性的测定——用摆振式圆盘硫化计 ASTM D2084-2001用振动圆盘硫化计测定橡胶硫化特性的试验方法 2 3. GB/T528—1998硫化橡胶或热塑性橡胶拉伸应力应变性能的测定 ISO37:2005硫化或热塑性橡胶——拉伸应力应变特性的测定 ASTMD412-1998(2002)硫化橡胶、热塑性弹性材料拉伸强度试验方法JIS K6251:1993硫化橡胶的拉伸试验方法

DIN 53504-1994硫化橡胶的拉伸试验方法 4.橡胶撕裂性能 GB/T 529—1999硫化橡胶或热塑性橡胶撕裂强度的测定(裤形、直角形和新月形试样)ISO 34-1:2004硫化或热塑性橡胶—撕裂强度的测定-第一部分:裤形、直角形和新月形试片 5. (10— 6.压缩永久变形性能 GB/T 7759—1996硫化橡胶、热塑性橡胶在常温、高温和低温下压缩永久变形测定 ISO 815:1991硫化橡胶、热塑性橡胶在常温、高温和低温下压缩永久变形测定

ASTM D395-2003橡胶性能的试验方法压缩永久变形 JIS K6262:1997硫化橡胶及热塑性橡胶压缩永久变形试验方法 7.橡胶的回弹性 GB/T 1681—1991硫化橡胶回弹性的测定 8. ASTM D 746-2004用冲击法测定塑料及弹性材料的脆化温度的试验方法ASTM D 2137-2005弹性材料脆化温度的试验方法 JIS K 6261-1997硫化橡胶及热塑性橡胶的低温试验方法 9.橡胶热空气老化性能

虚拟仪器设计

虚拟仪器设计 一:填空题(30分,30个空): 1.虚拟仪器的分类:按照构成虚拟仪器的接口总线不同,分为PCI总线接口虚拟仪器、串行总线虚拟仪器、并行接口虚拟仪器、USB总线接口虚拟仪器、GPIB 总线接口虚拟仪器、VXI总线接口虚拟仪器、PXI总线接口虚拟仪器和LXI总线接口虚拟仪器等。 2.虚拟仪器设计步骤和过程:①确定虚拟仪器的类型②选择合适的虚拟仪器软件开发平台③开发虚拟仪器应用软件④系统调试⑤编写系统开发文档 3.数据采集系统通常由传感器、信号调理设备、数据采集设备、计算机等组成。 4.A╱D转换器的主要参数:①分辨率②量化误差③精度④转换时间 5.模拟输入通道的组成:多路开关、放大器、采样╱保持电路以及A╱D转换器 6.多通道的采样方式:循环采样、同步采样和间隔采样。 7.总线的性能指标:①总线宽度②寻址能力③总线频率④数据传输速率⑤总线的定时协议⑥热插拔⑦即插即用⑧负载能力 8.GPIB总线的每个设备按三种基本工作方式进行:“听者”功能、“讲者”功能、“控者”功能 https://www.doczj.com/doc/a317830706.html,B特点:①支持多设备连接,减少了PC的I╱O接口数量②能够采用总线供电③第一次真正实现了即插即用,外部设备的安装变得十分简单④对一般外部设备有足够的带宽和连接距离⑤传输方式灵活,可以适应不同设备的需要 10.OSI体系结构:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 11.TCP\IP体系结构:应用层、传输层、网络互连层、网络接口层。 12.网络化虚拟仪器系统的组网模式:客户机╱服务器(C╱S)、浏览器╱服务器(B╱S)、客户机╱服务器╱浏览器(C╱B╱S)。 13.程序结构:①for循环组成:循环框架、重复端口、计数端口等 ②while循环组成:循环框架、重复端口及条件端口 ③选择结构:选择框架、选择端口、框图标识符及“递增╱递减”按钮 ④顺序结构:单框架顺序结构和多框架顺序结构。最基本的由顺序框架、框图标识符、“递增╱递减”按钮组成 ⑤事件结构⑥公式节点 14, 数组,簇,字符串,波形 二、名词概念解释(30分,10个,一个三分): 1.虚拟仪器:多种形式输是利用计算机显示器模拟传统仪器控制面板,以出检测结果,利用计算机软件实现信号数据的运算、分析和处理,利用I╱O接口设备完成信号的采集、测量与调理,从而完成各种测试功能的一种计算机仪器系统。2.数据采集:指将温度、压力、流量、位移等模拟量采集转换成为数字量后,由计算机进行存储、处理、显示或打印的过程,相应的系统成为数据采集系统。3.采样:通过对连续的模拟信号按一定的时间间隔,抽取相应的瞬时值,这个过程称为采样。 4.量化:把采样信号的幅值与某个最小数量单位的一系列整倍数比较,以最接近于采样信号幅值的最小数量单位倍数来代替该幅值。 5.编码:把量化信号的电平用数字代码来表示,编码有多种形式,最常见的是

LabVIEW虚拟仪器程序设计从入门到精通

人民邮电出版社 1局部变量:1.层叠式顺序结构中,对于不同帧之间传递数据利用数据局部变量;2当一个控件既作为输入控件,又作为输出控件的时候利用局部变量;3在不同循环体之间的数据传递。 2全局变量:在不同的VI之间传递数据,但是对于内存资源的占用很大; 3共享变量:在不同的计算机或者网络之间共享。 4顺序结构强制破坏了LabView从左到右的数据流编程习惯,在平铺式结构中可以做到从右到左。顺序结构破坏了LabView的优点之一:并行运行机制,因此一般不太提倡。 5那么程序中需要利用顺序执行程序的时候我们一般认为控制数据依存关系,此时,是通过数据的到达而不是数据的值来触发新结构对象的执行,数据的接收对象不一定需要该数据的值。 事件结构 事件结构是一个非常强大的功能,为事件驱动,可用于编写等待事件发生的高效代码,代替循环检测事件是否发生的低效代码。对比条件结构和事件结构,在条件结构中,系统采用轮询的方式来检测“单击”按钮是否发生,但是在事件结构的技术过程中,只有单击按钮被按下以后触发,才执行一次循环。 因此,事件结构在执行前面板UI接口事件具有很强大的优越性。 事件结构的建议: ●避免在循环外使用事件结构; ●在“值”改变事件分支中读取触发布尔控件的接线端; ●条件结构用于处理触发布尔操作的撤销操作; ●不要使用不同的事件数据将一个分支配置为处理多个过滤事件; ●避免一个事件分支中同时使用对话框和“鼠标按下?”过滤事件; ●避免在一个循环中放置两个事件结构。 利用公式节点可以有效简化数值中的公式的繁琐结构。 禁用结构一般用于系统调试,避免程序在编辑中不停的删除、复制和修改中产生不必要的错误。

虚拟仪器设计 计算器设计步骤及方法

标准计算器的设计 一、设计思想: .创建3个字符串显示控件num1,num2,num3,其中: 1、第一个输入数据存储在num1中 2、第二个输入数据存入num2中 3、将其赋给num3,并使num2为空,以便输入的数据存入num2 4、所有的运算是在num1和num3间进行 5、运算结果都赋给result,同时赋给num1,用于下一次的运算 .创建4个布尔开关按钮change,change1,change2,change3,其中: 1、Change的真假用来判断是第一个数据还是第二个数据 2、change1的功能是在输入=,运算完后,不需要初始化即可进行下一次运算 3、change2用来去掉数据小数末尾的0 4、change3用来保证backspace键仅对输入的数据有效,对运算结果无效 .创建2个数值显示控件type1,type2,并分别在其后面板的属性——数据类型——表示法中选择U8其中: 1、type1用来存储运算符号 2、type2用来保证连续“+、-、*、/”的正确性 3、所有的运算结果都赋给result 4、result经过去零处理后得到result1,将数据显示在前面板上。 二、实现过程 1、面板按键的设计及感应 首先,在前面板上建立一个簇 然后在簇中再建立布尔量,复制20个以满足键的需求(0--9十个数字键,一个小数点键,一个等号键,四则运算键,一个开方键,一个倒数键,一个反号键,一个清零键及一个退出键并注意按键的顺序)。 将按键给值并作适当的美化处理

在后面板中通过将簇中元素按产生的顺序组成一个一维数组,这样就实现了每 个键与数字(0--20)之间的对应。每次按下一个键时,通过查找出对应的键并把结果(对应的数字)连接到一个case结构,然后执行对应case结构中的程序,至此就完成了对

招聘中常用性格测试的几种常用方法

性格测试的几种常用方法 一、德国医生、心理学家—卡雷努思的“四气质说” 1,主要特征 ●“阳刚的多血质”,情绪反映弱而快。 ●“平淡的黏液质”,情绪反映弱而慢。 ●“忧郁的黑胆质”,情绪反映强而慢。 ●“急躁的黄胆质”,情绪反映强而快。 ● 2,性格特点及主要表现 ●气质类型:多血质 ●性格特点:轻率、活泼、好事、喜欢与人交往 ●典型表现:面对困难不退缩,不会记恨,容易答应别人的事情,也容易忘记约定的 人。有面对困难的勇气,但看事情不妙也会开溜。能够调整自己的喜怒哀乐,随时保持心理平衡与往前冲的状态,一旦成功或受到别人的赞扬就乐不可支。 ●气质类型:黏液质 ●性格特点:安静、漫不经心、散漫、邋遢,好饮食等。 ●典型表现:反映迟钝、冷淡,但诚实、值得信任。个性平淡、工作缓慢,不容紧张。 有时做事动作迟缓,不修边幅、喜好享乐,多有利己主义倾向。 ●气质类型:黑胆质 ●性格特点:稳重沉郁,经常能看到人生的阴暗面。 ●典型表现:多半都会避免应来送往的活动,不喜欢与外向活泼的人在一起,甚至看 到别人欢天喜地、乐不可支时,反而会不高兴。一遇困难常失去心理平衡,心情不好久久不能恢复。 ●气质类型:黄胆质 ●性格特点:对于情绪刺激非常敏感,意志容易动摇,没有耐心,情绪忽冷忽热。 ●典型表现:喜欢参加各种活动,想法常常改变,只有三分钟热情。不喜欢被压抑, 喜怒哀乐表现明显。悲伤和愤怒都来得快去得快。一般而言,既有爱心也有热心,做事情很有爆发力。 二、荣格的两种性格倾向理论 1内向型性格的特点: ●重视主体性与自我; ●在乎自己的习惯和想法; ●不喜欢人云亦云; ●勤于自我反省; ●犹豫不决,缺乏果断气概; ●适应能力较差; ●认真得近于固执,喜欢较真; ●对环境变化感觉敏感; ●交往过程中倾向于将自己置于被动地位; ●不容易结交新朋友;

(完整版)虚拟仪器设计实验报告

实验一 实验要求: 一、熟悉LabVIEW环境 二、创建一个VI,发生一个值为0~1的随机数a,放大十倍后与某一常数b比较,若a>b,则指示灯亮。要求: 1、编程实现; 2、单步调试程序; 3、应用探针观察各数据流。 三、创建和调用子VI 1、创建一个字VI,子VI功能;输入3个参数后,求其和,再开方。 2、编一个VI调用子VI。 程序框图:

1、 2、子VI调用: 实验现象:

实验小结: 实验一主要熟悉了软件的使用,用了一些计算以及子VI的调用,为后面的实验打下基础。 实验二 实验要求: 一、在程序的前面板上创建一个数值型控件,为它输入一个数值;把这个数值乘以一个比例系数,再由该控件显示出来。 二、创建一个3行4列的数组,(1)求数组的最大于最小值;(2)求出创建数组的大小;(3)将数组转置;(4)将该2二维数组改为一个一维数组。 三、创建一个簇软件,成员为字符型姓名,数值型学号,布尔型注册。从该控件中提取簇成员注册,并显示在前面板上。 程序框图: 一、 二、

创建数组。三、 创建一个簇。实验现象:一、

二、 三、

实验三 实验要求: 一、产生100个0.0~100.0的随机数,求其最小值,最大值、平均值,并将数据在Graph 中显示。 An=An-1+1/n(An-An-1)An是前n个数据的平均值。 二、产生100个0.0~100.0的随机数序列,求其最小值、最大值、平均值,并将随机数序列和平均值序列显示在Chart波形图中,直到人为停止。 三、程序开始运行后,要求用户输入一个口令,口令正确时,滑键显示一个0~100的随机数,否则程序立即停止。 四、编写一个程序测试自己在前面板输入一下字符串用的时间:A virtual instrument is a program in the graphical programming luanguage. 程序框图: 一、

基于虚拟仪器的CAN卡驱动实现

第4期(总第155期) 2009年8月机械工程与自动化 M ECHA N ICAL EN GI NEER IN G & AU T O M A T IO N N o.4A ug. 文章编号:1672-6413(2009)04-0065-02 基于虚拟仪器的CAN 卡驱动实现 王欣欣,袁丽娟 (华北水利水电学院,河南 郑州 450011) 摘要:为了利用CAN 总线进行数据采集,实现数据实时显示,特选用虚拟仪器软件开发平台L abV IEW 实现CA N 接口卡的驱动,进而设计合理的人机交互界面,进行数据显示、故障分析。关键词:L abV IEW ;CA N 接口卡;CA N 总线;界面设计中图分类号:T P 391.9 文献标识码:A 收稿日期:2008-11-24;修回日期:2009-02-25 作者简介:王欣欣(1980-),女,河南濮阳人,助教,硕士,研究领域为测控技术与仪器。 0 引言 虚拟仪器就是在个人计算机的环境中,利用良好的虚拟仪器软件平台,充分发挥微机的图形处理功能,在屏幕上虚拟出智能仪器的显示面板,用户可通过面板上的各处虚拟的按键、开关、旋钮去使用仪器的各种功能,控制仪器的运行,并从面板上的虚拟显示屏、数码显示器和指示灯了解仪器的状态,从而完成对被测试量的采集、分析、判断、显示、数据存储等[1]。其中数据采集系统的实现,可通过某种传输总线将采集模块连接至计算机。以特定的温度监控系统为例,采集的温度数据通过CAN 总线传送至上位计算机,上位机采用LabV IEW 设计的界面完成数据的显示。本文主要研究利用LabVIEW 驱动CAN 卡的实现。1 LabVIEW 程序结构 LabVIEW 程序称为虚拟仪表(Vir tual Instrum ent)程序,简称VI 。VI 包括3部分:程序前面板、框图程序和图标/连接端口。程序前面板都对应一段使用图形编程语言编写的框图程序,类似于一台仪器的内部电路,可看成源程序代码。2 C AN 接口卡 选用广州周立功单片机有限公司的PCI -51XX 智能CAN 接口卡(类型为PCI-5110),它具有PCI 接口的高性能CAN 总线通讯适配卡,使PC 机方便地连接到CAN 总线上实现CAN 2.0B 协议的数据通讯;采用PCI 接口实现与主机PC 的高速数据交换;该卡集成1个或2个电气独立的CAN 接口通道,每个通道光电隔离,增强系统在恶劣环境下使用的可靠性[2]。PCI -5110接口卡含有SJA 1000独立CAN 控制器,其通讯波特率由寄存器BT R 0(定时器0)和BT R 1(定时器1)决定,范围为5kb /s ~1000kb /s 。 3 C AN 卡驱动程序设计 (1)调用CAN 接口卡库函数,使用LabVIEW 中的调用动态链接库。LabVIEW 提供了4种调用外部程序代码的途径,其中动态链接库机制是LabVIEW 调用标准共享库和用户自定义库函数的通用方法。具体实现时,使用LabVIEW 功能模块中“Advanced ”子模块里的“调用库函数节点(Call Libr ar y Function Node)”,见图1。 图1 L abVI EW 中的调用库函数节点 双击该节点,可在弹出的对话框中(见图2)对此节点进行配置(以复位CA N 为例): 在“Library Name or Path ”选项中,点击“Brow se …”按钮,打开文件对话框,找到PCI 接口卡的库函数,找到Contr olCAN .dll 文件,或直接输入此节点所要链接的 DLL 路径名; 在“Function Name ” 下拉列表框中找到VCI _ResetCAN ,或直接输入函数名; 在“Call Conventions ”下拉列表框中选择“C ” ,表明所调用的库为使用C 语言自己创建的库,若调用的函数为Window s 标准共享库函数,则选择stdcall(W INAPI)选项;!在“Bro w se …”按钮下方的下拉表框中选择“Run in U I T hread ”,表明该调用过程运行在用户接口线程中;?完成函数输入输出参数和类型的配置(见表1),单击Add Par am eter A fter 按钮,定义函数的第一个参数,按照库函数要求完成Par am eter 框、Ty pe 框、Data T ype 框等,依次设置其他参数,设置

谈软件测试常用方法和测试流程.

摘要:软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码的最终复审,是软件开发过程的重要组成部分,是软件质量保证的关键步骤。软件测试的方法可分为人工测试和机器测试,人工测试包括个人复查、走查和会审,机器测试可分为白盒测试和黑盒测试。软件测试虽然是一个独立的阶段, 但在实际工作中,测试的流程主要包含单元测试、组装测试、确认测试、系统测试四个阶段。 关键词:软件测试;白盒;黑盒;单元测试;组装测试;确认测试;系统测试 一、软件测试的常用方法 软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码的最终复审,是软件开发过程的重要组成部分,是软件质量保证的关键步骤。采用面向对象技术进行软件开发产生了两个结果:一是开发出功能更强大更便于用户使用的软件产品,二是生成规模庞大的程序代码和文档,这也必然导致更大规模的软件测试和维护工作。因此, 规范化的软件测试势在必行。规范化不只是测试的需求 (有效代码量、结构 /逻辑的复杂性、高性能 /高精确性 /高可靠性需求和消耗资源(人力 /时间 /测试频度规模化,更要求在面对规模庞大的软件测试需求,在合理的资源消耗基础上,实施有效的测试。 下图描述的是常用的一些测试方法 : 1、人工测试的方法 (1个人复查 个人复查是指程序员自行设计测试用例 ,对源代码、详细设计进行仔细检查,并记录错误、不足之处等。个人复查主要包括检查变量的正确性、检查标号的正确性、检查子程序、宏、函数、常量检查、标准检查、风格检查、比较控制流、选择、激活路径、对照详细说明书,阅读源代码和补充文档等方面的测试内容。 (2走查

走查是指测试人员先阅读相应的文档和源代码,然后人工将测试数据输入被测试程序,并在纸上跟踪监视程序的执行情况,人工沿着程序的逻辑走查运行一遍,跟踪走查运行的进程来发现程序的错误。走查的具体测试内容包括模块特性、模块接口、模块的对外输入或输出、局部数据结构、数据计算错误、控制流错误、处理出错和边界测试等方面。 (3会审 会审是指测试人员在会审前仔细阅读软件的有关资料,根据错误类型清单(根据以往的经验、对源程序的估计等,并在以后测试中给以丰富补充填写检测表,提出根据错误类型要提出的问题。会审时,由程序设计人员讲解程序的设计方法,由程序编写人员逐个讲解程序代码的编写,测试人员需要逐个审查, 提问,讨论可能出现的问题。会审对程序的功能、结构、逻辑和风格都要进行审定。会审的测试内容与“ 走查” 的内容相同。 2、机器测试 (1定义 机器测试的目的是检查程序的动态性能,检查程序在执行过程中存在的错误。尤其是发现程序在实现功能、逻辑通路、数值计算、数据处理、边界处理、错误处理等方面存在的错误。机器测试分为白盒测试和黑盒测试。 (2黑盒测试 黑盒测试即功能测试 ,这种方法是把软件看成一个看不见里面内容的黑盒,在完全不考虑程序内部结构和特性的情况下,测试软件的外部特性。根据软件的需求规格说明书设计测试用例,从程序输入和输出特性上检查程序是否满足设定的功能。黑盒测试常采用的方法是设计适量有效和无效的输入数据进行测试, 以期用最小的代价发现最多的错误。 (3白盒测试

虚拟仪器LABVIEW大作业

LABVIEW回声探测器实验作业 安 徽 工 业 大 学 电气信息学院 自动化093

回声探测器 LabVIEW是由美国国家仪器公司创立的功能强大而又灵活的仪

器和分析软件应用开发工具。它是一种基于图形化的、用图标来代替文本行创建应用程序的计算机语言。在以PC为基础的测量和工控软件中,LabVIEW的市场普及率仅此次于C++/C语言。LabVIEW已经广泛地被工业界、学术界和研究实验室所接受,被公认为是标准的数据采集和仪器控制软件,LabVIEW使用的编程语言是G语言。G语言用图表表示函数,用连线表示数据流向。这次编程所用的是较新版本的LabVIEW 8.5。 一.设计目的:该实验基于labview8.5虚拟平台,使用图形语言编程,由回声发生器子VI产生回声信号,通过回声探测器进行探测分析。本实例利用两个波形图来分别显示回声信号和回声探测信号,并对这两个信号进行比对分析。 本实验设计主要内容包括三个部分:回声产生部分,回声探测部分,和结果显示部分。 回声探测器实例的前面板如图1:

图1 1.程序框图主要功能模块介绍:如图2回声探测器实例的程序框图 主要有四个功能模块组成,分别为回声产生子Vi功能模块,回声探测功能模块,结果显示功能模块,While循环功能模块,下面对每个功能块实现的具体处理功能和任务进行详细介绍。 图2 1>.回声产生子VI功能模块 回声产生子VI功能模块用来产生回声信号,此子VI命名为 回声产生器.vi, 图3给出了回声 产生子VI功能图

回声信号 图3 该子Vi主要用来产生回声信号,可将该模块产生的信号输入相应的波形图和回声探测功能模块中。另外,该子VI可以通过改变输入控件的参数来产生不同的信号。 2>.回声探测功能模块 回声探测功能模块的功能是通过“快速希尔伯特变换”,“实部虚部至极坐标转换”和“自然对数”等一系列函数节点的运算,将回声产生子VI功能模块产生的回声信号信息特征探测出来,“快速希尔伯特变换”函数变换是在FFT函数进行傅立叶变换的基础上执行离散希尔伯特变换的。其调用路径是“函数——信号处理——变换——快速希尔伯特变换”。 “实部虚部至极坐标转换”函数是将一复数坐标的直角坐标形式转换成极坐标形式,本例利用该函数将两个直角坐标系的数组转换为极坐标形式,其调用路径是“函数——编程——数值——复数——实部虚部至极坐标转换”。 “自然对数”函数是计算输入数值的自然对数值,其调用路径是

相关主题
文本预览
相关文档 最新文档