还是看不穿 发表于 2017-9-29 09:12:08

有谁用过电机驱动芯片L6470吗?电机的速度升不上去啊。

如题,我用ST的L6470电机驱动芯片,F091为控制芯片。现在用官方L6470的驱动程序实现控制步进电机,细分为128。最大速度设置低于1000步/秒时,正常运行不会产生太大噪音和振动,当设置最大速度超过1000步/秒时电机噪音非常大,振动厉害,当设置最大速度超过1500步/秒时,电机回出现不转的现象,并发出强烈的噪音。

<span style="background-color: rgb(255, 255, 255);">程序注释乱码了</span><div class="blockcode"><blockquote>/**********************************************************************
* 名 称:L6470_ConfigurationX
* 功 能:配置X号电机各参数
* 入口参数:
* 出口参数:
* 说 明:步进电机初始化设置
***********************************************************************/
void L6470_ConfigurationX(void)
{
/* 初始化L6470各寄存器初值 */
dSPIN_Regs_Struct_Reset(&dSPIN_RegsStruct);
/* 加速率的设置为466 steps/s2,范围14.55至59590 steps/s2*/
dSPIN_RegsStruct.ACC = AccDec_Steps_to_Par(800);//466);
/* 减速率的设置为466 steps/s2,范围14.55至59590 steps/s2 */
dSPIN_RegsStruct.DEC = AccDec_Steps_to_Par(800);//466);
/* 最大速度设置为488步/秒,最大速度设置范围为15.25至15610步/秒*/
dSPIN_RegsStruct.MAX_SPEED = MaxSpd_Steps_to_Par(1000);
/* 最小速度设置为0步/秒,取值范围为0至976.3,步骤/秒*/
dSPIN_RegsStruct.MIN_SPEED = MinSpd_Steps_to_Par(0);
/* 全步进速度设置252步/秒,范围为7.63到15625步/秒*/
dSPIN_RegsStruct.FS_SPD = FSSpd_Steps_to_Par(2000);//252);
/*保持占空比(转矩)设定为10%,范围在0到99.6%*/
dSPIN_RegsStruct.KVAL_HOLD = Kval_Perc_to_Par(5);
/* 运行占空比(转矩)设定为10%,范围在0到99.6%*/
dSPIN_RegsStruct.KVAL_RUN = Kval_Perc_to_Par(10);
/* 加速的占空比(转矩)设定为10%,范围在0到99.6%*/
dSPIN_RegsStruct.KVAL_ACC = Kval_Perc_to_Par(10);
/* 减速的占空比(转矩)设定为10%,范围在0到99.6% */
dSPIN_RegsStruct.KVAL_DEC = Kval_Perc_to_Par(10);
/* 加速/减速曲线斜率的速度值。 range 0 to 3906 steps/s */
dSPIN_RegsStruct.INT_SPD = IntSpd_Steps_to_Par(200);//200);
/* 加减速——开始斜率(反电动势)BEMF补偿设置 0 to 0.4% s/step */
dSPIN_RegsStruct.ST_SLP = BEMF_Slope_Perc_to_Par(0.038);
/* 加速度——结束斜率(反电动势)BEMF补偿设置 0 to 0.4% s/step */
dSPIN_RegsStruct.FN_SLP_ACC = BEMF_Slope_Perc_to_Par(0.063);
/* 减速度——结束斜率(反电动势)BEMF补偿设置 0 to 0.4% s/step */
dSPIN_RegsStruct.FN_SLP_DEC = BEMF_Slope_Perc_to_Par(0.063);
/* 热补偿参数设置为1,范围为1-1.46875*/
dSPIN_RegsStruct.K_THERM = KTherm_to_Par(1);
/* 过流阈值设置1500毫安 */
dSPIN_RegsStruct.OCD_TH = dSPIN_OCD_TH_2250mA; //375mA//750mA//1125mA//1500mA//1875mA//2250mA//2625mA//3000mA//3375mA//3750mA//4125mA//4500mA//4875mA//5250mA//5625mA//6000mA
/* 失速阈值设置至1000mA,范围:31.25 to 4000mA */
dSPIN_RegsStruct.STALL_TH = StallTh_to_Par(3000);//1000
/* 设置到128微步模式 */
dSPIN_RegsStruct.STEP_MODE = dSPIN_STEP_SEL_1_128;
/* 报警设置 - 启用所有警报 */
dSPIN_RegsStruct.ALARM_EN = dSPIN_ALARM_EN_ALL_ENABLE;
//dSPIN_ALARM_EN_OVERCURRENT
//|dSPIN_ALARM_EN_THERMAL_SHUTDOWN
//|dSPIN_ALARM_EN_THERMAL_WARNING
//|dSPIN_ALARM_EN_UNDER_VOLTAGE
//|dSPIN_ALARM_EN_STALL_DET_A
//|dSPIN_ALARM_EN_STALL_DET_B;
//|dSPIN_ALARM_EN_SW_TURN_ON
//|dSPIN_ALARM_EN_WRONG_NPERF_CMD;
/* 内部振荡器,2MHz的的OSCOUT时钟,电源电压补偿禁用,启用过流关断,压摆率= 290 V /us,PWM频率为15.6kHz *///ENABLE// //过流关断
dSPIN_RegsStruct.CONFIG = dSPIN_CONFIG_INT_16MHZ_OSCOUT_2MHZ
| dSPIN_CONFIG_SW_HARD_STOP
| dSPIN_CONFIG_VS_COMP_DISABLE
| dSPIN_CONFIG_OC_SD_DISABLE
| dSPIN_CONFIG_SR_290V_us
| dSPIN_CONFIG_PWM_DIV_2
| dSPIN_CONFIG_PWM_MUL_1;
// Program all dSPIN registers
dSPIN_Registers_Set(&dSPIN_RegsStruct);
}

