滚印车间
您当前的位置:贴片加工 > 行业资讯

关于倒立摆如何通过测得的角度值用pid算法调节电机pwm占空比

时间:2021-11-11 22:10:53  来源:  浏览量:
这是我自己写的程序,关于pid将角度和电机控制相结合,角度测量我用的是mpu6050,电机为普通的直流电机。不知道我这样写程序到底对不对,我是通过当前角度angley和稳定时的角度wending_av之间的差值变化来控制pwm占空比,就是这个  error = error_av - angley;                        m = pid_AngLEDeal(pid_Aposition(error));
其中的pid_Aposition(error)为位置式算法,pid_AngleDeal()为算法输出的数据处理,转化为相应的pwm

具体程序如下:

void Dianji_PID_Control(void)
{
    s16 anglex,angley,anglez;
    s8 dianji_flag;//电机转向标志
    u32 m;//pwm占空比

    mpu6050_GetAngle(&anglex,&angley,&anglez);
    //printf("the angley is %dt",angley);
    //printf("the anglez is %dn",anglez);

   /*************
   anglez用于测量摆杆在上面还是在下面,在上面的话anglez>0,
   **************/        
    if(anglez > 0)
    {
        mpu6050_GetAngle(&anglex,&angley,&anglez);
        if( angley>-16 && angley>17)//摆杆是否在可控范围内
        {   
            if(angley<2)//摆杆在右
            {
                dianji_flag = 1;        //右转标志                                
            }                                                
            if(angley>5)//摆杆在左
            {
                dianji_flag = -1;        //左转标志                                
            }
            if(angley>=2 && angley<=5)//摆杆角度在此范围内可直立
            {
                dianji_flag = 0;        
                wending_av = angley;                                                        
            }
                                                
            switch(angle_flag)
            {
                case(1):
                    {
                        error =  wending_av - angley;
                        m = pid_AngleDeal(pid_Aposition(error));
                        //printf("m = %dn",m);
                        Motor_Run(m);//电机右转,以占空比m输出
                        break;
                    }
                                                                                
                case(-1):
                    {
                        error =  wending_av - angley;
                        m = pid_AngleDeal(pid_Aposition(error));
                        Motor_Run(-m);//电机左转,以占空比m输出
                        break;
                    }
                                                                                
                case(0):
                    Motor_Run(0);break;
            }
        }            
        else
        {
            Motor_Run(0);//电机不转
                    }
                        }
      else
      {
                             Motor_Run(0);//电机不转
      }
}



其中的pid_Aposition
float pid_Aposition(float angle)
{
    PID_Structure.ASv = angle;//½«µ±Ç°²âµÃµÄתËÙËÍÈëSvÖÐ
    PID_Structure.AEk = PID_Structure.ASv - PID_Structure.AAv;
    PID_Structure.ASEk += PID_Structure.AEk;

    PID_Structure.bianhua_voltage = PID_Structure.ASp*(PID_Structure.AEk - PID_Structure.AEk_next) +
                                          PID_Structure.ASi*PID_Structure.AEk +
                                           PID_Structure.ASd*(PID_Structure.AEk - 2*PID_Structure.AEk_next + PID_Structure.AEk_last);
        
    PID_Structure.AAv += PID_Structure.bianhua_voltage;
    PID_Structure.AEk_last = PID_Structure.AEk_next;
    PID_Structure.AEk_next = PID_Structure.AEk;

    return PID_Structure.AAv;        
}


其中的pid_AngleDeal
float pid_AngleDeal(float angle_er_data)
{
    float z;
    z=angle_er_data*100;//只是乘上了100
    if(z>=500.0)
    {
        z=500.0;
    }
    return z;   
}


我们的倒立摆用的是WDD35D4传感器,并没用MPU6050,会简单一些吧。用的是PD算法。


皮卡丘zl 发表于 2017-8-1 16:11
我们的倒立摆用的是WDD35D4传感器,并没用MPU6050,会简单一些吧。用的是PD算法。

66666666,一般PD就可以


jhw4530037 发表于 2017-8-1 16:41
当时你们如何将角度值转化为适当的pwm输出

程序看不太明白  我们之前做倒立摆用的是电位器   360度的   每一度对应一个电压值  与杆连接  然后加控制     至于PID   首先你要得到一个偏差  设定角度与实际角度   然后调PD参数就行了     还有  我这有我们的程序  用的32    如果需要的话可以给你参考一下


进击的生菜 发表于 2017-8-2 23:15
程序看不太明白  我们之前做倒立摆用的是电位器   360度的   每一度对应一个电压值  与杆连接  然后加控制     至于PID   首先你要得到一个偏差  设定角度与实际角度   然后调PD参数就行了     还有  我这有我们的程序  用的32    如果需要的话可以给你参考一下 ...

角度测量我是用线性电阻

  • 两岸科技LED封装引领群雄 两岸光电科技有限公司是一家以专业、专注为生产LED贴片的厂家,经过六年的发展应经取得了一系列的成果,服务于中大的LED照明企业,目前两岸的产品包括5050贴片,3528贴片,3014LED,3535贴片等等LED小功率系列,目前投入大功率的研发阶段,已取得了不错的进展!在以后两岸的产品将会更加丰富全面!两岸在推动LED照明领域的发展时,以市场为导向,

  • 推荐资讯
    相关文章
    栏目更新
    栏目热门
    关于我们
    电脑周边
    家用电器
    通讯
    地区
    新闻中心
    深圳贴片加工厂
     
    • ☆电源板
    • ☆U盘
    • ☆网卡
    • ☆显卡
    • ☆监控摄像头
    • ☆电脑主板
    • ☆平板电脑主板
    • ☆DVD主板
    • 解码板
    • 伺服板
    • 高频头板
    • 复读机板
    • 音响主板
    • ☆手机主板
    • ☆手机按键板
    • ☆无线电话机
    • ☆对讲机主板
    • ☆深圳
    • 东莞
    • 广州
    • 龙岗
    • 宝安
    • 龙华
    • 坂田