芯片解密,芯片破解,IC解密,单片机解密,MCU解密,STM解密

飞芯科技提供芯片解密,芯片破解,IC解密,单片机解密,MCU解密,STM解密逆向服务

单片机解密飞思卡尔控制电机PID算法代码解析

单片机解密PID实指“比例proportional”、“积分integral”、“微分derivative” , 这三项构成PID基本要素。每一项完成不同任务对系统功能产生不同的影响。 搞软件的往往对硬件不屑 ,却忘了软件再牛B也是为硬件服务的 , PID的数字化算法就完全是为硬件而生的 , 这是控制电机算法的一个难点 , 没有一定的对软硬件的理解 , 就连调试装定PID参数都会很为难 ! 飞思卡尔智能车项目里面就会用到PID算法 , 比如车爬坡和平地连续拐弯时 , 代码里面没有PID算法 , 控制和驱动起来就会很拙急 , 对不对 ? 不过 ,搞清楚问题还是有个前提的 , 那就是懂点微积分 , 不会微积分嘛 , 下面的内容无需关注

实际上 ,单片机解密 PID算法的应用基础始于对PCB板上的运放的PID参数进行调校 , P对应于运放增益  ; I 就是运放输入和输出端之间接一个电容引入反馈 , 就是控制器的输出与输入误差会积累起来影响输出 ;  D 就是运放输入端串接一个电容 ,起的微分作用是阻止输出与输入误差的变化 .  结合示波器来观察控制电机的PID参数设定的话 , 网上有一首诗 , 它就代表我的心声了 :

单片机解密

  1.     #include <mc9s12dg128.h> /* derivative information */
  2.     /*******************************************************************
  3.     * 宏定义
  4.     **********************************************************************************/
  5.     #define STABMAX 50
  6.     #define SENSORNUM 8
  7.     #define SAMPLETIMES 5
  8.     /********************************************************************
  9.     FUNCTION PROTOTYPES
  10.     ********************************************************************/
  11.     int CalculateP(void);
  12.     float CalculatePID(void);
  13.     /********************************** PID控制程序 *******************/
  14.     struct CARSTATE
  15.     {
  16.     int E0;
  17.     int E1;
  18.     int E2;
  19.     int E3;
  20.     float Integral;
  21.     }CarState;
  22.     /*
  23.     ********************************************************************
  24.     * 初始化PID参数
  25.     ********************************************************************/
  26.     void Init_PID()
  27.     {
  28.     CarState.E0 = 0;
  29.     CarState.E1 = 0;
  30.     CarState.E2 = 0;
  31.     CarState.E3 = 0;
  32.     CarState.Integral = 0;
  33.     }
  34.     /*
  35.     ********************************************************************
  36.     * 信号处理函数
  37.     * 程序描述: 对传感器采集过来的数据进行处理,得到一些基本的计算参数

  38.     ********************************************************************/
  39.     int SignalProcess( unsigned int signal )
  40.     {
  41.     const int BitValue[8] = {43,26,12,6,-6,-12,-26,-43}; //MAX:28
  42.     int i,CurrPoint=0,LastPoint=0,BitNum=0;
  43.     unsigned char SignalBit[8];
  44.     for(i=0;i<8;i++)
  45.     {
  46.     SignalBit = signal & 0x0001;
  47.     BitNum += SignalBit;
  48.     signal >>= 1;
  49.     }
  50.     switch(BitNum)
  51.     {
  52.     case 1:
  53.     for(i=0;i<8;i++)
  54.     if(SignalBit != 0)
  55.     CurrPoint += BitValue;
  56.     CarState.E0 = CurrPoint;
  57.     break;
  58.     case 2:
  59.     for(i=0;i<8;i++)
  60.     if(SignalBit != 0)
  61.     CurrPoint += BitValue;
  62.     CurrPoint >>= 1;
  63.     CarState.E0 = CurrPoint;
  64.     break;
  65.     default:
  66.     CarState.E0 = CarState.E1;
  67.     break;
  68.     }
  69.     return CalculateP()*100;
  70.     }



联系方式

地址:石家庄市新华区民族路77号华强广场D座2009
电话:0311-88816616/87087811
手机:13315190088
传真:0311-67901001
联系人:张工
网址:www.taihedz.cn
邮箱:feixindz@163.com
微信:xinpianjiemi
QQ:527263666/568069805

在线客服
热线电话

企业微信