51单片机输出电压随输入电压变化,如何实现

用51单片机测量一个随时波动的电压,当电压波动的时候,51输出另一个值。输出的电压随输入的电压变化而变化,被测量的电压波动范围为:1V-1.7V,要求对应输出的为:0.35V-0V
怎么实现啊

以下是单片机实践团为您解答:

1、对于问题解决应该采取最简单有效的方法,说一下我的观点:对于大部分网友采用AD配合DA来实现,个人觉得是多此一举。如果是保留采用AD来采集的话,我们大可以使用定时器控制输出频率可变的方波至外界电阻上(PWM实现DA输出的方法,这里采用定时器模拟PWM输出)实现可变的电压输出。

2、问题很直白,我们这样来看,1.7-1=0.7 0.7/2=0.35
不知道您有没有使用过AT89C2051这个片子,比较早的一款51片子,看一下他的P1.0和P1.1的用法,内部集成模拟比较器(可配合程序实现你需要的)

3、这样的功能也可以直接使用模拟电路来实现,说下思路:做一个1.7V的基准电压,通过一个减法器也就是基准电压-被测电压。减法器输出接增益为0.5的放大电路即可实现转换。

4、对于你的信号不知道您需要用来做什么,考虑现实中的细节选取最好的方案。

5、常在线,Hi我。祝您成功
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-08-27
硬件部分别人已经说的很清楚了,我就重点说明下软件部分吧。

由于输入的电压范围与输出的电压范围不一样,所以要用到量程转换。

即让1V输入对应的输出为0v,当输入为1.7v的时候对应的输出为0.35v

设输入电压为x,则对应的输出电压 y=(x - 1)*0.35/(1.7-1)

最简单的硬件电路莫过于用一个内部带AD和DA的单片机了,AD输入引脚接信号输入端,DA端口输出的信号用示波器即可以观察到。

程序流程为:初始化AD和DA,进入主循环后,先启动AD采样,并等待AD采样完成标志置位,然后立即将采样结果送入DA寄存器。
第2个回答  2010-08-27
用51实现是可以实现,不过麻烦一点,这个过程设计到AD/DA转化,整个过程分2步。

第一步AD转换,选择带AD转换的单片机,比如STC12C5201AD等或者使用普通单片机加ADC0804。此时可以把外部输入的

电压转化为数字信号。

第二步DA转换,使用单片机加DAC0832可以把数字信号转换为电流,在再外面路加一个运放,就可以把电流转换为电

压。

给你一段自己改写的STC12C5201AD转换的一部分子程序,其他程序可以参考51单片机C语言教程,上面介绍的很详细。

希望对你有帮助。

程序:

uint get_AD_result()

{
uchar AD_FLAG=0;

P1ASF=0x80;

ADC_CONTR=0xE7;

delay(1);

ADC_CONTR|=0x08;

AD_FLAG=0;

while(AD_FLAG==0)
{
AD_FLAG=(ADC_CONTR&0x10);
}
ADC_CONTR&=0xF7;

return(ADC_RES);
}

原理很明确,过程很复杂;只要坚持住,一定会成功!
第3个回答  2010-08-25
有现成的AD/DA接口呀
第4个回答  2010-08-25
用ADC8032+51单片机+外围电路就可以实现了,可以来找找我帮忙!
相似回答