Arduino Uno本身只有A0到A5六个模拟输入口,想同时接好几个模拟传感器往往不够用。MCP3008是一颗很便宜的8通道10位AD转换芯片,走SPI只用四根线就能扩展出8路模拟输入。这篇文章讲接线和几处容易错的地方。

认识这颗16脚的芯片
MCP3008是16脚DIP封装,8路模拟输入在这边,SPI四根线在另一边。芯片凹口方向或圆点用来确定第1脚。它把模拟电压转成0到1023的10位数字量,输入范围由参考电压VREF决定。
供电常规接法:VDD接3.3V,VREF也接3.3V(它就是比较量程的基准),AGND和DGND都接地。模拟输入通道CH0到CH7分别接各路传感器信号。
SPI四根线要一一对上:CLK接主控的SCK,DOUT接主控的MISO,DIN接主控的MOSI,CS接主控的片选脚(Uno上硬件SPI是13/12/11脚,片选CS可以自己挑一个空闲数字脚)。

用库读取,几行出数据
Arduino里可以用Adafruit的MCP3008库或MCP3xxx系列库,封装好了SPI的读写。核心就是初始化时指定片选脚,然后逐个通道read(),就能拿到0到1023的数字量,再按VREF换算成实际电压。
因为走的是共享SPI总线,如果板上还挂了别的不支持SPI的设备,记得保证同一时间只有MCP3008的CS被拉低,才不会互相抢总线。
三个高频坑提前避掉
坑一:SPI引脚没接对。Uno的硬件SPI就是SCK=13、MISO=12、MOSI=11,别接反DOUT和DIN,接反就读出全是乱的。
坑二:模拟输入电压别超过VREF/VDD。超了会读成满值甚至损坏输入端,要确保信号只在这个范围。
坑三:VREF忘了接,或直接接了5V让量程对不上。VREF决定转换满度,务必和你的信号量程匹配。
扩好之后,一口气接七八个光敏、电位器、水流或气体传感器,做多参数监测板会轻松很多。







VREF决定量程,接错就量不准,先确认信号范围再定参考电压
模拟输入别超VREF,超了读数顶格还可能伤输入端
一次挂8路光敏做监测板真香,多参传感器一下够用了
SPI四根线要接对,DOUT和DIN接反读出来的全是乱的,别踩