while (samplesRead > 0) { time += period; if (type == 0) //阶跃信号PID控制 { if (time >= parameters[1]) { error = parameters[0] - encoderInputs[0] * (2 * M_PI / 512 / 4); error_integrator += error; analogOutputs[0] = Kp * error + Ki * (error_integrator)*period + Kd * (error - error_last) / period; error_last = error; } }在这段代码中补充,使我能够得到变量encorderinputs[0]的上升时间
时间: 2024-03-18 17:41:41 浏览: 93
51单片机开发板实验:用if语句控制P0口8位LED的流水方向程序源代码.rar
在这段代码中,我们可以通过判断反馈信号上升沿的方式来获得编码器输入`encorderinputs[0]`的上升时间,可以在while循环中添加以下代码:
```c++
while (samplesRead > 0) {
time += period;
if (type == 0) { //阶跃信号PID控制
if (time >= parameters[1]) {
// 判断反馈信号上升沿
if (encorderinputs[0] == 0 && last_encorderinputs[0] == 1) {
// 计算上升时间并输出结果
auto end_time = steady_clock::now();
auto rise_time = duration_cast<microseconds>(end_time - start_time).count();
cout << "The rise time of encoderInputs[0] is: " << rise_time << " microseconds" << endl;
}
// 更新上一次编码器输入状态
last_encorderinputs[0] = encorderinputs[0];
// PID控制
error = parameters[0] - encorderinputs[0] * (2 * M_PI / 512 / 4);
error_integrator += error;
analogOutputs[0] = Kp * error + Ki * (error_integrator)*period + Kd * (error - error_last) / period;
error_last = error;
}
}
}
```
在这段代码中,我们使用了一个变量`last_encorderinputs[0]`来记录上一次编码器输入的状态。在每次循环中,我们判断当前编码器输入状态是否为上升沿,并记录上升时间。最后,我们输出结果并更新上一次编码器输入状态。请注意,这段代码假设`encorderinputs`数组包含编码器的输入状态,您需要根据您的具体情况更改数组名称。
阅读全文