学习ADS1115程序代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include "ads1115.h"
#include "ap_i2c.h"
static void Confige1115 (unsigned char port);
static void PointRegister (void);
static void ReadData (unsigned char chn, unsigned char cnt);
unsigned char WriteIntBuf[4], WritepointBuf[2], count = 6,ReadBuffer[64];;
void delay (unsigned int delay)
{
while(delay--);
}
/******************************************************************** ***********
* Function Name : Confige1115
* Description : 延迟时间
* Input : None
* Output : None
* Return : None
* Attention :获取ADS1115模拟转换结果
********************************************************************* **********/
void Get_ATOD (unsigned char channel,unsigned char cnt)
{
static unsigned char chn;
chn = channel;
Confige1115(channel);
delay(1000);
PointRegister();
delay(1000);
ReadData(chn,cnt);
delay(1000);
}
/******************************************************************** ***********
* Function Name : Confige1115
* Description : 延迟时间
* Input : None
* Output : None
* Return : None
* Attention :配置ADS1115
********************************************************************* **********/
static void Confige1115 (unsigned char port)
{
static unsigned char chnel, i;
switch (port)
{
case 0: //0通道
chnel=0xC2;
break;
case 1: //1通道
chnel=0xD2;
break;
case 2: //2通道
chnel=0xE2;
break;
case 3: //3通道
chnel=0xF2;
break;
default:
break;
}
WriteIntBuf[0] = CMD_Write;
WriteIntBuf[1] = CMD_CONF_REG;
WriteIntBuf[2] = chnel;
WriteIntBuf[3] = CONF_L;
if(!(TWI_START()))
{
for(i=0;i<4;i++)
{
TWI_SendByte(WriteIntBuf[i]);
delay(20);
}
}
TWI_STOP();
}
/******************************************************************** ***********
* Function Name : PointRegister
* Description : 延迟时间
* Input : None
* Output : None
* Return : None
* Attention :指向ADS1115指针寄存器用于准备读取数据
********************************************************************* **********/
static void PointRegister (void)
{
unsigned char i;
WritepointBuf[0] = CMD_Write;
WritepointBuf[1] = CMD_POINT_REG;
if(!(TWI_START()))
{
for(i=0;i<2;i++)
{
TWI_SendByte(WritepointBuf[i]);
delay(20);
}
}
TWI_STOP();
}
/******************************************************************** ***********
* Function Name : I2C_delay
* Description : 延迟时间
* Input : None
* Output : None
* Return : None
* Attention : CH1 PA4 CH2 PA7 CH3 PA6 CH4 PA5
********************************************************************* **********/
static void ReadData (unsigned char chn,unsigned char cnt)
{
switch(chn)
{
case 0: //0通道
if(!(TWI_START()))
{ if(count == 0xff)
count = 6;
TWI_SendByte(CMD_Read);
delay(20);
ReadBuffer[cnt * 8] = TWI_ReceiveByte();
TWI_SendACK();
ReadBuffer[(cnt * 8) + 1] = TWI_ReceiveByte();
TWI_SendACK();
TWI_STOP();
ReadBuffer[56]|=(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_4) << count);
}
break;
case 1: //1通道
if(!(TWI_START()))
{ TWI_SendByte(CMD_Read);
delay(20);
ReadBuffer[(cnt * 8) + 2] = TWI_ReceiveByte();
TWI_SendACK();
ReadBuffer[(cnt * 8) + 3] = TWI_ReceiveByte();
TWI_SendACK();
TWI_STOP();
ReadBuffer[57]|=(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7) << count);
}
break;
case 2: //2通道
if(!(TWI_START()))
{
TWI_SendByte(CMD_Read);
delay(20);
ReadBuffer[(cnt * 8) + 4] = TWI_ReceiveByte();
TWI_SendACK();
// I2C_delay(20);
ReadBuffer[(cnt * 8) + 5] = TWI_ReceiveByte();
TWI_SendACK();
TWI_STOP();
ReadBuffer[59]|=(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5) << count);
}
break;
case 3: //3通道
if(!(TWI_START()))
{
TWI_SendByte(CMD_Read);
delay(20);
// I2C_delay(20);
ReadBuffer[(cnt * 8) + 6] = TWI_ReceiveByte();
TWI_SendACK();
// I2C_delay(20);
ReadBuffer[(cnt * 8) + 7] = TWI_ReceiveByte();
TWI_SendACK();
TWI_STOP();
ReadBuffer[58]|=(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6) << count--);
}
break;
default:
break;
}
/* if(chn == 0)
{
if(count == 0xff)
count = 6;
// if(!(TWI_START()))
{
TWI_SendByte(CMD_Read);
ReadBuffer[cnt * 8] = TWI_ReceiveByte();
TWI_SendACK();
ReadBuffer[(cnt * 8) + 1] = TWI_ReceiveByte();
TWI_SendACK();
TWI_STOP();
}
ReadBuffer[56]|=(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_4) << count);
}
if(chn == 1)
{
// if(!(TWI_START()))
TWI_SendByte(CMD_Read);
ReadBuffer[(cnt * 8) + 2] = TWI_ReceiveByte();
TWI_SendACK();
ReadBuffer[(cnt * 8) + 3] = TWI_ReceiveByte();
TWI_SendACK();
TWI_STOP();
}
ReadBuffer[57]|=(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5) << count);
}
if(chn == 2)
{
// if(!(TWI_START()))
{
TWI_SendByte(CMD_Read);
ReadBuffer[(cnt * 8) + 6] = TWI_ReceiveByte();
TWI_SendACK();
// I2C_delay(20);
ReadBuffer[(cnt * 8) + 7] = TWI_ReceiveByte();
TWI_SendACK();
TWI_STOP();
}
ReadBuffer[59]|=(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6) << count);
}
if(chn == 3)
{
// if(!(TWI_START()))
{
TWI_SendByte(CMD_Read);
// I2C_delay(20);
ReadBuffer[(cnt * 8) + 4] = TWI_ReceiveByte();
TWI_SendACK();
// I2C_delay(20);
ReadBuffer[(cnt * 8) + 5] = TWI_ReceiveByte();
TWI_SendACK();
TWI_STOP();
}
ReadBuffer[58]|=(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7) << count--);
}*/
}
//============================================================ =====///
#ifndef __ADS1115_H
#define __ADS1115_H
#include "stm32f10x_i2c.h"
#include "stm32f10x_gpio.h"
#define CMD_Write 0x90
#define CMD_Read 0x91
#define CMD_CONF_REG 0x01
#define CMD_POINT_REG 0x00
#define CONF_L 0xe3
void Get_ATOD (unsigned char channel,unsigned char cnt);
#endif
摘要:论述了一种串行控制的12位数模转换器的基本原理,并给出了其在高频开关整流模块的控制环节中的硬件电路及软件设计。

