标题: 单片机比例电压变换器程序问题 电压到3.95就无法继续增加了? [打印本页]

作者: mhj983    时间: 2023-6-5 17:01
标题: 单片机比例电压变换器程序问题 电压到3.95就无法继续增加了?
要求:利用A/D和D/A实现将A/D的输入电压反向变换的功能,即A/D的输入电压从0~+5V变化时,D/A的输出电压相应的从+5V~0V变化。
控制功能:将单片机实验箱上的电位器W1产生0~5V电压输入到ADC0809的通道0,利用数字万用表测量DAC0832输出的电压,看其是否随ADC0809的输入电压反向变化。利用74HC4040将8MHz晶振产生的脉冲信号十六分频后做为ADC0809的时钟信号。
使用的主要元器件:89C51、11.0592MHz晶振、74LS373、74LS138、8MHz晶振、74HC04、74HC4040、ADC0809、DAC0832、LM741、10k电位器W1等。

结果验证:①用示波器检查ADC0809的时钟频率是否为500kHz。②旋动电位器W1产生0~+5V的电压,用数字万用表测量D/A的输出是否从+5→0V变化。③使W1的输出电压从0V开始,以0.5V为增量,测量D/A的输出电压并记录。试分析误差产生的原因。
程序如下:
#include <reg51.h>
#include <absacc.h>
#define uchar unsigned char
#define DAC0832 XBYTE[0x7FFF]
uchar temp,i,a;
sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
sbit CLK=P3^7;
uchar getdata=0x0000;
void main(void)
{
        ET0=1;
        EA=1;
        TMOD=0x02;
        TH0=246;
        TL0=246;
        TR0=1;
        while(1)
        {
                ST=0;
                ST=1;
                ST=0;
                while(EOC==0){;}
                OE=1;
                getdata=P0;
                OE=0;
                temp=getdata;
                P1=temp;
                DAC0832=P1;
                }          }
void T0X(void) interrupt 1 using 0
{
        CLK=~CLK;
}

现在遇到的问题是电压到3.95就无法继续增加了

作者: mhj983    时间: 2023-6-5 17:03
现在是运放那里5V的电压调成10就差不多,可是这明显是有问题的
作者: yzwzfyz    时间: 2023-6-6 15:49
输出的电压范围,是受运放的电源电压的限制的。
举例来说,运放电压是10V,你想让它输出12V,是办不到的。
同理,你需要输出5V,运放电压至少为……,明白了吗?
要学会看元件手册,如果你读通了运放手册,就明白了。
作者: coody_sz    时间: 2023-6-6 18:06
用了运放,那么仅仅用运放就可以实现了,带偏置的反相输出。
作者: Hephaestus    时间: 2023-6-7 00:01
有一种运放叫R2R运放。
作者: 4uioo    时间: 2024-12-21 14:58
可以问一下这个的运行结果是什么样的吗
作者: 4uioo    时间: 2024-12-22 02:32
mhj983 发表于 2023-6-5 17:03
现在是运放那里5V的电压调成10就差不多,可是这明显是有问题的

你好  我可以问一下这个仿真出来的结果吗




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1