2016 - 2024

感恩一路有你

单片机模数转换的处理方法

浏览量:2661 时间:2024-01-26 22:21:36 作者:采采

1. 电路需求

在一些旧式单片机如51/52等等,内部没有集成模数转换模块,所以此类芯片的开发板要学习模数转换,需要借助外部模数转换电路。其中一个常用的外部模数转换芯片是PCF8591。下图显示了使用PCF8591芯片的模数转换电路图。只需按照图中连接相应的电路即可实现模数转换。另外,一些增强性8050内核芯片已经集成了模数转换模块,例如STC15等。

2. 原理

模数转换即是将输入电压与内部参考基准电压进行比较。模块内部将基准电压分成多个电压开关(例如256个,精度为8位),输入电压与每个开关电压进行比较。当输入电压的值与某个电压开关的值相等或最接近时,该开关打开,并且对应的二进制编码存储到存储器中。这样就完成了一次模拟量到数字量的转换。

3. 接口

模数转换芯片PCF8591具有以下接口:

1. 数据传输接口:SCL、SDA(IIC协议)

2. 可设置地址的接口:A0-A2

3. 输入通道:AIN0-AIN3

4. 数模转换输出引脚:AOUT

5. 参考基准电压和模拟地:VREF和AGND

4. IIC协议底层

要实现模数转换,需要先驱动PCF8591芯片使其工作。而IIC协议则是驱动芯片的一种规则,包括开始信号、结束信号、应答信号、数据有效性、发送一字节、接收一字节等操作。

5. 工作流程

以下是一个AD转换函数的示例代码:

```c

unsigned char AD_zhuan(void){

unsigned char temp;

PCF8591_start(); // 开始信号

PCF8591_write(0x90); // 写入器件地址+数据读/写方向位,第一字节

PCF8591_write(0x02); // 写入控制字,器件功能设置,第二字节(单通道,通道2)

PCF8591_start(); // 重新开始新的操作

PCF8591_write(0x91); // 器件地址,读操作

temp PCF8591_read(); // 采集电压,放到temp里面

Zhu_ack(1); // 采集完毕,主机应答

PCF8591_stop(); // 关闭AD

return temp;

}

```

通过以上工作流程,可以完成模数转换的过程。具体实现时,可根据需要进行相应的配置和操作。

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。