关键词:单片机变换器整流模块
1 引言
本公司研制的DZW02型220V系列整流模块,广泛应用于电力电源系统中。

通过全桥移相高频变换,采用高品质的D/A变换器——MAX531,解决了单片机与移相控制电路的接口问题,使整流模块的稳压精度达到≤0.1%的水平。

DZW02型整流模块的基本结构框图如图1所示。

它由主电路、PWM控制电路、监控电路和辅助保护电路组成。

其主电路由输入电网滤波电路、整流桥、有源功率因数校正(APFC)电路、DC/DC高频变换电路、输出整流滤波等电路组成。

这里着重讨论单片机与PWM控制之间的接口电路12位D/A转换器MAX531的应用。

2 D/A转换器
MAX531是美信集成产品公司生产的12位串行数据接口数模转换器,采用“反向”R-2R的梯形电阻网络结构。

内置单电源CMOS运算放大器,其最大工作电流仅为260μA,具有很好的电压偏移,增益和线性度。

内部运算放大器根据需要可配置成+1或+2的增益,也可作四象限乘法器。

2.1 主要性能
主要性能如下:
单/双工作电源;
缓冲电压输出;
内置2.048V电压基准;
总不可调整误差(INL):±1/2LSB;
灵活的输出电压范围:VSS~VDD;
电源上电复位功能;
具有菊花链连接的串行数据输出。

2.2 管脚结构
MAX531采用14脚DIP封装,见图2,其引脚功能的详细说明见表1。

2.3 工作原理
在芯片选择CS为高电平时,SCLK被禁止且DIN端的数据不能进入D/A,从而VOUT处于高阻状态。

当数据串行接口把CS拉至低电平时,转换时序开始允许SCLK工作并使VOUT 脱离高阻状态。

数据串
行接口将SCLK时钟序列传给SCLK,在SCLK的上升沿,16位串行数字输到DIN被锁入12位移位寄存器,其中高4位(MSB)移入DOUT寄存器,此时D/A以菊花链连接才能用到。


上升沿时,12位移位寄存器的数据进入DAC寄存器,从而更新DOUT,其12位数据的固定转换时间约25μs。

MAX531输入数据以16位为一个单元,因此需要两个写周期把数据存入DAC。

在上电时内部复位电路迫使DAC寄存器复位成000H。

当DAC在系统不用时,通过设置合适的代码使其功耗最小。

例如:在双极性模式带阻性负载时,把DAC代码设置为中间值800H。

如果无负载,把DAC设为000H,使REFOUT的内部电流最小。

此时,REFIN为高阻态,内部运算放大器工作电流为最小值。

3 硬件设计
如图4所示,在电力电源整流模块的DC/DC变换控制部分,输出电压采样信号、输出电流采样信号和电压调整控制信号通过PID调节器,发出控制信号到全桥移相PWM控制芯片UC3875的误差放大器的负端,此时UC3875发出相应的脉冲信号,经功率放大后控制IGBT的导通与截止,以决定高频变压器的通断状态,从而最终达到稳压目的。

这里MAX531作为单片机与PID调节器之间的D/A数模转换接口电路,以实现单片机对电源输出电压的精确调整功能。

表2为MAX531输入代码、输出电平和电源模块输出电压的对应关系表。

