[STM32F1] STM32控制假肢

[复制链接]
 楼主| goodluck09876 发表于 2019-7-2 14:21 | 显示全部楼层
 楼主| goodluck09876 发表于 2019-7-2 14:22 | 显示全部楼层
 楼主| goodluck09876 发表于 2019-7-2 14:22 | 显示全部楼层
 楼主| goodluck09876 发表于 2019-7-2 14:23 | 显示全部楼层
 楼主| goodluck09876 发表于 2019-7-2 14:30 | 显示全部楼层
 楼主| goodluck09876 发表于 2019-7-2 14:30 | 显示全部楼层
 楼主| goodluck09876 发表于 2019-7-2 14:31 | 显示全部楼层
 楼主| goodluck09876 发表于 2019-7-2 14:31 | 显示全部楼层
 楼主| goodluck09876 发表于 2019-7-2 14:32 | 显示全部楼层
 楼主| goodluck09876 发表于 2019-7-2 14:32 | 显示全部楼层
    在绝对式PID计算模块程序中,包括了PID的结构体,PID结构体内变量的初始化,
PID计算公式的实现,在实际的操作中,采用了积分分离的PID控制,当误差较大时,
取消积分作用,误差较小时引入积分,消除静态误差。PID中的参数包括,期望值、实
际值、偏差值、上一个偏差值、片成功变化率、PID初始化参数,模糊PID输出的整定
量和控制器计算结果,使用的结构体如下:
    struct -pid
        float SetSpeed;//期望值
        float ActualSpeed;//实际值
        float err;//偏差值
      float err last;           //上一个偏差值
      float err rate;/偏差变化率
        float Kp,Ki,Kd;//比例,微分,积分参数
        float KpAdd,KiAdd,KdAdd;//模糊PID计算出的整定量
        float voltage;//计算结果
    }    pid;
    PID计算PWM占空比的编程算法}si]如下:
    pid.voltage=(pid.Kp+ pid.KpAdd)*pid.err +pid.index*( pid.Ki+ pid.KiAdd)*pid.integral
+(pid.Kd+ pid.KdAdd)*(pid.err-pid.err last);
 楼主| goodluck09876 发表于 2019-7-2 14:32 | 显示全部楼层
    在模糊PID计算模块程序中,包括了模糊化处理函数,模糊规则表,三角形隶属度
求解函数,模糊推理函数,重心法清晰化处理,模糊化处理函数将偏差与偏差的变化率
分别带入三角形隶属度函数中求该元素的隶属度,模糊推理函数用去确定对应的模糊规
则表中的模糊语言与该语言对应的隶属度,由于偏差和偏差变化率都会有一个模糊隶属
度,为了计算简便,取其中的较小值作为模糊规则表中的隶属度。模糊推理算法f821实现
的程序如下所示
    float fuzzy-Kp(float arr,float psc)
    王for(i=O;i<5&&n<4;i++)
        {h=es(i,e);//偏差的隶属度
            for(j=O}j<5&&n<4;j++)
            {i=ecs乐ec);//偏差变化率的隶属度
              w=fand(h,r);//取较小值隶属度值
                if(w!=0)
                {Fuz_V [n]=vv;
                Rule V[n]=kp[j];   //保存对应的规则表中的模糊值
                    n=n+1;
                }
            }
        }
     }

 楼主| goodluck09876 发表于 2019-7-2 14:34 | 显示全部楼层
 楼主| goodluck09876 发表于 2019-7-2 14:34 | 显示全部楼层
 楼主| goodluck09876 发表于 2019-7-2 14:34 | 显示全部楼层
 楼主| goodluck09876 发表于 2019-7-2 14:35 | 显示全部楼层
 楼主| goodluck09876 发表于 2019-7-2 14:35 | 显示全部楼层
 楼主| goodluck09876 发表于 2019-7-2 14:39 | 显示全部楼层
    在控制器发送给上位机的信息中既有踩关节角度信息,也有运动阶段的信息,不同
的数据信息以不同的帧头与帧尾结束。上位机软件在接受数据时,首先要进行数据帧头
帧尾的判断,判定数据是角度信号值还是阶段信号值,之后进行数据的处理。角度数据
信号的数据段就是踩关节的实时角度,根据下位机串口发送数据的顺序,数据区接受的
第一位数据为最高位,之后的数据位数依次降低直到最后一位数据和帧尾。当接受后得
到数据角度,然后将该数据实时显示到图形中,如果判定数据是用于运动阶段判断的数
据,直接显示到对应的运动阶段。
 楼主| goodluck09876 发表于 2019-7-2 14:39 | 显示全部楼层
 楼主| goodluck09876 发表于 2019-7-2 14:40 | 显示全部楼层
 楼主| goodluck09876 发表于 2019-7-2 14:40 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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