内容
[](https://github.com/marketplace/actions/arduino_ci)
[](https://github.com/RobTillaart/MCP330X/actions/workflows/arduino-lint.yml)
[](https://github.com/RobTillaart/MCP330X/actions/workflows/jsoncheck.yml)
[](https://github.com/RobTillaart/MCP330X/issues)
[](https://github.com/RobTillaart/MCP330X/blob/master/LICENSE)
[](https://github.com/RobTillaart/MCP330X/releases)
[](https://registry.platformio.org/libraries/robtillaart/MCP330X)
# MCP330X
Arduino library for MCP3302 and MCP3304 13-Bit Differential ADC, SPI
## 描述
**实验性**
这个库读取 MCP3302 和 MCP3304 ADC 转换器的通道。
这些设备有 4 或 8 个通道,13 位,并使用 SPI 通信。
该库支持硬件 SPI 和软件 SPI。
这些设备用于 5V 操作。
| type | bits | SPS | channels | pairs | notes |
| :---------- | :------: | :------: | :----------: | :-------: | :-------- |
| MCP3302 | 1+12 | 100k | 4 | 2 |
| MCP3304 | 1+12 | 100k | 8 | 4 |
一位是符号位,12 位是幅度 (-4096..4095)。
阅读数据表以获取所有详细信息。
MCP3302/04-B 比 MCP3302/04-C 版本略微准确。
该库的代码基于 MCP_ADC 库,该库非常相似。
然而,并非该库的所有功能都已实现。
一如既往地欢迎反馈。
### 0.2.0 破坏性更改
在 0.2.0 中,在经过硬件测试后,Single/Differential 标志已修复。
因此,0.2.0 之前的版本已过时。
### 差分通道表
| Channel | diff IN+ | diff IN- | 3302 | 3304 |
| :-------: | :--------: | :--------: | :----: | :----: |
| 0 | 0 | 1 | V | V |
| 1 | 1 | 0 | V | V |
| 2 | 2 | 3 | V | V |
| 3 | 3 | 2 | V | V |
| 4 | 4 | 5 | | V |
| 5 | 5 | 4 | | V |
| 6 | 6 | 7 | | V |
| 7 | 7 | 6 | | V |
该库确实支持差分模式下的其他对。
可以通过调用 **int16_t differentialRead(uint8_t chan1, uint8_t chan2)** 来实现,该函数包装了两个 read() 调用。
### 性能
请参阅 - MCP3302_performance.ino
指示性数字 Arduino UNO,读取所有通道/对(4 或 8)。
MCP3304 的速度是其 2 倍,因为它具有 2 倍的通道数。
| version | function | proto | clock | MCP3302 | MCP3304 |
| :---------: | :----------: | :-------: | :-------: | :---------: | :---------: |
| 0.1.0 | read | HWSPI | 1 MHz | 216 | 428 |
| 0.1.0 | diffRead | HWSPI | 1 MHz | 200 | 404 |
| 0.1.0 | read | HWSPI | 8 MHz | 136 | - |
| 0.1.0 | diffRead | HWSPI | 8 MHz | 112 | - |
| 0.1.0 | read | SWSPI | | 1892 | 3804 |
| 0.1.0 | diffRead | SWSPI | | 1836 | 3752 |
指示性数字 Arduino ESP32,读取所有通道/对(4 或 8)。
| version | function | proto | clock | MCP3302 | MCP3304 |
| :---------: | :----------: | :-------: | :-------: | :---------: | :---------: |
| 0.1.0 | read | HWSPI | 1 MHz | 182 | 304 |
| 0.1.0 | diffRead | HWSPI | 1 MHz | 154 | 304 |
| 0.1.0 | read | HWSPI | 8 MHz | 54 | - |
| 0.1.0 | diffRead | HWSPI | 8 MHz | 52 | - |
| 0.1.0 | read | SWSPI | | 56 | 107 |
| 0.1.0 | diffRead | SWSPI | | 55 | 108 |
TODO:验证设备可以使用的最大 SPI 时钟频率。
### 相关
- https://gammon.com.au/adc 关于 ADC 的教程(UNO 特定)
- https://github.com/RobTillaart/ADS1x15 (12 & 16 bit ADC, I2C, slow)
- https://github.com/RobTillaart/MCP330X 这个库
- https://github.com/RobTillaart/PCF8591 (8 bit ADC + 1 bit DAC)
- https://github.com/RobTillaart/MCP_ADC 基于 SPI 的 ADC
- https://github.com/RobTillaart/MCP_DAC 基于 SPI 的 DAC
## 接口
```cpp
#include "MCP330X.h"
```
### 构造函数
- **MCP330X(SPIClassRP2040 \* mySPI = &SPI)** 硬件构造函数 RP2040
- **MCP330X(SPIClass \* mySPI = &SPI)** 硬件构造函数 其他
- **MCP330X(uint8_t dataIn, uint8_t dataOut, uint8_t clock)**
派生类具有具有相同参数的两个构造函数。
- **MCP3302(...)** 构造函数 1+12 位 ADC 4 通道。
- **MCP3304(...)** 构造函数 1+12 位 ADC 8 通道。
### 基础
- **void begin(uint8_t select)** 设置选择引脚。初始化内部结构。
- **uint8_t channels()** 返回通道数(4 或 8)
- **int16_t maxValue()** 返回 4095,ADC 的 maxReading。
### 读取
- **int16_t read(uint8_t channel)** 读取单个通道的值。
通道 = 0..3 或 0..7。
返回的值为 0..4095。
- **int16_t differentialRead(uint8_t pair)** 读取两个通道之间的差值。
对 = 0..3 或 0..7
返回的值为 -4096..4095。
有关详细信息,请查看数据表。请参阅上表。
- **int16_t differentialRead(uint8_t chan1, uint8_t chan2)** 对所有对执行效率较低(2 次读取调用)的差分读取。
此函数允许 chan1 == chan2,例如,可以用作噪声指示。
### SPI
- **void setSPIspeed(uint32_t speed)** 以 **Hz** 为单位设置 SPI 时钟,请先阅读 ADC 的数据表以获得最佳速度。
- **uint32_t getSPIspeed()** 以 **Hz** 为单位获取当前速度。
- **bool usesHWSPI()** 如果使用硬件 SPI,则返回 true。
### 调试
- **uint32_t count()** 返回自启动以来读取的通道数。
## 未来
#### 必须
- 改进文档
- 获取硬件进行测试
#### 应该
- 验证设备可以使用的最大 SPI 时钟频率。
- 添加示例
#### 可以
- 检查接口以扩展功能。
- 提高性能 SWSPI 请参见图 6.2 -> 20 位 iso 24 (16%)
更复杂,首先按原样测试库。
#### 不会(除非)
- diffRead() 是 differentialRead() 的缩写吗?
- float voltage(channel) 接口,因为 5V 是固定的(+ 设置 5.000 Vref。)
会添加浮点库(占用空间)。
## 支持
如果您喜欢我的库,可以支持开发和维护。
通过提供问题和拉取请求来提高库的质量,或者
通过 PayPal 或 GitHub 赞助商捐款。
谢谢,