基于串行AD1544的设计报告.docx

上传人:b****6 文档编号:8892638 上传时间:2023-02-02 格式:DOCX 页数:12 大小:298.84KB
下载 相关 举报
基于串行AD1544的设计报告.docx_第1页
第1页 / 共12页
基于串行AD1544的设计报告.docx_第2页
第2页 / 共12页
基于串行AD1544的设计报告.docx_第3页
第3页 / 共12页
基于串行AD1544的设计报告.docx_第4页
第4页 / 共12页
基于串行AD1544的设计报告.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

基于串行AD1544的设计报告.docx

《基于串行AD1544的设计报告.docx》由会员分享,可在线阅读,更多相关《基于串行AD1544的设计报告.docx(12页珍藏版)》请在冰豆网上搜索。

基于串行AD1544的设计报告.docx

基于串行AD1544的设计报告

基于串行ADTLV1544的设计

摘要

本文论述了串行ADTLV1544的工作时序、硬件设计与应用,并通过AVR单片机Atmega128显示TLV1544的采集结果,实现测量正弦交流信号的有效值。

本文着重讨论TLV1544的程序控制部分及硬件电路。

关键词

TLV1544、AVR单片机、正弦交流信号有效值

TheDesignOfSerialAD

——BasedontheTLV1544

Abstract

ThispaperdiscussestheTLV1544basedonserialADtheprogramdesignandapplication,andthroughtheAVRAtmega128single-chipmicrocomputerdisplayTLV1544collectionresults,realizetheeffectivevalueofmeasurementsinusoidalalternatingsignal.ThispaperfocusesonthediscussionoftheTLV1544programcontrolpartandthehardwarecircuit.

 

Keywords

TLV1544,AVRmicrocontroller,sinusoidalRMSacsignal

 

目录

第一章初步要求…………………………………………………..(3)

1.1设计任务……………………………………………………..............(3)

1.2总体方案设计………………………………………………..............(3)

第二章硬件电路的设计………………………………………....(3)

2.1硬件电路的设计……………………………………..........................(3)

第三章TLV1544程序设计……………..........................................(5)

3.1TLV1544引脚说明………………………………………………..…(5)

3.2TLV1544的工作模式及时序………………………………………..(6)

第四章电路原理图………………………………………………..(8)

第五章源程序……………………………………………………..(9)

 

第一章设计概述

1.1设计任务

设计要求如下:

1输入交流正弦信号

范围内;

2用TLV1544采集正弦信号并转换

3在atmega128最小系统上显示其有效值。

1.2总体方案设计

 

第二章硬件电路设计

 

2.1硬件电路设计

由于输入信号是未知的正弦量,而TLV1544的模拟输入范围是0~5.5V,所以要有缩放电路将xV电压缩放到0~5.5V范围之内,本设计中缩放电路采用NE5532运放设计,因为是线性电路,根据虚短U2=U3,

.通过调节R2的大小实现输入信号的缩放。

基本电路如下

由于输入信号有负电压,缩放后为-2.75V~+2.75V,而TLV1544只能处理0V~VCC的正电压,所以缩放后还要抬高其电位的电路,使模拟电压范围为0V~5.5V,通过调节R4的大小以抬高其电位,电路如下

 

第三章TLV1544设计

3.1TLV1544引脚说明

TLV1544是一款10位4通道的串行AD转换器,单电源供电,模拟电压输入范围是0V到VCC,即0V~5.5V,其引脚分布如上

DATAOUT数据输出端,在CS为低电平时有效,当时钟不倒置时,INVCLK接VCC时,I/OCLK每一个上升沿读数据,当CS为高电平时,DATAOUT呈高阻态;DATAIN串行数据输入端,即通道选择,也是CS为低电平时有效;I/OCLK时钟输入端,CS为低电平时有效;EOC转换结束标志,本设计中不使用;VCC接+5V~5.5V电源;A0~A3是外部四个模拟通道输入;CSTART采样/转换控制,从高到低电平时采样,从低道高电平时保持采样并开始转换;GND接地端;INVCLK倒置时钟,低电平有效,当不使用时接VCC;FS是DSP同步输入,当与单片机接口时,FS接VCC;Vref-和Vref+基准电压输入,这里Vref-接地,Vref+接VCC;CS片选端,进行计数器复位和控制,从高到低电平时,使能I/OCLK、DATAOUT、DATAIN。

 

3.2TLV1544工作时序

TLV1544工作时序如下图。

本设计是INVCLK接VCC,没有使用倒时钟的时序。

其工作过程分为两个周期:

访问周期和采样周期。

工作状态由CS使能或禁止,工作时,CS必须置低电平,CS置高电平时,I/OCLK、DATAIN、被禁止,DATAOUT呈高阻态。

当CS变低时,CLK、DATAIN、使能,DATAOUT有效。

随后,单片机向DATAIN提供4位通道地址,控制4路模拟信号输入与3个内部测试电压,选一路送到采样保持电路。

同时,根据I/OCLK的时序,单片机从DATAOUT取出前一次的10位转换结果。

TLV1544的I/OCLK接受10个时钟序列,前四个时钟用于装载通道地址,后六个用于采样,上升沿有效。

然后,CS置高电平,禁止DATAIN、CLK、DATAOUT高阻态,再CS置低,输入下10个有效的时钟。

由于没有用到转换结束标志EOC,本设计采用程序延时方式直接读取数据,本设计A0通道输入,FS、INVCLK、CSTART接VCC;CS、DATAOUT、DATAIN、IOCLK接单片机PB4~PB7口;