上面是L6470初始化的参数设置。另外我测了一下L6470的输出电流,我逐渐把最大速度的值增加,输出电流也随之增加,但电流最大输出也就1.1A,不会超过1.1A。不知道什么原因,请问有大神用过这个芯片吗?怎么会出现这种状况的。

无薪税绵 发表于 2017-9-29 09:12:09

L6470可以在8~45V的宽电压下工作,峰值电流7A(平均电流最大3A)。
而你的电机,最大输出才1.1A。
所以,你应该看看电机的资料,
最大驱动电流是多少?
最大转速是多少?
最大支持细分步数是多少?
还有用示波器看看电机反电动势。

通常情况下,步进电机驱动电路是电流式控制设计,
电流控制器监测并控制绕组电流强度,
因为电源电压变化、停转等会导致电流有很大变化,
而且,随着转速提高或减小,电机的反电动势(BEMF)的变化也会导致绕组电流的变化。

L6470可以通过在电机绕组上施加电压来控制相电流。
虽然不能直接控制相电流的幅度,但是,
相电流与相电压的大小、负载、转矩、电机电学特性和转速密切相关。
有效输出电压与电机电源电压和补偿系数Kval的积成正比。

KVAL=((KVAL_X+BEMF_COMP)×VSCOMP ×K_THERM)×microstep
其中
KVAL_X      是当前Kval值,
BEMF_COMP 是反电动势补偿因子,
VSCOMP       是输入电压,
K_THERM   是线圈电阻补偿因子,
microstep      是当前设置的微步数。

还有,你可以利用ST公司提供的dSPIN evaluation tool可以方便地求出Kval值,
只要你把电机的各个参数代入数据框,
点击一下evaluate按键就可以求出L6470的各个补偿因子和对应寄存器值。


付上相关资料:











还是看不穿 发表于 2017-9-29 09:22:18