当单片机给D/A写入800H代码时,MAX531的输出(AOUT)为0V电压,整流模块输出(OUTPUT)220V直流电压;当写入的代码为FFFH时,AOUT为2.048V,OUTPUT为300V;当写入的代码为400H时,AOUT为-1.024V,OUTPUT为180V。

在图4中,MAX531的电源为±5V,采用增益为+1的双极性输出(见表1)。

这时数字从0至1的跳变电压为0.001V,满度跳变电压为±2.048V。

4 软件设计
整流模块的系统软件包括:变量采样,电压控制,功能控制(均流、限流、开关机、过压过流保护、风扇等),故障查询,与上位机通讯,键盘处理,液晶显示等程序,其中D/A转换部分的电压控制程序是关键,它的可靠性和控制精度是整流模块其它控制功能的必要前提,其汇编程序清单如下:
12位数模转换器MAX531在高频开关整流模块中的应用
发布:2011-06-08 | 作者: | 来源: caiminghao | 查看:555次 | 用户关注:
摘要:实现了一种全集成可变带宽中频宽带低通滤波器,讨论分析了跨导放大器-电容(OTA—C)连续时间型滤波器的结构、设计和具体实现,使用外部可编程电路对所设计滤波器带宽进行控制,并利用ADS软件进行电路设计和仿真验证。

仿真结果表明,该滤波器带宽的可调范围为1~26 MHz,阻带抑制率大于35 dB,带内波纹小于0.5 dB,采用1.8 V电源,TSMC 0.18μm CMOS工艺库仿真,功耗小于21 mW,频响曲线接近理想状态。

关键词:Butte
1引言
本公司研制的DZW02型220V系列整流模块,广泛应用于电力电源系统中。

通过全桥移相高频变换,采用高品质的D/A变换器——MAX531,解决了单片机与移相控制电路的接口问题,使整流模块的稳压精度达到≤0.1%的水平。

DZW02型整流模块的基本结构框图如图1所示。

它由主电路、PWM控制电路、监控电路和辅助保护电路组成。

其主电路由输入电网滤波电路、整流桥、有源功率因数校正(APFC)电路、DC/DC高频变换电路、输出整流滤波等电路组成。

这里着重讨论单片机与PWM控制之间的接口电路12位D/A转换器MAX531的应用。

2D/A转换器
MAX531是美信集成产品公司生产的12位串行数据接口数模转换器,采用“反向”R-2R的梯形电阻网络结构。

内置单电源CMOS运算放大器,其最大工作
电流仅为260μA,具有很好的电压偏移,增益和线性度。

内部运算放大器根据需要可配置成+1或+2的增益,也可作四象限乘法器。

21主要性能
主要性能如下:
——单/双工作电源;
——缓冲电压输出;
——内置2.048V电压基准;
——总不可调整误差(INL):±1/2LSB;
——灵活的输出电压范围:VSS~VDD;
——电源上电复位功能;
——具有菊花链连接的串行数据输出。

2.2管脚结构
MAX531采用14脚DIP封装,见图2,其引脚功能的详细说明见表1。

23工作原理
在芯片选择CS为高电平时,SCLK被禁止且DIN端的数据不能进入D/A,从而VOUT处于高阻状态。

当数据串行接口把CS拉至低电平时,转换时序开始允许SCLK工作并使VOUT脱离高阻状态。

数据串
图1整流模块原理框图
图2
图3
行接口将SCLK时钟序列传给SCLK,在SCLK的上升沿,16位串行数字输到DIN被锁入12位移位寄存器,其中高4位(MSB)移入DOUT寄存器,此时D/A以菊花链连接才能用到。

在CS上升沿时,12位移位寄存器的数据进入DAC寄存器,从而更新DOUT,其12位数据的固定转换时间约25μs。

MAX531输入数据以16位为一个单元,因此需要两个写周期把数据存入DAC。

在上电时内部复位电路迫使DAC寄存器复位成000H。

当DAC在系统不用时,通过设置合适的代码使其功耗最小。

例如:在双极性模式带阻性负载时,把DAC
代码设置为中间值800H。

如果无负载,把DAC设为000H,使REFOUT的内部电流最小。

此时,REFIN为高阻态,内部运算放大器工作电流为最小值。

MAX531的功耗低,可提供增益,增益可通过外引脚设置,输入模式也可通过引脚连接改变,可用于工业自动化控制电路、数字式电路、便携式数字测试仪等。

MAX531只需3根串行线与CPUCPU CPU也称为中央处理器,是电子计算机的主要设备之一。

其功能主要
是解释计算机指令以及处理计算机软件中的数据。

所谓的计算机的可编程性主要是指对CPU的编程。

CPU是计算机中的核心配件,只
有火柴盒那么大,几十张纸那么厚,但它却是一台计算机的运算核心和控制核心。

计算机中所有操作都由CPU负责读取指令,对指令译码并执行指令的核心部件。

CPU、内部存储器和输入/输出设备是电子计算机的三大核心部件。

[全文]
接口,当时钟频率为877kHz时,传送12位数据D/A转换输出只需<25μs建立时间。

向左转|向右转。

相关文档
最新文档