延时一段时间后,CS变低,取出10位数据,高位在前面,先取高两位,INVCLK接VCC时,I/OCLK的上升沿读数据,然后取出低8位数据。

第四章电路原理图

第五章源程序

#include

#include

#include

#defineN1141

#defineucharunsignedchar

#defineuintunsignedint

#defineulongunsignedlong

#defineCS_LPORTB&=~BIT(6)

#defineCS_HPORTB|=BIT(6)

#defineCLK_LPORTB&=~BIT(3)

#defineCLK_HPORTB|=BIT(3)

#definePORTPORTC

#defineDDRDDRC

uchartable[]="0123456789.V";

uintdisp1[5]={0,};

uintdisp3[5]={0,};

uintdisp2[5]={0,};

uintdisp[512]={0,};

ulongad=0;

floatmin=0,max=0;

uintread1544(ucharport)//从TLC1543读取采样值,形参port是采样的通道号

{

uintad;

uinti;

ucharal=0,ah=0;

DDRB|=BIT(4)+BIT(3)+BIT(6);

DDRB&=~BIT(5);

CS_H;

CLK_L;

CS_L;

//port*=2;

for(i=0;i<4;i++)//把通道号打入1544

{

if((port&0x08)==0x08)

{

CLK_L;//xxxx1000&xxxx0001从高位输入,xxxx0001<<

PORTB|=BIT(4);//该位为1输出高电平给TLV1544

CLK_H;//CLK上升沿输出有效,INVCLK=1

}

else

{

CLK_L;

PORTB&=~BIT(4);//该位为0输出低电平给TLV1544

CLK_H;//CLK上升沿输出有效

}

port<<=1;

}

for(i=0;i<6;i++)//填充6个CLOCK,采样

{

CLK_L;

CLK_H;

}

for(i=0;i<10;i++)//十个CLK下降沿进行ad转换

{

CLK_H;

CLK_L;

}

CS_H;

delay

(1);//等待转换结束

CS_L;

for(i=0;i<2;i++)//取D9,D8位数据,在CS_L低有效

{

CLK_H;

ah<<=1;

if(PINB&BIT(5))ah+=0x01;//上升沿读数据,

CLK_L;

}

for(i=0;i<8;i++)//取D7~D0数据

{

CLK_H;

al<<=1;

if(PINB&BIT(5))al+=0x01;

CLK_L;

}

CS_H;

ad=(uint)ah;

ad<<=8;

ad+=(uint)al;//得到AD值

returnad;//返回10位ad采样数据

}

voiddelay(inti)

{intj;

for(;i>0;i--)

for(j=0;j

}

show(uint*m)//显示m所指的数组

{

write_dat(table[m[0]]);

delay(5);

write_dat(table[10]);//显示"."

delay(5);

write_dat(table[m[1]]);

delay(5);

write_dat(table[m[2]]);

delay(5);

write_dat(table[m[3]]);

delay(5);

write_dat(table[m[4]]);

delay(5);

write_dat(table[11]);//显示"V"

delay(5);

}

voidchu(uint*n,float*m)//将数离散化储存在数组中

{

n[0]=((uint)((*m)*10000)/10000);

n[1]=((uint)((*m)*10000)/1000)%10;

n[2]=((uint)((*m)*10000)/100)%10;

n[3]=((uint)((*m)*10000)/10)%10;

n[4]=((uint)((*m)*10000))%10;

}

voidwrite_com(ucharcom)

{

PORT&=~BIT(0);//表示传入的是命令

PORT&=~BIT

(1);//表示写操作

PORTD=com;//传入命令数据

PORT|=BIT

(2);//打开使能端

delay

(1);//延时一毫秒

PORT&=~BIT

(2);//关闭使能端

}

voidwrite_dat(uchardat)

{

PORT|=BIT(0);//表示传入的是数据

PORT&=~BIT

(1);//表示写操作

PORTD=dat;//传入数字数据

PORT|=BIT

(2);//打开使能端

delay

(1);//延时一毫秒

PORT&=~BIT

(2);//关闭使能端

}

void_1602_init()

{

DDRD=0XFF;//C端口为输出,传数据

DDR|=BIT(0);//设置为输出,分别控制数据/命令、读/写、使能开/关

DDR|=BIT

(1);

DDR|=BIT

(2);

PORT&=~BIT

(2);//使能端关闭

write_com(0X38);//显示模式

delay(5);

write_com(0X01);//清除屏幕

delay(5);

write_com(0X0C);//0x0c光标不显示,不闪烁

delay(5);

write_com(0X06);//写一个字符,地址加一,光标加一,整屏不左移00001100

delay(5);

write_com(0X80+0X00);//写入数据的起始地址,即在液晶中显示位置,即从屏幕最右开始

delay(5);

}

voidmain()

{

uintj=0;

floatresults=0;

floata=0;

_1602_init();//初始化1602

while

(1)

{

j=0;results=0;ad=0;

for(j=0;j<512;j++)

{

disp[j]=read1544(0);//将AD转换的结果存入disp[j]

ad+=(disp[j]*disp[j]);

}

a=(sqrt((ad/512.0)*0.00488));//求有效值

chu(disp1,&a);//离散化,存disp1中

write_com(0X80+0X00);//1602中显示位置

delay(5);

show(disp1);//显示

}

}

.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机软件及应用

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1