ElectronBot icon indicating copy to clipboard operation
ElectronBot copied to clipboard

请问各位大神,舵机固件源码中PID中速度误差积分项的作用:)

Open TJrobtic opened this issue 3 years ago • 9 comments

首先我很菜很菜,研究了好一段时间源码,发现PID我没理解,如图 捕获1 请问dce.integralVel项有什么意义?好像在固件里因为dce.kv为0所以此项一直不起作用。 另外主机获取舵机速度会返回有效值吗?

TJrobtic avatar Apr 13 '22 14:04 TJrobtic

首先我很菜很菜,研究了好一段时间源码,发现PID我没理解,如图 捕获1 请问dce.integralVel项有什么意义?好像在固件里因为dce.kv为0所以此项一直不起作用。 另外主机获取舵机速度会返回有效值吗?

转速的计算依靠Motor::UpdateVelocity()接口,不过当前程序里并没有调用这个接口,所以速度信息无法返回有效值。要是用的话,可以在控制中断回调里调用Motor::UpdateVelocity(),就能对角度差分得到转速。

我理解程序中PID将位置环和速度环写在一起了,其中dce.integralVel是速度环的积分量,由于转速环在稳态状态下只有积分量起作用,所以这里把比例项简化了,再将两环写在一起就是截图中的样子了。

leazer avatar Apr 14 '22 02:04 leazer

感谢您的解惑 有豁然开朗的感觉 我再追文一句 系数是0 意思是暂时不用速度环起作用的意思吗 另外 函数调用时 _inputVel传入参数是0 意思是此时刻的速度为0,再和期望速度做差得出速度误差吗?

首先我很菜很菜,研究了好一段时间源码,发现PID我没理解,如图 捕获1 请问dce.integralVel项有什么意义?好像在固件里因为dce.kv为0所以此项一直不起作用。 另外主机获取舵机速度会返回有效值吗?

转速的计算依靠Motor::UpdateVelocity()接口,不过当前程序里并没有调用这个接口,所以速度信息无法返回有效值。要是用的话,可以在控制中断回调里调用Motor::UpdateVelocity(),就能对角度差分得到转速。

我理解程序中PID将位置环和速度环写在一起了,其中dce.integralVel是速度环的积分量,由于转速环在稳态状态下只有积分量起作用,所以这里把比例项简化了,再将两环写在一起就是截图中的样子了。 感谢您的解惑 有豁然开朗的感觉 我再追文一句 系数是0 意思是暂时不用速度环起作用的意思吗 另外 函数调用时 _inputVel传入参数是0 意思是此时刻的速度为0,再和期望速度做差得出速度误差吗?

TJrobtic avatar Apr 14 '22 02:04 TJrobtic

感谢您的解惑 有豁然开朗的感觉 我再追文一句 系数是0 意思是暂时不用速度环起作用的意思吗 另外 函数调用时 _inputVel传入参数是0 意思是此时刻的速度为0,再和期望速度做差得出速度误差吗?

首先我很菜很菜,研究了好一段时间源码,发现PID我没理解,如图 捕获1 请问dce.integralVel项有什么意义?好像在固件里因为dce.kv为0所以此项一直不起作用。 另外主机获取舵机速度会返回有效值吗?

转速的计算依靠Motor::UpdateVelocity()接口,不过当前程序里并没有调用这个接口,所以速度信息无法返回有效值。要是用的话,可以在控制中断回调里调用Motor::UpdateVelocity(),就能对角度差分得到转速。 我理解程序中PID将位置环和速度环写在一起了,其中dce.integralVel是速度环的积分量,由于转速环在稳态状态下只有积分量起作用,所以这里把比例项简化了,再将两环写在一起就是截图中的样子了。 感谢您的解惑 有豁然开朗的感觉 我再追文一句 系数是0 意思是暂时不用速度环起作用的意思吗 另外 函数调用时 _inputVel传入参数是0 意思是此时刻的速度为0,再和期望速度做差得出速度误差吗?

是的,目前程序来看是失能了速度环运算(各项均为零),等效只有位置环起作用。

函数调用时 _inputVel传入参数是0 意思是此时刻的速度为0,再和期望速度做差得出速度误差吗?

是的

leazer avatar Apr 14 '22 03:04 leazer

请问如何理解最大转矩的限制,用最大力矩作为位置环PI后的输出结果的限幅,这样可以做到限制输出力矩吗? image 可以看到的是位置环PI后的结果,作为电机的PWM占空比赋值过去了 image

hit-wpc avatar Jul 15 '22 04:07 hit-wpc

