[经验] ST FOC4.3库关于STM32F30x系列ICS采样代码修改【ST官方应用笔记】

okhxyyo   2017-11-9 09:00 楼主
文件说明
客户在使用ST FOC4.3库文件控制电机过程中,当使用了STM32F30x芯片时,如果使用的是ICS(Isolated Current Sensor)采样电流信号时会遇到无法编译通过报错问题,本文用以说明如何修正这个问题。
文件预览
  1. /**
  2.   ******************************************************************************
  3.   * @file    SystemNDriveParams.h
  4.   * @author  STMicroelectronics - System Lab - MC Team
  5.   * [url=home.php?mod=space&uid=252314]@version[/url] 4.3.0
  6.   * [url=home.php?mod=space&uid=311857]@date[/url]    22-Sep-2016 15:29
  7.   * [url=home.php?mod=space&uid=159083]@brief[/url]   This file contains System & Drive constant initialization
  8.   ******************************************************************************
  9.   * @attention
  10.   *
  11.   * <h2><center>© COPYRIGHT 2016 STMicroelectronics</center></h2>
  12.   *
  13.   * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
  14.   * You may not use this file except in compliance with the License.
  15.   * You may obtain a copy of the License at:
  16.   *
  17.   *        [url=http://www.st.com/software_license_agreement_liberty_v2]http://www.st.com/software_license_agreement_liberty_v2[/url]
  18.   *
  19.   * Unless required by applicable law or agreed to in writing, software
  20.   * distributed under the License is distributed on an "AS IS" BASIS,
  21.   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  22.   * See the License for the specific language governing permissions and
  23.   * limitations under the License.
  24.   *
  25.   ******************************************************************************
  26.   */

  27. /* Define to prevent recursive inclusion -------------------------------------*/
  28. #ifndef __SYSTEMNDRIVE_PARAMS_H
  29. #define __SYSTEMNDRIVE_PARAMS_H

  30. #include "Parameters conversion.h"

  31. #ifdef SINGLEDRIVE
  32.   #define MAX_TWAIT 0                 /* Dummy value for single drive */
  33.   #define FREQ_RATIO 1                /* Dummy value for single drive */
  34.   #define FREQ_RELATION HIGHEST_FREQ  /* Dummy value for single drive */
  35. #endif

  36. #ifdef DUALDRIVE

  37. #include "Parameters conversion motor 2.h"

  38. /**
  39.   * [url=home.php?mod=space&uid=159083]@brief[/url]  PI / PID Speed loop parameters Motor 2
  40.   */
  41. PIParams_t PISpeedParamsM2 =
  42. {
  43.   .hDefKpGain          = (int16_t)PID_SPEED_KP_DEFAULT2,   /*!< Default Kp gain, used to initialize Kp gain
  44.                                                                 software variable*/
  45.   .hDefKiGain          = (int16_t)PID_SPEED_KI_DEFAULT2,   /*!< Default Ki gain, used to initialize Ki gain
  46.                                                                 software variable*/
  47.   .hKpDivisor          = (uint16_t)SP_KPDIV2,              /*!< Kp gain divisor, used in conjuction with
  48.                                                                 Kp gain allows obtaining fractional values.
  49.                                                                 If FULL_MISRA_C_COMPLIANCY is not defined
  50.                                                                 the divisor is implemented through
  51.                                                                 algebrical right shifts to speed up PI
  52.                                                                 execution. Only in this case this parameter
  53.                                                                 specifies the number of right shifts to be
  54.                                                                 executed */
  55.   .hKiDivisor          = (uint16_t)SP_KIDIV2,              /*!< Ki gain divisor, used in conjuction with
  56.                                                                 Ki gain allows obtaining fractional values.
  57.                                                                 If FULL_MISRA_C_COMPLIANCY is not defined
  58.                                                                 the divisor is implemented through
  59.                                                                 algebrical right shifts to speed up PI
  60.                                                                 execution. Only in this case this parameter
  61.                                                                 specifies the number of right shifts to be
  62.                                                                 executed */
  63.   .wDefMaxIntegralTerm = (int32_t)IQMAX2 * (int32_t)SP_KIDIV2,/*!< Upper limit used to saturate the integral
  64.                                                                    term given by Ki / Ki divisor * integral of
  65.                                                                    process variable error */
  66.   .wDefMinIntegralTerm = -(int32_t)IQMAX2 * (int32_t)SP_KIDIV2,/*!< Lower limit used to saturate the integral
  67.                                                                     term given by Ki / Ki divisor * integral of
  68.                                                                     process variable error */
  69.   .hDefMaxOutput       = (int16_t)IQMAX2,                 /*!< Upper limit used to saturate the PI output
  70.                                                            */
  71.   .hDefMinOutput       = -(int16_t)IQMAX2,                /*!< Lower limit used to saturate the PI output
  72.                                                            */
  73.   .hKpDivisorPOW2      = (uint16_t)SP_KPDIV_LOG2,         /*!< Kp gain divisor expressed as power of 2.
  74.                                                                E.g. if gain divisor is 512 the value
  75.                                                                must be 9 because 2^9 = 512 */
  76.   .hKiDivisorPOW2      =( uint16_t)SP_KIDIV_LOG2         /*!< Ki gain divisor expressed as power of 2.
  77.                                                               E.g. if gain divisor is 512 the value
  78.                                                               must be 9 because 2^9 = 512 */
  79. };

  80. /**
  81.   * @brief  PI / PID Iq loop parameter Motor 2
  82.   */
  83. PIParams_t PIIqParamsM2 =
  84. {
  85.   .hDefKpGain          = (int16_t)PID_TORQUE_KP_DEFAULT2, /*!< Default Kp gain, used to initialize Kp gain
  86.                                                                software variable*/
  87.   .hDefKiGain          = (int16_t)PID_TORQUE_KI_DEFAULT2, /*!< Default Ki gain, used to initialize Ki gain
  88.                                                                software variable*/
  89.   .hKpDivisor          = (uint16_t)TF_KPDIV2,               /*!< Kp gain divisor, used in conjuction with
  90.                                                                  Kp gain allows obtaining fractional values.
  91.                                                                  If FULL_MISRA_C_COMPLIANCY is not defined
  92.                                                                  the divisor is implemented through
  93.                                                                  algebrical right shifts to speed up PI
  94.                                                                  execution. Only in this case this parameter
  95.                                                                  specifies the number of right shifts to be
  96.                                                                  executed */
  97.   .hKiDivisor          = (uint16_t)TF_KIDIV2,               /*!< Ki gain divisor, used in conjuction with
  98.                                                                  Ki gain allows obtaining fractional values.
  99.                                                                  If FULL_MISRA_C_COMPLIANCY is not defined
  100.                                                                  the divisor is implemented through
  101.                                                                  algebrical right shifts to speed up PI
  102.                                                                  execution. Only in this case this parameter
  103.                                                                  specifies the number of right shifts to be
  104.                                                                  executed */
  105.   .wDefMaxIntegralTerm = (int32_t)S16_MAX * TF_KIDIV2,     /*!< Upper limit used to saturate the integral
  106.                                                                 term given by Ki / Ki divisor * integral of
  107.                                                                 process variable error */
  108.   .wDefMinIntegralTerm = (int32_t)S16_MIN * TF_KIDIV2,             /*!< Lower limit used to saturate the integral
  109.                                                                         term given by Ki / Ki divisor * integral of
  110.                                                                         process variable error */
  111.   .hDefMaxOutput       = S16_MAX,                        /*!< Upper limit used to saturate the PI output
  112.                                                          */
  113.   .hDefMinOutput       = -S16_MAX,                       /*!< Lower limit used to saturate the PI output
  114.                                                          */
  115.   .hKpDivisorPOW2      = (uint16_t)TF_KPDIV_LOG2,         /*!< Kp gain divisor expressed as power of 2.
  116.                                                                E.g. if gain divisor is 512 the value
  117.                                                                must be 9 because 2^9 = 512 */
  118.   .hKiDivisorPOW2      = (uint16_t)TF_KIDIV_LOG2          /*!< Ki gain divisor expressed as power of 2.
  119.                                                                E.g. if gain divisor is 512 the value
  120.                                                                must be 9 because 2^9 = 512 */
  121. };

  122. /**
  123.   * @brief  PI / PID Id loop parameter Motor 2
  124.   */
  125. PIParams_t PIIdParamsM2 =
  126. {
  127.   .hDefKpGain          = (int16_t)PID_FLUX_KP_DEFAULT2,    /*!< Default Kp gain, used to initialize Kp gain
  128.                                                                 software variable*/
  129.   .hDefKiGain          = (int16_t)PID_FLUX_KI_DEFAULT2,    /*!< Default Ki gain, used to initialize Ki gain
  130.                                                                 software variable*/
  131.   .hKpDivisor          = (uint16_t)TF_KPDIV2,              /*!< Kp gain divisor, used in conjuction with
  132.                                                                 Kp gain allows obtaining fractional values.
  133.                                                                 If FULL_MISRA_C_COMPLIANCY is not defined
  134.                                                                 the divisor is implemented through
  135.                                                                 algebrical right shifts to speed up PI
  136.                                                                 execution. Only in this case this parameter
  137.                                                                 specifies the number of right shifts to be
  138.                                                                 executed */
  139.   .hKiDivisor          = (uint16_t)TF_KIDIV2,              /*!< Ki gain divisor, used in conjuction with
  140.                                                                 Ki gain allows obtaining fractional values.
  141.                                                                 If FULL_MISRA_C_COMPLIANCY is not defined
  142.                                                                 the divisor is implemented through
  143.                                                                 algebrical right shifts to speed up PI
  144.                                                                 execution. Only in this case this parameter
  145.                                                                 specifies the number of right shifts to be
  146.                                                                 executed */
  147.   .wDefMaxIntegralTerm = (int32_t)S16_MAX * TF_KIDIV2,             /*!< Upper limit used to saturate the integral
  148.                                                                         term given by Ki / Ki divisor * integral of
  149.                                                                         process variable error */
  150.   .wDefMinIntegralTerm = (int32_t)S16_MIN * TF_KIDIV2,             /*!< Lower limit used to saturate the integral
  151.                                                                         term given by Ki / Ki divisor * integral of
  152.                                                                         process variable error */
  153.   .hDefMaxOutput       = S16_MAX,                       /*!< Upper limit used to saturate the PI output
  154.                                                          */
  155.   .hDefMinOutput       = -S16_MAX,                      /*!< Lower limit used to saturate the PI output
  156.                                                          */
  157.   .hKpDivisorPOW2      = (uint16_t)TF_KPDIV_LOG2,       /*!< Kp gain divisor expressed as power of 2.
  158.                                                              E.g. if gain divisor is 512 the value
  159.                                              



下载:
SystemNDriveParams.zip (63.53 KB)
(下载次数: 8, 2017-11-8 09:30 上传)




玩板看这里: https://bbs.eeworld.com.cn/elecplay.html EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复