STM32
直播中

乐骞添

7年用户 1002经验值
私信 关注
[问答]

STM32F405上用L6470控制步进电机遇到的两个疑问求解

最近在STM32F405上用L6470控制步进电机,发现两个问题,始终找不到原因:
1、L6470的计步寄存器ABS_POS(0X01),电机转动后去读取它的值,有时候会突然从很小的值窜到很大,例如:
reg VMOTOR_ABS_POS [value] = 0x68b5

reg VMOTOR_ABS_POS [value] = 0x8247

reg VMOTOR_ABS_POS [value] = 0xb949

reg VMOTOR_ABS_POS [value] = 0x3fbe30
reg VMOTOR_ABS_POS [value] = 0x3ff849
验证过读写是完全正常的,不知道为何会突然计步器会出现阶跃性跳变。

2、电机转一圈需要多少个脉冲:
  照规格来说,L6470是128细分的,我使用的电机是0.9度/步。转一圈不应该是360*128*10/9=51200步吗?而实际测量转完一圈大致走了270000步。
我配制的是128细分的:dSPIN_RegsStruct->STEP_MODE         = 0x07;                                         /* 设置到128微步模式 */

   上面两个问题有没有兄弟碰到过,第二个可能是我原理没理解,不知道这个步数是怎么算的。

回帖(1)

china

2024-5-10 17:49:22
在STM32F405上使用L6470控制步进电机时,您遇到了两个问题。让我们逐一分析并尝试找到可能的原因和解决方案。

问题1:L6470的计步寄存器ABS_POS(0X01)在电机转动后读取时,有时候会突然从很小的值窜到很大。

可能的原因:
1. 通信干扰:在读取ABS_POS寄存器时,可能存在电磁干扰或其他通信干扰,导致读取到错误的值。
2. L6470内部错误:L6470内部可能存在某种错误,导致计步器的值突然跳变。

解决方案:
1. 检查通信线路:确保通信线路没有受到干扰,可以使用屏蔽线并保持线路尽可能短。
2. 使用软件滤波:在读取ABS_POS寄存器的值后,可以使用软件滤波算法(如中值滤波或卡尔曼滤波)来减少误差。
3. 检查L6470的固件:确保L6470的固件是最新的,以避免可能的固件错误。

问题2:电机转一圈需要多少个脉冲。

根据您提供的信息,L6470是128细分的。要计算电机转一圈所需的脉冲数,我们需要考虑以下几个因素:

1. 步进角:步进电机的步进角是每步移动的角度。对于大多数步进电机,步进角通常是1.8度。
2. 细分:L6470的细分是128,这意味着每个步进角被细分为128个更小的步进。

计算方法:
电机转一圈所需的总步数 = 360度 / 步进角
对于1.8度步进角的电机,总步数 = 360 / 1.8 = 200步

由于L6470是128细分的,每个步进角被细分为128个更小的步进,所以实际上:

总脉冲数 = 总步数 × 细分
总脉冲数 = 200 × 128 = 25600脉冲

所以,对于128细分的L6470,电机转一圈需要25600个脉冲。

希望这些信息能帮助您解决遇到的问题。如果问题仍然存在,请考虑与L6470的制造商联系,以获取更多技术支持。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分