Subversion Repositories dashGPS

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /* ----------------------------------------------------------------------
  2.  * Project:      CMSIS DSP Library
  3.  * Title:        arm_pid_init_f32.c
  4.  * Description:  Floating-point PID Control initialization function
  5.  *
  6.  * $Date:        27. January 2017
  7.  * $Revision:    V.1.5.1
  8.  *
  9.  * Target Processor: Cortex-M cores
  10.  * -------------------------------------------------------------------- */
  11. /*
  12.  * Copyright (C) 2010-2017 ARM Limited or its affiliates. All rights reserved.
  13.  *
  14.  * SPDX-License-Identifier: Apache-2.0
  15.  *
  16.  * Licensed under the Apache License, Version 2.0 (the License); you may
  17.  * not use this file except in compliance with the License.
  18.  * You may obtain a copy of the License at
  19.  *
  20.  * www.apache.org/licenses/LICENSE-2.0
  21.  *
  22.  * Unless required by applicable law or agreed to in writing, software
  23.  * distributed under the License is distributed on an AS IS BASIS, WITHOUT
  24.  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  25.  * See the License for the specific language governing permissions and
  26.  * limitations under the License.
  27.  */
  28.  
  29. #include "arm_math.h"
  30.  
  31.  /**
  32.  * @addtogroup PID
  33.  * @{
  34.  */
  35.  
  36. /**
  37.  * @brief  Initialization function for the floating-point PID Control.
  38.  * @param[in,out] *S points to an instance of the PID structure.
  39.  * @param[in]     resetStateFlag  flag to reset the state. 0 = no change in state & 1 = reset the state.
  40.  * @return none.
  41.  * \par Description:
  42.  * \par
  43.  * The <code>resetStateFlag</code> specifies whether to set state to zero or not. \n
  44.  * The function computes the structure fields: <code>A0</code>, <code>A1</code> <code>A2</code>
  45.  * using the proportional gain( \c Kp), integral gain( \c Ki) and derivative gain( \c Kd)
  46.  * also sets the state variables to all zeros.
  47.  */
  48.  
  49. void arm_pid_init_f32(
  50.   arm_pid_instance_f32 * S,
  51.   int32_t resetStateFlag)
  52. {
  53.  
  54.   /* Derived coefficient A0 */
  55.   S->A0 = S->Kp + S->Ki + S->Kd;
  56.  
  57.   /* Derived coefficient A1 */
  58.   S->A1 = (-S->Kp) - ((float32_t) 2.0 * S->Kd);
  59.  
  60.   /* Derived coefficient A2 */
  61.   S->A2 = S->Kd;
  62.  
  63.   /* Check whether state needs reset or not */
  64.   if (resetStateFlag)
  65.   {
  66.     /* Clear the state buffer.  The size will be always 3 samples */
  67.     memset(S->state, 0, 3U * sizeof(float32_t));
  68.   }
  69.  
  70. }
  71.  
  72. /**
  73.  * @} end of PID group
  74.  */
  75.