程序注释乱码了 /**********************************************************************
* 名    称:L6470_ConfigurationX
* 功    能:配置X号电机各参数
* 入口参数:
* 出口参数:
* 说    明:步进电机初始化设置
***********************************************************************/
void L6470_ConfigurationX(void)
{
        /* 初始化L6470各寄存器初值 */
        dSPIN_Regs_Struct_Reset(&dSPIN_RegsStruct);
        /* 加速率的设置为466 steps/s2,范围14.55至59590 steps/s2*/
        dSPIN_RegsStruct.ACC                 = AccDec_Steps_to_Par(800);//466);
        /* 减速率的设置为466 steps/s2,范围14.55至59590 steps/s2 */
        dSPIN_RegsStruct.DEC                 = AccDec_Steps_to_Par(800);//466);
        /* 最大速度设置为488步/秒,最大速度设置范围为15.25至15610步/秒*/
        dSPIN_RegsStruct.MAX_SPEED         = MaxSpd_Steps_to_Par(1000);
        /* 最小速度设置为0步/秒,取值范围为0至976.3,步骤/秒*/
        dSPIN_RegsStruct.MIN_SPEED        = MinSpd_Steps_to_Par(0);
        /* 全步进速度设置252步/秒,范围为7.63到15625步/秒*/
        dSPIN_RegsStruct.FS_SPD         = FSSpd_Steps_to_Par(2000);//252);
        /*保持占空比(转矩)设定为10%,范围在0到99.6%*/
        dSPIN_RegsStruct.KVAL_HOLD         = Kval_Perc_to_Par(5);
        /* 运行占空比(转矩)设定为10%,范围在0到99.6%*/
        dSPIN_RegsStruct.KVAL_RUN         = Kval_Perc_to_Par(10);
        /* 加速的占空比(转矩)设定为10%,范围在0到99.6%*/
        dSPIN_RegsStruct.KVAL_ACC         = Kval_Perc_to_Par(10);
        /* 减速的占空比(转矩)设定为10%,范围在0到99.6% */
        dSPIN_RegsStruct.KVAL_DEC         = Kval_Perc_to_Par(10);               
        /* 加速/减速曲线斜率的速度值。 range 0 to 3906 steps/s */
        dSPIN_RegsStruct.INT_SPD         = IntSpd_Steps_to_Par(200);//200);
        /* 加减速——开始斜率(反电动势)BEMF补偿设置 0 to 0.4% s/step */
        dSPIN_RegsStruct.ST_SLP         = BEMF_Slope_Perc_to_Par(0.038);
        /* 加速度——结束斜率(反电动势)BEMF补偿设置 0 to 0.4% s/step */
        dSPIN_RegsStruct.FN_SLP_ACC = BEMF_Slope_Perc_to_Par(0.063);
        /* 减速度——结束斜率(反电动势)BEMF补偿设置 0 to 0.4% s/step */
        dSPIN_RegsStruct.FN_SLP_DEC = BEMF_Slope_Perc_to_Par(0.063);
        /* 热补偿参数设置为1,范围为1-1.46875*/
        dSPIN_RegsStruct.K_THERM         = KTherm_to_Par(1);
        /* 过流阈值设置1500毫安 */
        dSPIN_RegsStruct.OCD_TH         = dSPIN_OCD_TH_2250mA; //375mA//750mA//1125mA//1500mA//1875mA//2250mA//2625mA//3000mA//3375mA//3750mA//4125mA//4500mA//4875mA//5250mA//5625mA//6000mA
        /* 失速阈值设置至1000mA,范围:31.25 to 4000mA */
        dSPIN_RegsStruct.STALL_TH         = StallTh_to_Par(3000);//1000
        /* 设置到128微步模式 */
        dSPIN_RegsStruct.STEP_MODE         = dSPIN_STEP_SEL_1_128;
        /* 报警设置 - 启用所有警报 */
        dSPIN_RegsStruct.ALARM_EN         = dSPIN_ALARM_EN_ALL_ENABLE;       
                                                                        //dSPIN_ALARM_EN_OVERCURRENT
                                                                   //|dSPIN_ALARM_EN_THERMAL_SHUTDOWN
                                                                   //|dSPIN_ALARM_EN_THERMAL_WARNING
                                                                   //|dSPIN_ALARM_EN_UNDER_VOLTAGE
                                                                   //|dSPIN_ALARM_EN_STALL_DET_A       
                                                                   //|dSPIN_ALARM_EN_STALL_DET_B;
                                                                   //|dSPIN_ALARM_EN_SW_TURN_ON
                                                                   //|dSPIN_ALARM_EN_WRONG_NPERF_CMD;
        /* 内部振荡器,2MHz的的OSCOUT时钟,电源电压补偿禁用,启用过流关断,压摆率= 290 V /us,PWM频率为15.6kHz *///ENABLE// //过流关断
        dSPIN_RegsStruct.CONFIG         = dSPIN_CONFIG_INT_16MHZ_OSCOUT_2MHZ
                                                                | dSPIN_CONFIG_SW_HARD_STOP
                                                                | dSPIN_CONFIG_VS_COMP_DISABLE       
                                                                | dSPIN_CONFIG_OC_SD_DISABLE        
                                                                | dSPIN_CONFIG_SR_290V_us       
                                                                | dSPIN_CONFIG_PWM_DIV_2       
                                                                | dSPIN_CONFIG_PWM_MUL_1;       
        // Program all dSPIN registers
        dSPIN_Registers_Set(&dSPIN_RegsStruct);
}

五哥1 发表于 2017-10-1 08:31:46

电机匹配吗?

jundao721 发表于 2018-3-9 09:31:45

再对比一下电机的参数,看看和你的设置是不是合适

toofree 发表于 2018-3-9 09:54:32

有电机参数吗?对这个比较好奇。以前也玩过步进电机,但没你这复杂,步速没你这快。有噪音和振动比较正常。

wenyangzeng 发表于 2018-3-9 10:04:47

调高转速震动、停转,应该是保护电路起控了,或者电源供电电压下降了。

feixiang20 发表于 2018-3-9 10:05:25

查看电机参数,看看是不是已经超过限制,如果是超过限制,那么只能选择最稳定的情况。电流输出也是有最大安全值的,超过的话,肯定会引起一异常,看你程序中设置到1.5A可以调节下。

jcx0324 发表于 2018-3-9 11:23:34

是不是供电电压太低了,提高点电压看看

anny 发表于 2018-3-9 13:06:50

检查一下电路是不是超过了最大速度限制,造成了信号不正常
页: [1] 2 3 4 5
查看完整版本: 有谁用过电机驱动芯片L6470吗?电机的速度升不上去啊。