类型为 [float],单位为 [turn],输入的电机目标位置,如:设置为 0.1 即表示电机轴转动到 36°(360° * 0.1 = 36°)。
[RW] odrv0.axis0.controller.input_vel
类型为 [float],单位为 [turn/s],输入的电机目标转速,如:设置为 1 即表示电机将以 1转/秒的速度旋转。
[RW] odrv0.axis0.controller.input_torque
类型为 [float],单位为 [Nm],输入的电机输出的力矩大小。
[RO] odrv0.axis0.controller.pos_setpoint
类型为 [float],单位为 [turn],设定的电机目标位置。
[RO] odrv0.axis0.controller.vel_setpoint
类型为 [float],单位为 [turn/s],设定的电机目标转速。
[RO] odrv0.axis0.controller.torque_setpoint
类型为 [float],单位为 [Nm],设定的电机输出的力矩大小。
[RO] odrv0.axis0.controller.trajectory_done
类型为 [bool],轨迹模式下是否已运行到设定位置。
[RW] odrv0.axis0.controller.vel_integrator_torque
类型为 [float],单位为 [Nm],维持当前角度或位置需要输出的扭矩大小。
[OP] odrv0.axis0.controller.move_incremental(displacement: float, from_input_pos: bool)
命令电机转动一定角度,displacement 想要转动多少转,from_input_pos 是否以 input_pos 作为参考,如果设置为 False 则相对于 pos_setpoint。
要相对于当前实际位置设置目标位置,请设置参数from_goal_point = False。
要设置相对于先前目标位置的目标位置,请设置参数from_goal_point = True。
如果你想改变某个位的状态而不影响其他的,那用BSRR或BRR就很容易了。直接 *** 作ODR需要“读- *** 作-写”的过程,速度反而变慢了。比如说让PA1、PA3、PA7清零而不影响其他位的状态,那就是:
GPIOA->BRR=PA1|PA3|PA7
你要用ODR来 *** 作的话,那就变成这样了:
GPIOA->ODR&=~(PA1|PA3|PA7)
虽然C的语句都只有一个,但你看汇编代码,就发现使用BRR比ODR快的多。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)