请问如何理解最大转矩的限制,用最大力矩作为位置环PI后的输出结果的限幅,这样可以做到限制输出力矩吗? image 可以看到的是位置环PI后的结果,作为电机的PWM占空比赋值过去了 image

仔细看这里的位置环和速度环PID是合并到一起了,所以控制上看PID输出值的物理意义是电流值,这里电流环被简化,电流值等效于PWM的占空比,而根据电机的转矩方程可知,转矩正比于电流,所以限制了最大电流输出值,即限制了最大转矩

leazer avatar Jul 15 '22 07:07 leazer

不太理解PID的输出值物理意义是电流值 image 经典的双环控制系统,应该是电压环(转速环)作为外环,电压环的输出作为电流环的给定,外环的输出做限幅,则电流的给定就会有限幅,电流环作为内环也需要采集电流的实际值才可以进行内环环路的调节。 稚晖君的舵机驱动板中没有采集电流的实际值,所以应该也不存在电流环呀,是如何实现转矩限幅的呢? 麻烦大佬解答一下,对这块的认识可能有误区

hit-wpc avatar Jul 15 '22 10:07 hit-wpc

不太理解PID的输出值物理意义是电流值 image 经典的双环控制系统,应该是电压环(转速环)作为外环,电压环的输出作为电流环的给定,外环的输出做限幅,则电流的给定就会有限幅,电流环作为内环也需要采集电流的实际值才可以进行内环环路的调节。 稚晖君的舵机驱动板中没有采集电流的实际值,所以应该也不存在电流环呀,是如何实现转矩限幅的呢? 麻烦大佬解答一下,对这块的认识可能有误区

理论上是你图中的样子,转速转矩双环控制的转速环内环是电流环(转矩环),电流环的给定由转速环输出得到。

但是具体到这个小舵机上来说,这么小的玩意,对转矩控制精度也不需要量化,没必要增加电流反馈电路来做电流环(转矩环),所以电流控制是开环的,系统中也就只有位置环+转速环+开环电流输出,于是最后输出给PWM就是期望的电流。

所以限制电流即限制了转矩。

leazer avatar Jul 15 '22 11:07 leazer

不太理解PID的输出值物理意义是电流值 image 经典的双环控制系统,应该是电压环(转速环)作为外环,电压环的输出作为电流环的给定,外环的输出做限幅,则电流的给定就会有限幅,电流环作为内环也需要采集电流的实际值才可以进行内环环路的调节。 稚晖君的舵机驱动板中没有采集电流的实际值,所以应该也不存在电流环呀,是如何实现转矩限幅的呢? 麻烦大佬解答一下,对这块的认识可能有误区

理论上是你图中的样子,转速转矩双环控制的转速环内环是电流环(转矩环),电流环的给定由转速环输出得到。

但是具体到这个小舵机上来说,这么小的玩意,对转矩控制精度也不需要量化,没必要增加电流反馈电路来做电流环(转矩环),所以电流控制是开环的,系统中也就只有位置环+转速环+开环电流输出,于是最后输出给PWM就是期望的电流。

所以限制电流即限制了转矩。

嗷嗷,我好像理解了。 那实际上这里设置的转矩限幅值是0.5,仅代表了最大输出转矩是0.5倍的最大电流,没有量纲,不代表是0.5A image

hit-wpc avatar Jul 15 '22 12:07 hit-wpc

不太理解PID的输出值物理意义是电流值 image 经典的双环控制系统,应该是电压环(转速环)作为外环,电压环的输出作为电流环的给定,外环的输出做限幅,则电流的给定就会有限幅,电流环作为内环也需要采集电流的实际值才可以进行内环环路的调节。 稚晖君的舵机驱动板中没有采集电流的实际值,所以应该也不存在电流环呀,是如何实现转矩限幅的呢? 麻烦大佬解答一下,对这块的认识可能有误区

理论上是你图中的样子,转速转矩双环控制的转速环内环是电流环(转矩环),电流环的给定由转速环输出得到。 但是具体到这个小舵机上来说,这么小的玩意,对转矩控制精度也不需要量化,没必要增加电流反馈电路来做电流环(转矩环),所以电流控制是开环的,系统中也就只有位置环+转速环+开环电流输出,于是最后输出给PWM就是期望的电流。 所以限制电流即限制了转矩。

嗷嗷,我好像理解了。 那实际上这里设置的转矩限幅值是0.5,仅代表了最大输出转矩是0.5倍的最大电流,没有量纲,不代表是0.5A image

是这么个意思。

leazer avatar Jul 15 '22 12:07 leazer