主要内容

使用SPI模拟输入

这个例子向您展示了如何使用SPI外围覆盆子π™硬件上连接到一个MCP3008 10位8路ADC。

介绍

各种各样的传感器输出模拟电压水平对环境的刺激做出反应。模拟传感器的例子有TMP36温度传感器,电阻照片。覆盆子π硬件没有任何内置的模拟输入端口。也使用模拟传感器,您需要一个外部ADC。在本例中,您的接口ADC芯片覆盆子π使用SPI外围硬件。

先决条件

所需的硬件

要运行这个示例需要以下硬件:

  • 覆盆子π硬件

  • 电源至少1输出

  • 案板和跨接电缆

  • MCP3008 ADC

  • 10 kOhm电位计

SPI的概述

串行外围接口(SPI)是一种同步串行数据链路,使用一个或多个外围设备接口SPI设备一个控制器。SPI使用三个信号线路常见的所有外围设备:

  • 串行数据(SDI)。数据从外围导线控制器。

  • 串行数据(SDO)。数据从控制器外围导线。

  • 串行时钟(SCLK)。控制器SPI设备生成这个时钟。

每个外围设备连接到一个单独的芯片选择或peripheral-transmit使线。在SPI通信过程中,控制器只选择一个外围设备。其他外设总线上的没有激活使用其芯片选择线必须无视输入时钟和SDO的信号。它还不能开车SDI线。

SPI通信是全双工的。当控制器发送一个SDO行上,外围读取一点一点,同时发出了一个在SDI行反过来读的控制器。因此,从外围设备读取,您必须编写。

有四个不同的SPI模式可以使用。每个模式定义了一个特定的时钟相位(CPHA)和极性(CPOL)的数据。模式0 (CPOL = 0, CPHA = 0)是最常见的用例。覆盆子π硬件有两个SPI渠道在黑板上:0和1。它可以支持两个金宝appSPI外围设备。每个SPI频道都有一个相应的总线速度的范围可以从500千赫至32 MHz。交换的数据位的数量在每个SPI事务可以不同8到16位8位是最常见的。

查看可用的SPI渠道

创建一个raspi对象并检查AvailableSPIChannels raspi对象的属性。

清晰的零售物价指数零售物价指数= raspi ();rpi.AvailableSPIChannels

如果SPI外围没有启用,您将会看到一个空单元数组。启用的SPI外围使用raspi-config工具Raspbian Linux映像。AvailableSPIChannels零售价格指数(rpi)对象的属性应该产生‘CE0’和‘CE1 SPI渠道列为可用。

概述MCP3008

MCP3008 10位,8路模拟到数字转换器(ADC)的SPI接口。

如这个图所示,针1到8个模拟输入通道。销16是数字电源电压和销9是数字地面。美元V_ {ref} $美元现代{接地}$针用于参考电压水平模拟测量。数字10位电压测量值是这样对应的值为0美元现代{接地}$1023年和一个值(2 ^ 10 - 1)对应美元V_ {REF} $。销10到13是SPI接口的连接。

连接MCP3008

连接MCP3008的覆盆子π硬件见下面的电路图。模拟可变电压应用于CH0,使用10 kOhm电位计和CH0相连。

在这个例子中,电位计(锅)是一个三端与终端设备1和3组成的结束点电阻嵌入在锅中。第二个终端连接到一个变量的雨刷。随着雨刷,跨终端电阻1和2和终端2和3的变化。在这个电路,锅分压器作为变量。当你移动的旋钮电位器的电压在终端2 3.3伏特和0伏特之间变化。

测量电压在CH0

MCP3008使用SPI接口与SPI通信控制器,在这种情况下是覆盆子π硬件。一个SPI的事务MCP3008和覆盆子π由3个字节之间。覆盆子π硬件发送一个字节包含MCP3008 ' 1 '的价值。同时,MCP3008发送一个不在乎字节覆盆子π硬件。覆盆子π硬件发送另一个字节MCP3008最重要的4位包含一个“1000”的价值。这个字节表示的MCP3008请求CH0单端电压测量。同时,MCP3008发送的第9和第10位ADC测量。最后,树莓π硬件发送一个不在乎字节同时读取电压测量的最低有效位8位。10位的值读取MCP3008然后转换成电压值。

读取电压

从MCP3008读取电压值,首先创建一个spidev对象连接到SPI频道“CE0”。执行SPI事务如前所述。

清晰的mcp3008mcp3008 = spidev(零售物价指数,“CE0”);data = uint16 (writeRead (mcp3008 [bin2dec (“10000000”)、0]));highbits = bitand(数据(2)、bin2dec (“11”));电压=双(bitor (bitshift (highbits 8),数据(3)));电压=(3.3/1024)*电压;

的变量电压的电压值从MCP3008 CH0销的读取。你可以用各种模拟传感器,如TMP36温度传感器,这个电路的锅。

高级:创建一个MATLAB MCP3008类

您可以创建一个MATLAB®类MCP3008使它容易使用这个设备从MATLAB命令行界面。你可以压缩的步骤在这个例子中使用MATLAB类。

清晰的mcp3008mcp3008 = raspi.internal.mcp3008(零售物价指数,“CE0”);我= = readVoltage 1:20电压(mcp3008 0);流(“电压= % 0.2 f \ n”、电压);暂停(0.2);结束

实验与壶钮在执行前循环。你看到这个电压值印在MATLAB提示更改。

总结

这个示例介绍了工作流处理SPI接口。您学习了如何使用MCP3008 ADC阅读模拟输入电压。