主要内容

使用NI USB 8451适配器的ADXL345加速计芯片进行抽头检测

这个例子展示了如何使用NI®USB 8451 I2C适配器从ADXL345 I2C启用的加速计芯片写入和读取数据。加速度计将被配置为检测双抽头,并将使用MATLAB®显示芯片已检测到这一消息。

仪器控制工具箱™支持通过接口和驱动程序与仪器通信。金宝app

有关受支持硬件的完整列表,请访问仪器控制工具箱金宝app产品页

要求

此示例要求安装Microsoft®Windows®系统和NI845x驱动程序2.1.1或更高版本。在使用本示例之前,请确保Measurement&Automation Explorer能够识别NI845x设备。此外,确保测量和自动化浏览器™ 在从MATLAB访问设备之前关闭。

该示例使用了Analog Devices®ADXL345加速度计,该加速度计安装在SparkFun™的9DOF传感器杆上。加速度计有I2C总线线,可以连接到适配器的I2C总线线输入。总线线需要用外部上拉电阻拉高,因为NI USB 8451没有可编程的内部上拉电阻。请注意电平移位器用于分隔V_s和V_dd。

介绍

仪器控制工具箱™支持通过I2C适配器(如NI USB 8金宝app451)与I2C设备通信。工具箱允许您创建一个I2C接口,该接口可用于配置适配器以与I2C外围芯片通信。

此示例将演示如何配置基于I2C的加速计,以响应用手指轻敲试验板两次。当检测到双击时,MATLAB命令窗口中将显示一条消息。

验证NI845x安装

使用instrhwinfo命令检查NI845x驱动程序是否正确安装,以及“Instrument Control Toolbox”是否能正确检测到。

单板序列号可以帮助您识别设备

instrreset i2cInfo = inthwinfo (“i2c”“ni845x”);disp(i2cInfo);
AdaptorDllName: [1x94 char] AdaptorDllVersion: 'Version 3.4' AdaptorName: 'ni845x' boarddsinuse: [1x0 double] InstalledBoardIDs: 0 DetectedBoardSerials: {'0180D47A (BoardIndex: 0)'} ObjectConstructorName: 'i2c('ni845x', BoardIndex, RemoteAddress);' VendorDllName: 'ni845x .dll' VendorDriverDescription: 'National Instruments NI USB 845x Driver'

创建I2C接口并设置总线速度(比特率属性)

加速度计方向=hex2dec('53');i2cInterface = i2c (“ni845x”0 accelerometerAddress);fopen (i2cInterface);i2cInterface。比特率= 100;

设置轻按阈值、第二次轻按延迟、第二次轻按窗口和轻按持续时间寄存器值

根据设备的数据表设置寄存器值。从设备读取值以确认值确实已设置。

threshTapRegisterAddress = hex2dec (“一维”);valueToWrite=hex2dec('50');% 5 g值disp ([的写作价值:num2str (valueToWrite)]);写入文件(i2cInterface [threshTapRegisterAddress valueToWrite]);写入文件(i2cInterface threshTapRegisterAddress);registerValue = fread(i2cInterface, 1,)“uint8”);disp ([` THRESH_TAP寄存器的值是:`num2str(registerValue)];latentRegisterAddress=hex2dec(“22”);valueToWrite=hex2dec('5');disp ([的写作价值:num2str(valueToWrite)];fwrite(i2cInterface,[latentRegisterAddress valueToWrite]);%确认返回到寄存器的值fwrite(i2cInterface,latentRegisterAddress);registerValue=fread(i2cInterface,1,“uint8”);disp ([潜寄存器的值是:num2str (registerValue)]);windowRegisterAddress = hex2dec (“23”);valueToWrite=hex2dec(“FF”);disp ([的写作价值:num2str(valueToWrite)];fwrite(i2cInterface,[windowRegisterAddress valueToWrite]);%确认返回到寄存器的值fwrite(i2cInterface,windowRegisterAddress);registerValue=fread(i2cInterface,1,“uint8”);disp (['窗口寄存器的值为:'num2str(registerValue)];持续时间registerAddress=hex2dec(“21”);valueToWrite=hex2dec(“十”);disp ([的写作价值:num2str (valueToWrite)]);写入文件(i2cInterface [durationRegisterAddress valueToWrite]);写入文件(i2cInterface durationRegisterAddress);registerValue = fread(i2cInterface, 1,)“uint8”);disp (['DUR寄存器的值为:'num2str (registerValue)]);tapAxesRegisterAddress = hex2dec (“2”);valueToWrite=bin2dec(“00000111”);disp ([的写作价值:num2str (valueToWrite)]);写入文件(i2cInterface [tapAxesRegisterAddress valueToWrite]);写入文件(i2cInterface tapAxesRegisterAddress);registerValue = fread(i2cInterface, 1,)“uint8”);disp (['攻丝轴寄存器的值为:'num2str (registerValue)]);interruptEnableRegisterAddress = hex2dec (“2 e”);valueToWrite=bin2dec(“01100000”);disp ([的写作价值:num2str (valueToWrite)]);写入文件(i2cInterface [interruptEnableRegisterAddress valueToWrite]);写入文件(i2cInterface interruptEnableRegisterAddress);registerValue = fread(i2cInterface, 1,)“uint8”);disp (['INT_启用寄存器的值为:'num2str (registerValue)]);
写入值:80阈值抽头寄存器的值为:80写入值:5潜在寄存器的值为:5写入值:255窗口寄存器的值为:255写入值:16 DUR寄存器的值为:16写入值:7抽头轴寄存器的值为:7写入值:96 INT_启用寄存器的值为:96

通过写入POWER_CTL寄存器来启用操作

根据数据表向POWER_CTL寄存器写入数据将导致芯片从待机模式切换到正常操作模式。

powerControlRegisterAddress = hex2dec (“二维”);valueToWrite=bin2dec('00001000');disp ([的写作价值:num2str(valueToWrite)];写入(i2cInterface,[PowerControlRegisterAddressValueToWrite]);写入(I2C接口,powerControlRegisterAddress);registerValue=fread(I2C接口,1,“uint8”);disp (['电源控制寄存器的值为:'num2str (registerValue)]);
写入值:8 POWER_CTL寄存器的值为:8

轮询中断寄存器

中断源寄存器将包含与由特定源产生的中断标志对应的位。检查是否生成了双击中断

interruptSourceRegisterAddress=hex2dec('30');disp (“等待双击…”);虽然(1) fwrite(i2cInterface,interruptSourceRegisterAddress);InterruptValues=fread(i2cInterface,1);TapInterrupt=bitand(InterruptValues,bin2dec('00100000'));如果TapInterrupt disp (“双击发现!”);打破结束结束
正在等待双击…检测到双击!