基于串行AD1544的设计报告文档格式.docx

上传人:b****5 文档编号:16961487 上传时间:2022-11-27 格式:DOCX 页数:12 大小:298.97KB
下载 相关 举报
基于串行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

第四章电路原理图………………………………………………..(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<

iom128v.h>

macros.h>

math.h>

#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)

{

//xxxx1000&

xxxx0001从高位输入,xxxx0001<

<

PORTB|=BIT(4);

//该位为1输出高电平给TLV1544

CLK_H;

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

}

else

PORTB&

=~BIT(4);

//该位为0输出低电平给TLV1544

//CLK上升沿输出有效

}

port<

=1;

for(i=0;

i<

6;

i++)//填充6个CLOCK,采样

for(i=0;

10;

i++)//十个CLK下降沿进行ad转换

delay

(1);

//等待转换结束

2;

i++)//取D9,D8位数据,在CS_L低有效

ah<

if(PINB&

BIT(5))ah+=0x01;

//上升沿读数据,

8;

i++)//取D7~D0数据

al<

BIT(5))al+=0x01;

ad=(uint)ah;

ad<

=8;

ad+=(uint)al;

//得到AD值

returnad;

//返回10位ad采样数据

}

voiddelay(inti)

{intj;

for(;

i>

0;

i--)

for(j=0;

j<

N;

j++);

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

{

write_dat(table[m[0]]);

delay(5);

write_dat(table[10]);

//显示"

."

write_dat(table[m[1]]);

write_dat(table[m[2]]);

write_dat(table[m[3]]);

write_dat(table[m[4]]);

write_dat(table[11]);

V"

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);

//表示传入的是命令

=~BIT

(1);

//表示写操作

PORTD=com;

//传入命令数据

PORT|=BIT

(2);

//打开使能端

//延时一毫秒

=~BIT

(2);

//关闭使能端

voidwrite_dat(uchardat)

PORT|=BIT(0);

//表示传入的是数据

PORTD=dat;

//传入数字数据

void_1602_init()

DDRD=0XFF;

//C端口为输出,传数据

DDR|=BIT(0);

//设置为输出,分别控制数据/命令、读/写、使能开/关

DDR|=BIT

(1);

DDR|=BIT

(2);

//使能端关闭

write_com(0X38);

//显示模式

write_com(0X01);

//清除屏幕

write_com(0X0C);

//0x0c光标不显示,不闪烁

write_com(0X06);

//写一个字符,地址加一,光标加一,整屏不左移00001100

write_com(0X80+0X00);

//写入数据的起始地址,即在液晶中显示位置,即从屏幕最右开始

voidmain()

uintj=0;

floatresults=0;

floata=0;

_1602_init();

//初始化1602

while

(1)

j=0;

results=0;

ad=0;

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中

//1602中显示位置

show(disp1);

//显示

}

.

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

当前位置:首页 > 工程科技 > 建筑土木

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

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