打印
[STM32]

L6470控制42步进电机时出现电机停不下来的问题

[复制链接]
2444|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lh0602|  楼主 | 2018-4-10 19:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
dSPIN_Regs_Struct_Reset(&dSPIN_RegsStruct);
        
        /* Acceleration rate settings to dSPIN_CONF_PARAM_ACC in steps/s2, range 14.55 to 59590 steps/s2 */
        dSPIN_RegsStruct.ACC                 = AccDec_Steps_to_Par(600);
        /* Deceleration rate settings to dSPIN_CONF_PARAM_DEC in steps/s2, range 14.55 to 59590 steps/s2 */
        dSPIN_RegsStruct.DEC                 = AccDec_Steps_to_Par(600);
        /* Maximum speed settings to dSPIN_CONF_PARAM_MAX_SPEED in steps/s, range 15.25 to 15610 steps/s */
        dSPIN_RegsStruct.MAX_SPEED         = MaxSpd_Steps_to_Par(3000);
        /* Full step speed settings dSPIN_CONF_PARAM_FS_SPD in steps/s, range 7.63 to 15625 steps/s */
        dSPIN_RegsStruct.FS_SPD         = FSSpd_Steps_to_Par(800);
#if defined(L6470)
        /* Minimum spe4ed settings to dSPIN_CONF_PARAM_MIN_SPEED in steps/s, range 0 to 976.3 steps/s */
        dSPIN_RegsStruct.MIN_SPEED        = MinSpd_Steps_to_Par(0);
        /* Acceleration duty cycle (torque) settings to dSPIN_CONF_PARAM_KVAL_ACC in %, range 0 to 99.6% */
        dSPIN_RegsStruct.KVAL_ACC         = Kval_Perc_to_Par(10);
        /* Deceleration duty cycle (torque) settings to dSPIN_CONF_PARAM_KVAL_DEC in %, range 0 to 99.6% */
        dSPIN_RegsStruct.KVAL_DEC         = Kval_Perc_to_Par(10);        
        /* Run duty cycle (torque) settings to dSPIN_CONF_PARAM_KVAL_RUN in %, range 0 to 99.6% */
        dSPIN_RegsStruct.KVAL_RUN         = Kval_Perc_to_Par(10);
        /* Hold duty cycle (torque) settings to dSPIN_CONF_PARAM_KVAL_HOLD in %, range 0 to 99.6% */
        dSPIN_RegsStruct.KVAL_HOLD         =Kval_Perc_to_Par(5);
                /* Thermal compensation param settings to dSPIN_CONF_PARAM_K_THERM, range 1 to 1.46875 */
        dSPIN_RegsStruct.K_THERM         = KTherm_to_Par(1);
        /* Intersect speed settings for BEMF compensation to dSPIN_CONF_PARAM_INT_SPD in steps/s, range 0 to 3906 steps/s */
        dSPIN_RegsStruct.INT_SPD         = IntSpd_Steps_to_Par(200);
        /* BEMF start slope settings for BEMF compensation to dSPIN_CONF_PARAM_ST_SLP in % step/s, range 0 to 0.4% s/step */
        dSPIN_RegsStruct.ST_SLP         = BEMF_Slope_Perc_to_Par(0.038);
        /* BEMF final acc slope settings for BEMF compensation to dSPIN_CONF_PARAM_FN_SLP_ACC in% step/s, range 0 to 0.4% s/step */
        dSPIN_RegsStruct.FN_SLP_ACC = BEMF_Slope_Perc_to_Par(0.063);
        /* BEMF final dec slope settings for BEMF compensation to dSPIN_CONF_PARAM_FN_SLP_DEC in% step/s, range 0 to 0.4% s/step */
        dSPIN_RegsStruct.FN_SLP_DEC = BEMF_Slope_Perc_to_Par(0.063);
        /* Stall threshold settings to dSPIN_CONF_PARAM_STALL_TH in mA, range 31.25 to 4000mA */
        dSPIN_RegsStruct.STALL_TH         = StallTh_to_Par(1500);//StallTh_to_Par(3000);//StallTh_to_Par(dSPIN_CONF_PARAM_STALL_TH);
        /* Set Config register according to config parameters */
        /* clock setting, switch hard stop interrupt mode, */
        /*  supply voltage compensation, overcurrent shutdown */
        /* slew-rate , PWM frequency */
        dSPIN_RegsStruct.CONFIG         = (uint16_t)dSPIN_CONF_PARAM_CLOCK_SETTING |
                                          (uint16_t)dSPIN_CONF_PARAM_SW_MODE           |
                                          (uint16_t)dSPIN_CONF_PARAM_VS_COMP       |   
                                          (uint16_t)dSPIN_CONF_PARAM_OC_SD         |
                                          (uint16_t)dSPIN_CONF_PARAM_SR                   |
                                          (uint16_t)dSPIN_CONF_PARAM_PWM_DIV       |
                                          (uint16_t)dSPIN_CONF_PARAM_PWM_MUL;
