Arduino与Proteus仿真实例-MCP3208模数转换驱动仿真

MCP3208模数转换驱动仿真

1、MCP3208介绍

MCP3208 12 位模数转换器 (ADC) 在小型封装中结合了高性能和低功耗,非常适合嵌入式控制应用。 MCP3208 采用逐次逼近寄存器 (SAR) 架构和行业标准 SPI™ 串行接口,允许将 12 位 ADC 功能添加到任何 PICmicro® 微控制器。 MCP3208 具有 100k 采样/秒、8 个输入通道、低功耗(典型待机为 5nA,最大活动电流为 400 µA),并采用 16 引脚 PDIP 和 SOIC 封装。 MCP3208 的应用包括数据采集、仪器仪表和测量、多通道数据记录器、工业 PC、电机控制、机器人、工业自动化、智能传感器、便携式仪器仪表和家用医疗器械。

MCP3208有如下特性:

  • 12 位分辨率
  • 八个单端输入
  • SPI接口
  • ±1 LSB DNL
  • ±1 LSB INL
  • 100 ksps 样品
  • -40 至 +85°C 温度范围
  • AEC-Q100 3 级

在这里插入图片描述

MCP3028的引脚功能如下:

在这里插入图片描述

2、仿真电路原理图

在这里插入图片描述

3、仿真代码实现

本次实例使用到如下开源库:

演示代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/\*\*
\* Basic ADC reading example.
\* - connects to ADC
\* - reads value from channel
\* - converts value to analog voltage
\*/

#include <SPI.h>
#include <Mcp320x.h>

#define SPI\_CS SS // SPI slave select
#define ADC\_VREF 5000 // 5V Vref
#define ADC\_CLK 1600000 // SPI clock 1.6MHz


MCP3208 adc(ADC_VREF, SPI_CS);

void setup() {

// configure PIN mode
pinMode(SPI_CS, OUTPUT);

// set initial PIN state
digitalWrite(SPI_CS, HIGH);

// initialize serial
Serial.begin(9600);

// initialize SPI interface for MCP3208
SPISettings settings(ADC_CLK, MSBFIRST, SPI_MODE0);
SPI.begin();
SPI.beginTransaction(settings);
}

void loop() {

uint32\_t t1;
uint32\_t t2;

// start sampling
Serial.println("Reading...");

t1 = micros();
uint16\_t raw = adc.read(MCP3208::Channel::SINGLE_0);
t2 = micros();

// get analog value
uint16\_t val = adc.toAnalog(raw);

// readed value
Serial.print("value: ");
Serial.print(raw);
Serial.print(" (");
Serial.print(val);
Serial.println(" mV)");

// sampling time
Serial.print("Sampling time: ");
Serial.print(static_cast<double>(t2 - t1) / 1000, 4);
Serial.println("ms");

delay(500);
}

4、仿真结果

在这里插入图片描述

文章来源: https://iotsmart.blog.csdn.net/article/details/121678961