社区导航

 

搜索
查看: 6770|回复: 11

[讨论] 在单片机中实现滞回比较器算法

[复制链接]

208

TA的帖子

0

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2009-11-28 21:18 | 显示全部楼层 |阅读模式
可能先前的题目表达的不是很清楚,就是想用滞回比较器思想,实现高灵敏度的控制,或者就是滤波思想,PID思想。

不太清楚这种思想是否已经包含在滤波思想和PID思想中。

想用单片机中采用状态机的方法实现该算法,不知道合适否,还有这种算法思想是否实际意义比较大,或者这种方法可以用简单的容限比较的方法就可以实现,没有什么意义。


以上,只是一个想法,思绪有点模糊,想请高手给予指导意见,感激不尽!
此帖出自单片机论坛

208

TA的帖子

0

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

 楼主| 发表于 2009-11-28 22:20 | 显示全部楼层

在单片机中实现滞回比较器算法

自己顶一下!

回复

使用道具 举报

208

TA的帖子

0

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

 楼主| 发表于 2009-12-6 23:05 | 显示全部楼层

单片机中实现滞回比较器算法

以下是我用常用的思维写的消除抖动的程序段,就是不知道编成滞回比较的效果怎么样,是不是和这差不了多少
/*******************************************
函数名称: MachineContrl()
功    能: 外围控制程序
参    数: 无
返回值  : 无
********************************************/
void MachineContrl(void)
{
  unsigned int NewADdata;
  NewADdata=GetADdata();
  /*设置一定的值域范围,以防止继电器的来回抖动*/
  if(NewADdata>ADdata)
  {
   if(NewADdata-ADdata>SensityValue)//新采集的值超过设定的灵敏度
    ADdata=NewADdata;         //将新值赋给当前存储AD采集值的变量
   else
        ADdata=ADdata;            //当前值保持不变
  }
  else
  {
   if(ADdata-NewADdata>SensityValue)
    ADdata=NewADdata;
   else
    ADdata=ADdata;
  }
  if((ADdata>>2)>SetValue)          //超过设定的值
   RELAY_PORT&=~(1<   else
   RELAY_PORT|=(1< }

回复

使用道具 举报

169

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2009-12-7 08:54 | 显示全部楼层

头一次听说这个算法,有点晕

我觉得你要的实际是2个门槛值,比如:8 ,10当输入量高于10继电器动作,当输入量低于8继电器返回
这样就不能用if ();else 来解决,需要用if();else if()
if((ADdata>>2)>10)          //超过设定的值
   RELAY_PORT&=~(1<   else if((ADdata>>2)<8)  
   RELAY_PORT|=(1<
*我的EMAIL:     sunke9@qq.com  
*我的博客http://blog.ednchina.com/sunke9/
*我网店:https://sunke9.taobao.com/
承接:电子、自动控制产品设计开发;单片机、ARM编程。

回复

使用道具 举报

581

TA的帖子

0

TA的资源

五彩晶圆(初级)

Rank: 7Rank: 7Rank: 7

发表于 2009-12-7 12:38 | 显示全部楼层
感觉就是做个去抖动呢?是这个意思?还是我理解错误

回复

使用道具 举报

96

TA的帖子

0

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2009-12-7 16:44 | 显示全部楼层
如果你是老师,你整下,没问题,我是技术苦力,实话实说,这东西这东西我还真看不出有什么市场运用价值,

回复

使用道具 举报

208

TA的帖子

0

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

 楼主| 发表于 2009-12-10 14:06 | 显示全部楼层

回复4楼

我当时一下子钻进死胡同了,把继电器的状态也作为考虑了,我当时在想:继电器2个状态,判定的值域有3个,这样的话从状态角度考虑就有6种状态,只有两个状态我是需要的。从状态的完整性考虑,每个状态都需要考虑。当时分析时状态可能没有合并好。基本功不行,基本算述不过关。

我当时把你8
你用if ,else if 就是把这在个值域中的继电器状态不处理,一样起到了保持的作用。
多谢指点!!!帮我理清思路。

回复

使用道具 举报

208

TA的帖子

0

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

 楼主| 发表于 2009-12-10 14:10 | 显示全部楼层

回复以上所有楼的

这个只是本人在编程时,出现了思绪混乱,自己钻进死胡同,结果把自己给弄糊涂了,发帖出来是想请高手帮帮理一下思路。

有的时候在编程序真的回钻死胡同的,结果把自己的思路都弄混了。

感谢以上回帖的好心人,其实就是很简单的东西,一旦糊涂了,就乱了,请不要见笑啊!

点评

这个跟程序无关,出发点就不成立.  详情 回复 发表于 2014-8-30 18:12

回复

使用道具 举报

3

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2014-8-30 10:04 | 显示全部楼层
在空调控制系统中,压缩机的控制就是这种原理。但就是要用到上一次的状态。特别在错误状态恢复中。

回复

使用道具 举报

3599

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2014-8-30 18:10 | 显示全部楼层
你说的pid,滤波,都不是提高灵敏度的.
6楼说的是,搞点算法蒙人还可以.

回复

使用道具 举报

3599

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2014-8-30 18:12 | 显示全部楼层
gsy 发表于 2009-12-10 14:10
这个只是本人在编程时,出现了思绪混乱,自己钻进死胡同,结果把自己给弄糊涂了,发帖出来是想请高手帮帮理 ...

这个跟程序无关,出发点就不成立.

回复

使用道具 举报

1

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2016-11-10 16:25 | 显示全部楼层
gsy 发表于 2009-12-6 23:05
以下是我用常用的思维写的消除抖动的程序段,就是不知道编成滞回比较的效果怎么样,是不是和这差不了多少
...

楼主,不知道您还有这份程序没有?我现在在帮老师做这方面的工作,我想看看您当初编的全部程序,小生将不胜感激。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 1/7 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-5-30 16:57 , Processed in 0.360295 second(s), 32 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表