Windows IoT:如何使用树莓派2读取模拟量

Yeu****sin UID.925855
2016-02-24 发表

本帖最后由 newsmanager 于 2016-2-24 18:35 编辑

因为树莓派上没有内置的模数转换器(ADC),所以当我们需要用树莓派读取模拟量时需要外接一块模数转换芯片(ADC),本文使用的是MCP3008,(MCP3002,MCP3208都是可以的,道理是一样的,根据转换精度不同调节参数就可以了)

在这个教程中我使用的是树莓派2和MCP3008

***附件停止解析***

***附件停止解析***

首先接线
连接树莓派的SPI0 MOSI(19)和MCP3008的Din(11),SPI0 MISO(21)和MCP3008 的Dout(12),其它根据下面电路图连接

***附件停止解析***

然后将温度传感器的输出端口接到MCP3008的CH0(1),MCP3008一共有10个模拟输入口再加上树莓派最多可以接两块MCP3008,所以你最多可以读取10*2=20个模拟输入量

连接MCP3008

首先实例化一个SpiDevice
SpiDevice在Windows.Devices.Spi命名空间内,所以需要引用"Windows IoT Extensions for the UWP",如下图
***附件停止解析***
[mw_shl_code=csharp,true]
//新建实例代码
SpiDevice ADC;

// . . .

var settings = new SpiConnectionSettings(0)
{
ClockFrequency = 500 * 1000, // 时钟不要超过3.6 MHz,根据芯片数据手册决定大小
Mode = SpiMode.Mode0,
};

string spiAqs = SpiDevice.GetDeviceSelector("SPI0");
var devicesInfo = await DeviceInformation.FindAllAsync(spiAqs);
ADC = await SpiDevice.FromIdAsync(devicesInfo[0].Id, settings);

[/mw_shl_code]

读取数据
我们使用 TransferFullDuplex()函数读取数据,这个函数接收两个参数(字节数组),第一个是告诉函数执行哪个操作,另一个是接收读取的值。

由于MCP3008的精度是10位,2个字节就可以容纳,这里多加一个。

[mw_shl_code=csharp,true]
byte[] request = new byte[3] { 0x01, 0x80, 0 }; //读取CH1数据,具体发送什么值可以在芯片的数据手册中查到
byte[] response = new byte[3];

// . . .

ADC.TransferFullDuplex(request, response);
[/mw_shl_code]

将byte[] 转换为 int
[mw_shl_code=csharp,true]
int result = 0;
result = data[1] & 0x03;
result <<= 8;
result += data[2];
return result;[/mw_shl_code]

到此你就可以使用树莓派读取模拟输入了,快去试试吧!(Via:***链接停止解析***)

标签: Windows 如何

敬告:
为防止不可控的内容风险,本站已关闭新用户注册,新贴的发表及评论;
你现在看到的内容只是互联网用户曾经发表的言论快照,仅用于老用户留存纪念,且仅与科技行业相关,全部内容不代表本站观点及立场;
本站重新开放前已针对包括用户隐私、版权保护、信息安全、国家政策在内的各种互联网法律法规要求,执行了隐患内容的自查、屏蔽和删除;
本站目前所属个人主体,未有任何盈利安排与计划,且与原WFUN.COM所属公司不存在任何关联关系;
如果本帖内容或者相关资源侵犯到您的合法权益,或者您认为存在问题,那么请您务必点此举报或投诉!
本站使用Golang构建,点击此处申请开源鄂ICP备18029942号-4联系站长投诉/举报