zoukankan      html  css  js  c++  java
  • 机器人,电机控制中排除bug的科学过程

    昨天晚上进行四轮全向机器人的电机调试实验,  出现了电机疯转的情况,  在此总结一下排除电机问题的基本步骤.

    我们可以从机械到硬件再到软件, 理清思路:

    1.电机通过各种东西安在底盘上,

    这个比较好检查, 可以最先检查,  很可能电机螺丝松懈了.

    2.电机通过码盘线和电源线与电机控制盒相连,

    3.电机控制盒与单片机通过TIM PWM波输出口相连,  也连有电源线

    这个第二歩检查, 如果电机不动,  不抱死, 或失去控制,  很可能是线短了

    4.底层控制方面,  电机控制自下而上有 电流环(电路相关),速度环(与赋的速度相关), 位置环(与电机码盘相关)

    这几个人家写好之后, 不乱改是不会错的

    5.稳定控制方面, 有PID调节.

    这个最后检查: PID 超调,  陀螺仪接触不良,  多个PID调用了同一组Errorpast

    6.最上层则是路径规划, 或者手柄.

    可能程序烧错了, 手柄接触不良,  目标点算错了

    如果快速检查不行,  就要进行单元测试了.

    Plus:上次程序明明能用,这次不行, 往往是硬件或者烧错程序.

    <p style="margin:0in;font-family:SimSun;font-size:11.0pt"><span lang="zh-CN">//这次是</span><span lang="en-US">PID</span><span lang="zh-CN">出问题了</span></p><p style="margin:0in;font-family:SimSun;font-size:11.0pt"><span lang="en-US">//PID </span><span lang="zh-CN">一定要使用独立的</span><span lang="en-US">ep</span></p>
    double PID(double Error,struct PID pid)
    {
    	double A=0;
    	double B=0;
    	double C=0;
    	double delta=0;
    	
    	A = (pid.p*(1+1/pid.i+pid.d));
    	B = -pid.p*(1+2*pid.d);
    	C = pid.p*pid.d;
    	
    	delta = A*Error + B*pid.ep1 + C*pid.ep2;
    	pid.mend += delta;
    /////
    	pid.ep2 = pid.ep1;
    	pid.ep1 = Error;
    /////
    	return pid.mend;
    
    }


  • 相关阅读:
    绿色通道
    Banknotes
    旅行问题
    修剪草坪
    最大连续和
    动物园
    炮兵阵地
    涂抹果酱
    牧场的安排
    国王
  • 原文地址:https://www.cnblogs.com/Pomodori/p/4316628.html
Copyright © 2011-2022 走看看