#endif /* defined(L6470) */
        /* Overcurrent threshold settings to dSPIN_CONF_PARAM_OCD_TH in mA */
        dSPIN_RegsStruct.OCD_TH         = dSPIN_OCD_TH_1500mA;  
        /* Alarm settings to dSPIN_CONF_PARAM_ALARM_EN */
        dSPIN_RegsStruct.ALARM_EN         = dSPIN_CONF_PARAM_ALARM_EN;
        /* Step mode and sycn mode settings via dSPIN_CONF_PARAM_SYNC_MODE and dSPIN_CONF_PARAM_STEP_MODE */
        dSPIN_RegsStruct.STEP_MODE         = dSPIN_STEP_SEL_1_128;

        /* Program all dSPIN registers */
        dSPIN_Registers_Set(&dSPIN_RegsStruct);
  
                                dSPIN_Move(FWD, (uint32_t)(10000));
                                while(dSPIN_Busy_HW());
                                
                                dSPIN_Run(REV, Speed_Steps_to_Par(400));
                                        dSPIN_Delay(0x004FFFFF);
                                        dSPIN_Hard_Stop();
                                  dSPIN_Move(FWD, (uint32_t)(10000));
                                while(dSPIN_Busy_HW());
                                GPIO_SetBits(GPIOE,GPIO_Pin_5);
                                while(1);

使用官方的程序,如果只执行        move指令,电机运行没有问题。                        
dSPIN_Move(FWD, (uint32_t)(10000));
while(dSPIN_Busy_HW());
但是如果如上执行一个move指令,在执行一个RUN指令,在执行一个MOVE指令后,电机就一直转,且方向也不会变。

相关帖子

沙发
wei12123| | 2018-7-6 15:52 | 只看该作者
力矩不够,,我也没办法提到1000步每秒

使用特权

评论回复
板凳
michegan| | 2018-7-17 19:34 | 只看该作者
本帖最后由 michegan 于 2018-7-17 19:36 编辑

请问电机不能停止的问题解决了吗,是什么原因?我这边是用FPGA在控制电机,检测到BUSY信号时钟忙,给定的步数是1000步,但电机自身不停止,

使用特权

评论回复
地板
冼树华| | 2018-8-27 11:54 | 只看该作者
楼主,你是用什么单片机控制的?还有这些程序怎么弄到的?跪求

使用特权

评论回复
5
冼树华| | 2018-8-27 14:36 | 只看该作者
本帖最后由 冼树华 于 2018-8-27 15:33 编辑

dSPIN_Move(FWD, (uint32_t)(10000));
  while(dSPIN_Busy_HW());

  这里是不是应该加上  dSPIN_SoftStop();
  while(dSPIN_Busy_HW());
  delay(500);即每个运行指令间加上停止。
                              
dSPIN_Run(REV, Speed_Steps_to_Par(400));

使用特权

评论回复
6
kwin2015| | 2019-1-11 16:41 | 只看该作者
我是拿L6470H没办法,驱动电机问题好多。不管是高速力矩还是低速力矩,都很低,根本达不到电机标称力矩。稍微增加KVAL力矩参数,就开始发热发烫。

使用特权

评论回复
7
linda_6000| | 2019-1-15 09:49 | 只看该作者
帮顶

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

19

帖子

1

粉丝