智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 12912|回复: 3
打印 上一主题 下一主题

电磁组跪求归一化处理方法

[复制链接]

1

主题

1

帖子

0

精华

注册会员

Rank: 2

积分
71
威望
47
贡献
16
兑换币
16
注册时间
2016-9-15
在线时间
4 小时
毕业学校
黑龙江科技大学
跳转到指定楼层
1#
发表于 2016-10-13 10:32:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
电磁组的电感才回的数据怎么用归一化方法呢
回复

使用道具 举报

6

主题

21

帖子

0

精华

高级会员

Rank: 4

积分
533
威望
280
贡献
153
兑换币
165
注册时间
2014-12-12
在线时间
50 小时
毕业学校
南京工程学院
2#
发表于 2016-10-16 20:25:47 | 只看该作者
#在这里快速回复#
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

注册会员

Rank: 2

积分
11
威望
7
贡献
4
兑换币
5
注册时间
2017-7-24
在线时间
0 小时
3#
发表于 2017-7-24 17:48:42 | 只看该作者
u16   AD_L_num_old = 0 , AD_R_num_old = 0 ;
u16   nLeft , nRight ;

void Ad_Value(void)
{
        u16          AD_L_num = 0 , AD_R_num = 0 ;
        u16          AD_L_ave = 0 , AD_R_ave = 0 ;
        float   Add, Sub ;

    /****************平均滤波****************/
        u8           flog ;
        for( flog = 0 ; flog < 10 ; flog++ )
    {
        AD_L_num += Get_ADC10bitResult(4) ;
        AD_R_num += Get_ADC10bitResult(5) ;
    }
        AD_L_ave = AD_L_num / 2 ;
    AD_R_ave = AD_R_num / 2 ;
   
    /*************一阶滞后滤波法*************/
        AD_L_num = (AD_L_ave * NUM_AD + AD_L_num * (100 - NUM_AD))/100;
    AD_R_num = (AD_R_ave * NUM_AD + AD_R_num * (100 - NUM_AD))/100;

        AD_L_num_old = AD_L_num ;
    AD_R_num_old = AD_R_num ;
   
    //fashong(3,AD_L_num);
    //fashong(4,AD_R_num);

    /*****************归一化*****************/
        nLeft  = GYH(310 , 15 , AD_L_num);
    nRight = GYH(400 , 15 , AD_R_num);

    /**************防止数据等于零,在拟合偏差时出错**************/
    //if( nLeft == 0)     nLeft  = 1 ;
    //if( nRight == 0 )   nRight = 1 ;

        if( ! nLeft  )   nLeft  = 1 ;      // 与if( nLeft == 0)     nLeft  = 1 ; 等效
    if( ! nRight )   nRight = 1 ;      // 与if( nRight == 0 )   nRight = 1 ; 等效
   
    /************模拟串口发送数据************/   
    //fashong(1,nLeft);
    //fashong(2,nRight);
   
    /*************丢线处理,若电感超出检测范围,执行上次打角方向的最大角************/   
        if( nLeft < 50 && nRight < 50 )
    {
        if(Value_old>0)            Value = Value_max;
        else if(Value_old<0)       Value = -Value_max;
                //else                                   Value = Value_old;
    }
    /******************正常处理*************************/
        else
    {
        /****************电感值差比和,拟合偏差*********************/        
        Add = nLeft + nRight;
        Sub = sqrt(nLeft) - sqrt(nRight);   //为保证拟合偏差与实际偏差呈单调变化,对电感值开根号
        Value = -600 * Sub / Add;

        /*******另一种拟合偏差的方法,小范围内接近线性变化**********/        
        //Value = 4*( 200 / (float) nLeft - 200 / (float) nRight) ;

        /**************对拟合偏差进行限幅,防止数据溢出**************/         
                Value = (Value > Value_max) ? Value_max: Value;
        Value = (Value < -Value_max) ? ( -Value_max) : Value;
        }

        Value_old = Value;                      //记录上一次的偏差值
    //fashong(5,(u16)Value);
}

//========================================================================
// 函数: int GYH(int max,int min,int value)
// 描述: 归一化电感
// 参数: max,min是电感最大最小值,value是实时电感值
// 返回:无符号结果值
// 版本: V1.0, 2017-5-18
//========================================================================
int GYH(int max,int min,int value)
{
    float val = value;
    val = (val > max) ? max : val;
    val = (val < min) ? min : val;
    val = (val - min)/(max - min);
    val *= 200;
    return (int)val;
}

回复 支持 反对

使用道具 举报

2

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
340
威望
192
贡献
148
兑换币
126
注册时间
2021-4-9
在线时间
0 小时
毕业学校
AUSD
4#
发表于 2021-6-29 10:40:17 | 只看该作者
[(now - min) *100 ] / ( max - min )
这个可以吗now :电感值
max min :赛道检测到的最大最小值
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|亿加合和智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-4-27 05:35 , Processed in 0.094803 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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