- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 STM32F4 微 Controller 上使用 CMSIS 库开发 PID Controller 。我实在无法理解PID参数的归一化。现在我有了 PID Controller 的三个 Kp、Ki、Kd 参数,我必须将它们放入系统中。我知道它们需要标准化,所以我必须从整数转换为 q15。问题来了。就我而言,我有:
kp = 2.7056
ki = 0.085
kd = 0
据我了解,我需要找到一个因子使这些数字可以在 -32768...32767 中表示,因此我使用 2^13
作为因子:
kp = 2.7056 * 2^13 = 22164
ki = 0.085 * 2^13 = 696
我不明白的是我是否需要除以PID计算的结果。如果我除以,当误差较低时 pid 输出为零:让我们有一个常数误差 e(n) = 2。在PID计算中(我使用函数arm_pid_q15()中here描述的公式):
y(n) = y(n-1) + (kp+ki)*e(n) - kp*e(n-1)
y(n) = y(n-1) + (22164+696)*2 - 22164*2 = y(n-1) + 1392
如果y(n-1) = 0
,y(n) = 1392
。如果除以 2^13
因子,则得到 y(n) = 0
(整数)。
另一方面,如果我不除 PID 输出,就相当于将比例增益乘以 2^13
因子。
有人可以帮我理解这一点吗?谢谢。
最佳答案
我绝不是控制理论方面的专家,但这里有一个实用的方法。
这些 float 只是通用数字,在您定义之前没有任何意义。通常,您会在编译时将它们与有意义的常量相乘,然后也在编译时转换为定点。
该常量应该是诸如 PWM、ADT 的分辨率或您希望整数值表示的任何内容。定义这些值到底代表什么,例如 PWM 占空比刻度。使用适合 MCU 的单元。
你应该有类似这样的东西:
#define kp (int32_t)(2.7056f * PID_SCALE)
#define ki (int32_t)(0.0850f * PID_SCALE)
#define kd (int32_t)(0.0000f * PID_SCALE)
(注意:这可能会或可能不会强制/需要浮点库来与您的程序链接,即使您实际上并未使用它。)
其中 PID_SCALE 是一些合适的整数常量。请注意,如果您正在寻找纯定点调节器,则不应在上述定义之外的任何地方使用浮点类型。我怀疑你的问题可能与此有关,在这种情况下,问题出在 C 代码实现上,而不是控制理论和数学上。
在伪代码中,您最终会得到如下内容:
p = kp * error
check that p is in range, if not set it to min/max
i = prev_i + error
check that i is in range, if not set it to min/max
prev_i = i
i = ki * i
pi = (p + i) / PID_SCALE
这样,您就可以将每一项与常数相乘,分别跟踪I
,并在计算完成后进行除法。
关于c - 如何正确标准化 q15 定点中的 pid 系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57854690/
我已经训练了一个线性回归模型来以多输出方式进行预测。这是一个时间序列预测问题,根据一组输入来估计 future 12 个月的需求。在过去 - 如果我只预测一个输出值 - 我会简单地调用以下命令来访问模
我的应用程序对原始音频信号执行FFT(所有麦克风读数均为values中的16位整数值,即1024个单元)。它首先根据16位对读数进行归一化。然后提取频率为400Hz的幅度。 int sample_ra
我从包含相同语音内容的两个大约 30 秒的音频文件中提取了两个系列 MFCC 系数。音频文件从不同来源录制在同一位置。应该估计音频是否包含相同的对话或不同的对话。目前我已经测试了两个Mfcc系列的相关
我正在尝试使用两个自变量(批处理和方法)和一个因变量 (conc) 运行线性回归。当我运行回归时,我得到一个系数的 NA 值。当我更改模型中自变量的顺序时,NA 值显示为不同的变量。这是一个可重现的数
我想要的,大图:我想知道如何在 Java 中模仿 Mathematica 的 ExtendedGCD[...] 功能。有关该功能的信息可以在 here 中找到,但为了完整起见,我将对其进行简要描述。
我用 R 编写了这个套索代码,并且得到了一些 beta 值: #Lasso library(MASS) library(glmnet) Boston=na.omit(Boston) x=model.m
我有一个幅频响应点列表。振幅以分贝为单位给出。 任务是将此 AFR 列表导出为某些硬件 DSP 设备的一组系数。我知道此设备的文件格式。该设备的规范表明它需要 12288 个系数,并且 DSP 有 2
是否可以替换 lm 对象中的系数? 我认为以下会起作用 # sample data set.seed(2157010) x1 <- 1998:2011 x2 <- x1 + rnorm(length(
我正在尝试使用 lm.ridge 方法执行岭回归。我的问题是如何获得拟合模型的系数?我从调用中得到不同的结果: 模型$coef 系数(模型) 哪个是正确的?另外,为什么我从调用中得到不同的结果: co
以下代码片段死于 Eigen 断言: MatrixXd L; VectorXd x, b; ... ASSERT_MATRIX_EQ(L*x, b); 与, template void ASSERT
有没有办法从编码的图像和视频中轻松提取 DCT 系数(和量化参数)?任何解码器软件都必须使用它们来解码 block DCT 编码的图像和视频。所以我很确定解码器知道它们是什么。有没有办法将它们暴露给使
如何找到矢量 w 是多少,即垂直于分离平面? 最佳答案 我就是这样做的here .如果我没记错的话,这是基于 dual form 的SVM 优化的结果。 model = svmtrain(...);
我是 FFMPEG 的新手。我知道如何提取关键帧, 但现在我想提取那些 I 帧的 DC 系数。 您能否帮助编写 FFMPEG 命令的正确语法以获取 DC 系数? 问候 最佳答案 FFmpeg 命令不会
任何人都可以共享任何代码或可调用以从 HEVC 比特流中提取变换系数 (DCT/DST) 的函数吗? 我检查了 HM 16.0 的源代码。文件\source\Lib\TLibCommon\TComTr
我需要从 MPEG4 视频中提取有关运动矢量和 DC 系数的信息。我搜索了相关站点和主题,发现一个好的解决方案是使用 ffmpeg 编解码器的代码。尤其是 libavcodec/mpegvideo.c
我想删除sympy符号表达式中等于1的任何系数,例如:我希望 1.0x**2 成为 x**2 ,有办法做到吗?另外,如果可能的话,可以对整数进行舍入,例如将 2.0x**2 变为 2*x**2 最佳答
我想删除sympy符号表达式中等于1的任何系数,例如:我希望 1.0x**2 成为 x**2 ,有办法做到吗?另外,如果可能的话,可以对整数进行舍入,例如将 2.0x**2 变为 2*x**2 最佳答
我最近的任务是将 PMML 解析回 R 模型。 (我进行了广泛搜索,没有库可以为您进行这种转换。)我正在尝试将包含多项逻辑回归的 PMML 转换回 R 模型,但我不知道如何转换任何PMML 文档中保存
当使用 pandas statsmodels 的 .summary() 函数时,OLS 回归结果包括以下字段。 coef std err t P>|t| [
我正在 STM32F4 微 Controller 上使用 CMSIS 库开发 PID Controller 。我实在无法理解PID参数的归一化。现在我有了 PID Controller 的三个 Kp、
我是一名优秀的程序员,十分优秀!