ADC
来自Jack's Lab
目录 |
1 Overview
AD/DA 芯片几乎被模拟巨头 ADI 垄断了。当年因为Wassenaar Arrangement,美国要求最高端的技术要禁售给中国。
ADI 有好几百款芯片在禁售单上。其10bit 100MSPS以上的 ADC 芯片都是禁售的,甚至连 AD/DA 研发部门都罕有华人
2 MCP3421
- 18 bit ADC in a SOT-23-6 package, I²C interface
- Self calibration of internal offset and Gain per each Conversion
- On-board Voltage Reference: 2.048V +-0.05%, 5ppm/C
- On-board PGA (Programmable Gain Amplifier): x1, x2, x4, x8
- Programmable Data Rate Options:
- 3.75 SPS (18bit)
- 15 SPS (16bits)
- 60 SPS (14bits)
- 240 SPS (12bits)
- Low current consumption: 145 uA (Continuous Conversion) or 39 uA (One-Shot Conversion with 1 SPS)
- 2.7V to 5.5V power supply
- -40 - 125 C
2.1 General Call
Datasheet 之 5.4 General Call 。参考 I2C 总线精要
广播方式,当发出 0x00 的地址信 息后,所有 I2C 上的 Slave 设备都要对此作出反应,此机制适合用在 Master 要对所有的 Slave 进行广播性讯息更新与沟通上,是一种总体、批次的运作方式。
2.2 PGA
可编程运放, 支持 x1, x2, x4, x8 信号放大
3 CS53L30
- System Features
- Native (no PLL required) support for 6-/12-MHz, 6.144-/12.288-MHz, 5.6448-/11.2896-MHz, or 19.2-MHz master clock rates and 8- to 48-kHz audio sample rates
- Master or Slave Mode. Clock dividers can be used to generate common audio clocks from single-master clock input.
- Low power consumption
- Less than 4.5-mW stereo (16 kHz) analog mic record
- Less than 2.5-mW mono (8 kHz) analog mic record
- Selectable mic bias and digital interface logic voltages
- High-speed (400-kHz) I²C control port
https://www.cirrus.com/en/pubs/proDatasheet/CS53L30_F2.pdf
4 ADAS1000
4.1 ADS7844
4.2 ADS7688
5 Atmega328
8-channel 10-bit ADC in TQFP and QFN/MLF package
5.1 检测电池电压
用内部 1.1V 基准电压源:
analogReference(INTERNAL);use internal 1.1V as Avref //analogReference(DEFAULT); use AVcc as AVref
VBAT 接 0.1% 300K - 100K - GND,ADC 脚接两个电阻之间,测量 100K 电阻两端电压。。。
或者选择内部 1.1V 作为 Vref,AREF 脚作为 Vin,反推 Vin:
ADC = Vin/Vref * 2^n, n = 10 in 328p
#include "Arduino.h" #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) #define ADMUX_VCCWRT1V1 (_BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1)) #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) #define ADMUX_VCCWRT1V1 (_BV(MUX5) | _BV(MUX0)) #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) #define ADMUX_VCCWRT1V1 (_BV(MUX3) | _BV(MUX2)) #else #define ADMUX_VCCWRT1V1 (_BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1)) #endif float Read_Volts(void) { // Read 1.1V reference against AVcc // set the reference to Vcc and the measurement to the internal 1.1V reference if (ADMUX != ADMUX_VCCWRT1V1) { ADMUX = ADMUX_VCCWRT1V1; // Bandgap reference start-up time: max 70us // Wait for Vref to settle. delayMicroseconds(350); } // Start conversion and wait for it to finish. ADCSRA |= _BV(ADSC); while (bit_is_set(ADCSRA,ADSC)) {}; // Result is now stored in ADC. // Calculate Vcc (in V) float vcc = 1.1*1024.0 / ADC; return vcc; }
其中REFS1和REFS0用于设置Vref,这里应该配置为01对应Vcc口
MUX3…0用于选择ADC的输入Vin,这里应配置为内部1.1v对应的1110
6 参考