打印

求滞回比较器的软件算法实施

[复制链接]
4699|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
通过单片机去采集一个传感器的AD电压,当传感器的电压(AD值)是从0V上升到5V的过程中,在4.2V以下的这段为逻辑on,为1;当传感器的电压(AD值)是从5V下降到0V的过程中,在3.2V以上的这段为逻辑off,也就是说3.2V到4.2V为滞回状态。请问软件上如何实现,个人的观点时,采集AD电压时保留上次的AD值,然后与当前的AD值比较,判断是否是在上升阶段还是下降阶段,这方法是否有bug?请高手指点,最好可以有个算法代码

相关帖子

沙发
frlop| | 2013-11-18 15:53 | 只看该作者
本帖最后由 frlop 于 2013-11-18 15:56 编辑
typedef struct{
        int        Val;
        int        LastVal;
        unsigned char RiseFlag;
        unsigned char DropFlag;
} Hys_Typ;

Hys_Typ Hys;

unsigned char  Hysteresis()
{
        unsigned char dat;
        
        Hys.Val = ADCRead();        
        
        if((Hys.Val > 32) && (Hys.LastVal < 32))
                Hys.RiseFlag = 1;
        if((Hys.Val < 42) && (Hys.LastVal > 42))
                Hys.DropFlag = 1;
               
        if(Hys.Val < 32)                 
        {        
                dat = 1;
                Hys.RiseFlag = Hys.DropFlag = 0;
        }
        else if(Hys.Val <= 42)
        {
                if(Hys.RiseFlag == 1)           dat = 1;
                if(Hys.DropFlag == 1)         dat = 0;
        }
        else
        {                             
                dat = 0;        
                Hys.RiseFlag = Hys.DropFlag = 0;               
        }
        
        Hys.LastVal = Hys.Val;        
        
        return dat;
}
没验证过,仅供参考。

使用特权

评论回复
板凳
yinlitansuo| | 2013-11-18 15:59 | 只看该作者
二楼有点牛!

使用特权

评论回复
地板
coody| | 2013-11-18 16:07 | 只看该作者
我用Excel来计算的

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
zmw809154465 + 1 赞一个!
5
ayb_ice| | 2013-11-18 16:12 | 只看该作者
高于或低于门槛,输出状态确定

在中间范围,保持上次状态

完毕

使用特权

评论回复
评分
参与人数 1威望 +4 收起 理由
frlop + 4 正解。
6
frlop| | 2013-11-18 16:40 | 只看该作者
ayb_ice 发表于 2013-11-18 16:12
高于或低于门槛,输出状态确定

在中间范围,保持上次状态

正解
我智商明显不足。
当反面教材了。

使用特权

评论回复
7
ayb_ice| | 2013-11-18 17:08 | 只看该作者
frlop 发表于 2013-11-18 16:40
正解
我智商明显不足。
当反面教材了。

只能说明你没有真正理解这个触发器

使用特权

评论回复
8
frlop| | 2013-11-18 18:45 | 只看该作者
ayb_ice 发表于 2013-11-18 17:08
只能说明你没有真正理解这个触发器

学习了。

使用特权

评论回复
9
tergy2012| | 2013-11-19 11:18 | 只看该作者
学习一下先

使用特权

评论回复
10
zmw809154465|  楼主 | 2013-11-19 11:50 | 只看该作者
其实就是这么简单的一个程序,想太多了:dizzy:

使用特权

评论回复
11
zmw809154465|  楼主 | 2013-11-19 11:53 | 只看该作者
ad_data = ADRead();
if(ad_data < 3.2)
{
   out = 1;
}
if(ad_data > 4.2)
{
   out = 0;
}

使用特权

评论回复
12
zoulinqi110| | 2015-5-6 17:20 | 只看该作者
开机时值在这个区间怎么处理?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

41

帖子

3

粉丝