急问:用ad1674和8051的一个ad转换的程序,具体程序如下:

急问:用ad1674和8051的一个ad转换的程序,具体程序如下:,第1张

这个是使用外部RAM总线形式来通讯陆知的(最好把电路图贴上来)

CTRL _at_ 0x2FFF//这个代森早表对外部0x2FFF地址进行 *** 作

ADSEL _at_ 0x4FFF//这个代表对外部0x4FFF地址进行 *** 作早春消

通过硬件的总线协议 提高通讯速度

采用OP07组成的二阶带阻滤波器的阻带范围为40~60 Hz,其电路如图2所示。带阻滤波器的性能参数有中心频率ω0或f0,带宽BW和品质因数Q。Q值越高,阻带越窄,陷波效果越好。

功率放大电路往往要求其驱动负载的能力较强,从能量控制和转换的角度来看,功率放大电路与其它放大电路在本质上没有根本的区别,只是功放既不是单纯追求输出高电压,也不是单纯追求输出大电流,而是追求在电源电压确定的情况下,输出尽可能大的功率。

本电路采用两个MOS管构成橡旦的功率放大电路,其电路如图4所示。此电路分别采用一个N沟道和一个P沟道场效应管对接而成,其中RP2和RP3为偏置电阻,用来调节电路的静态工作点。特征频率fT放大电路上限频率fH的关系为:fT≈fhβh,系统阶跃相应的上升时间tr与放大电路上限频率的关系为:trfh=0.35。

对于OCL放大器来说,一般有:PTM≈0.2POM,其中PIM为单管的最大管耗,POM为最大不失真输出管耗梁宏扰。根据计算,并考虑到项目要求,本设计选用IRF950和IRF50来实现功率放大。 此工作可由单片机内部的10位AD转换器完成,但实验发现,单片机的10位AD芯片的处理效果不是很好。因此本设计采用了两个AD转换芯片来对负载输出的信号进行转换,并使用单片机控制计算,然后送入液晶显示其功率和效率。

AD1674是一片高速12位逐次比较型A/D转换器,该芯片内置双极性电路构成的混合集成转换器,具有外接元件少,功耗低,精度高等特点,并具有自动校零和自动极性转换功能,故只需外接少量的电阻和电容元件即可构成一个完整的A/D转换器。AD8326是TI公司推绝竖出的16位高速模数转换器,其转换速度快,线性度好,精度高。AD8326和A1674的电路连接图分别如图5和图6所示。 本电路采用12864液晶来实时显示输出的功率、直流电源供给的功率和整机效率。该液晶具有屏幕反应速度快、对比度高、功耗低等优点。可以实现友好的人机交互。为了简化电路,本设计采用串口连接。并在单片机的控制下,按照要求的格式显示接收到的数据和字符信息。图7为液晶显示电路的连接图。其中D0~D7为数据口,R/W为液晶读写信号,E是使能端。

由于本系统是低频正弦信号的功率放大,要求能测量并显示输出功率、整机效率等信息,所以要用到AD转换。AD芯片测量的交流信号,所以,测量的电压数据进行比较,以获得最大电压值,此值即为正弦信号的最大值。而要想得到正弦信号的有效值,就要对最大值进行处理,从而获得有效值。这样,就可以将电源的输出功率和供给功率,根据欧姆定律计算出其数值,并将测得的数据用液晶适时的显示出来。

因此,本系统软件实现的功能应当可以实现对正弦信号有效值的测量;同时能够通过液晶准确显示输出功率和系统供给功率和整机效率。

图8所示是本系统软件的设计流程图。

热敏电阻测温度(程序+仿真)

#include<reg52.h>

#include<intrins.h>

#include<math.h>

typedef unsignedchar uchar

typedef unsignedint uint

sbit CE = P1^1

sbit STS=P1^0

sbit RC=P1^4

sbit A0=P1^3

sbit CS=P1^2

sbit RS = P1^5

sbit RW = P1^6

sbit EN = P1^7

void delay_ms(uintz)

{

uint x,y

for(x=zx>0x--)

for(y=110y>0y--)

}

uintAD1674_Read(void)

{

uint temp

uchar temp1,temp2

CS=1//片选信号

CE=0//初始化,关闭数据采集

CS=0

A0=0

RC=0

CE=1//CE=1,CS=0,RC=0,A0=0启动12位温度转换

_nop_()

while(STS==1) //等待数据采集结束

CE=0//芯片使能关闭

RC=1

A0=0

CE=1//CE=1,CS=0,RC=1,12/8=1,A0=0 允许高八位数据并行输出

_nop_()

temp1=P0//读取转换结果的高八位

CE=0//芯片使能关闭

RC=1

A0=1

CE=1//CE=1,CS=0,RC=1,12/8=0,A0=1 允许低四位数据 并行输出纯好

_nop_()

temp2=P0 //读做启铅取转换结果的第四位

temp=((temp1<<4)|(temp2&0X0F)) //高位和低位合成实际温度,temp2为PO口的高四位

return (temp) //还回转换结果,右移四位是因为temp2为P0口的高四位

}

/**

* 写数据

*/

voidw_dat(unsigned char dat)

{

RS = 1

//EN = 0

P2 = dat

delay_ms(5)

RW = 0

EN = 1

EN = 0

}

/**

* 写命令

*/

voidw_cmd(unsigned char cmd)

{

RS = 0

// EN = 0

P2 = cmd

delay_ms(5)

RW = 0

EN = 1

EN = 0

}

/**

* 发送字符串到LCD

*/旁睁

voidw_string(unsigned char addr_start, unsigned char *p)

{

unsigned char *pp

pp = p

w_cmd(addr_start)

while (*pp != '\0')

{

w_dat(*pp++)

}

}

/**

* 初始化1602

*/

voidInit_LCD1602(void)

{

EN = 0

w_cmd(0x38) // 16*2显示,5*7点阵,8位数据接口

w_cmd(0x0C) // 显示器开、光标开、光标允许闪烁

w_cmd(0x06) // 文字不动,光标自动右移

w_cmd(0x01) // 清屏

}

void process(uintdate,uchar add)

{

uchar A[7]

A[0]=date/1000%10+'0'

A[1]=date/100%10+'0'

A[2]='.'

A[3]=date/10%10+'0'

A[4]=date%10+'0'

A[5]='C'

w_string(add,A)

}

void main()

{

uintVOL[25]={343,339,332,328,320,316,312,304,300,292,289,285,277,273,265,261,257,250,246,242,234,230,226,222,218}

uintTemper[25]={100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200,2300,2400,2500}

uchar i,flag=0

uint result,temp1,temp2

float res

Init_LCD1602()

w_string(0x80,"Temper:")

// w_string(0xC0,word2)

while (1)

{

res=(float)(AD1674_Read())

result=(uint)((res/2048.0-1.0)*500.0)

temp1=abs(result-VOL[0])

for(i=1i<25i++)

{

temp2=abs(result-VOL)

if(temp1>=temp2)

{

temp1=temp2

flag=i

}

}

process(Temper[flag],0x80+7)

//process(result,0xc0)

//delay_ms(1000)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12563212.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存