模数转换A/D与数模转换D/A

基本概念

模拟量:任何两个数字之间都有无限个中间值,所以称之为连续变化的量,也就是模拟量。
数字量:数字间有一定的间隔,不是连续的,即离散的量称之为数字量。

A/D:Analog to Digital Converter,用模数转换器实现模拟量到数字量的转换,简称ADC。
D/A:Digital to Analog Converter,用数模转换器实现数字量到模拟量的转换,简称DAC。

A/D的主要指标

1、ADC的位数:1个n位的ADC表示这个ADC共有2的n次方个刻度。
2、基准源:也叫做基准电压,是ADC的参考基准。
3、分辨率:数字量变化一个最小刻度,模拟信号的变化量,定义为满刻度量程与2n-1的比值。
4、INL(积分非线性度)和DNL(差分非线性度)

INL是指ADC器件在所有数值上对应的模拟值,和真实值之间误差最大的那个点的误差值,单位是LSB。LSB(Least Significant Bit)是最低有效位的意思,它实际上对应的就是ADC的分辨率。

DNL是指ADC相邻两个刻度之间最大的差异,单位也是LSB。
5、转换速率:是指ADC每秒能进行采样转换的最大次数,单位是sps。

PCF8591

硬件信息
在这里插入图片描述
1\2\3\4是4路模拟输入
5\6\7是I2C总线的硬件地址
引脚8是数字BND
9和10为I2C总线的SDA和SCL
12是时钟选择引脚,高电平时外部时钟输入,低电平时内部时钟
14为基准源
15是DAC的模拟输出
16是供电电源VCC
13是模拟地AGND

AD无法测量超过其Vref基准源的电压信号

软件信息
对PCF8591进行初始化,需要三个字节:
第一字节:器件地址。
7位表示地址(头四位为0b1001,后三位为A2\A1\A0,接地就为0),一位表示读写方向(0b1001000)

第二字节:PCF8591控制字。
第7、3位:0
6:DA使能,为1使能
4、5:将4路模拟输入配置成单端模式和差分模式
2:自动增量控制位
0、1:通道选择位

第三字节:D/A数据寄存器。
表示模拟输出的电压值

代码

//读取当前ADC转换值chn为ADC通道号0~3
unsigned char GetADCValue(unsigned char chn)
{
	unsigned char val;
	I2CStart();
	if(!I2CWrite(0x48<<1))//寻址PCF8591,如未应答则停止操作并返回0
	{
		I2CStop();
		return 0;
	}
	I2CWrite(0x40|chn);//写入控制字节,选择转换通道
	I2CStart();
	I2CWrite((0x48<<1)|0x01); //寻址PCF8591,指定后续为读操作
	I2CReadACK();			  //先空读一个字节,提供采样转换时间
	val=I2CReadNAK();		  //读取刚刚转换完的值
	I2CStop();
	return val;
}

A/D差分输入信号
在这里插入图片描述主要是抗干扰能力强
两路信号的差值就是所要的信号
一路信号被干扰最终计算就会有偏差
4、5位都是1的时候,4路模拟被配置为2路差分模式

D/A输出
8位D/A代表:0~255
假如代表0~2.55V的话,发送100就代表1V

void SetDACOut(unsigned char val)//设置DAC输出值,VAL为设定值
{
	I2CStart();
	if(!I2CWrite(0x48<<1))
	{
		I2CStop();
		return;
	}
	I2CWrite(0x40);	//写入控制字节
	I2CWrite(val);	//写入DA的值
	I2CStop();
}
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王蒟蒻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值