软件实现的滞回比较器,各位看对不?

[复制链接]
3452|4
 楼主| snakeemail 发表于 2009-12-15 23:20 | 显示全部楼层 |阅读模式
本帖最后由 snakeemail 于 2009-12-15 23:23 编辑

1.当电流在0-300,风扇的PWM为0,当电流大于300的时候,风扇的PWM为51.这样当电流在300附件变化时,风扇的PWM也来回变化。现在用软件实现的滞回比较器实现。
2.  a.0-300,PWM=0 ,  b200-1000,PWM=51, C: 900-2000 ,PWM=100 D:电流>1900,PWM=200

void ZhiHui(unsigned int Data)
{
        static unsigned int a = 0;
        static unsigned int b = 300;
        unsigned int OCR0A = 0;
       
        if((Data>a) && (Data <=b))
                return;


        if((Data>0) && (Data<=300))        {
                OCR0A = 0;
                a = 0;
                b = 300;
        }
        else if((Data>200) && (Data<=1000))        {
                OCR0A = 51;
                a = 200;
                b = 1000;
        }
        else if((Data>900) && (Data<=2000))        {
                OCR0A = 100;
                a = 900;
                Data = 2000;
        }
        else{
                OCR0A = 200;
                a = 1900;
                b = 65535;
        }

}
duojinian 发表于 2009-12-16 11:55 | 显示全部楼层
else if 组合没有实现“滞回”
也就是说变量升高路径和降低路径应该不同才对。
原野之狼 发表于 2009-12-16 12:01 | 显示全部楼层
从程序里没有看见有 去和回 两个方向
所以实现不了的
建议采用状态机的方法来实现
yixiao2000 发表于 2009-12-16 15:02 | 显示全部楼层
应记录上次状态来判断变化方向
 楼主| snakeemail 发表于 2009-12-16 21:58 | 显示全部楼层
1.我保留了上次的范围呀?a,和b就是上次的范围呀。程序一进去就检查是否还是上次的范围内,超出了才改范围。

2.用状态机实现的思路是不是这样。
首先判断变化方向,然后把电流放入范围比较一遍,如果电流落入

记录电流变化方向
|
看电流落入哪个范围--------->如果只落入有一个范围,pwm可确定
|
如果落入两个范围,低范围和高范围----->电流向上变化,如果电流大于低范围的上限,电流落入高范围判断
|
电流向下变化,如果电流小于高范围的下限,电流落入低范围判断
您需要登录后才可以回帖 登录 | 注册

本版积分规则

547

主题

1909

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部