你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
还是看不穿 提问时间:2017-9-29 09:12 /
悬赏1ST金币已解决
如题,我用ST的L6470电机驱动芯片,F091为控制芯片。现在用官方L6470的驱动程序实现控制步进电机,细分为128。最大速度设置低于1000步/秒时,正常运行不会产生太大噪音和振动,当设置最大速度超过1000步/秒时电机噪音非常大,振动厉害,当设置最大速度超过1500步/秒时,电机回出现不转的现象,并发出强烈的噪音。

  1. <span style="background-color: rgb(255, 255, 255);">程序注释乱码了</span><div class="blockcode"><blockquote>/**********************************************************************
  2. * 名 称:L6470_ConfigurationX
  3. * 功 能:配置X号电机各参数
  4. * 入口参数:
  5. * 出口参数:
  6. * 说 明:步进电机初始化设置
  7. ***********************************************************************/
  8. void L6470_ConfigurationX(void)
  9. {
  10. /* 初始化L6470各寄存器初值 */
  11. dSPIN_Regs_Struct_Reset(&dSPIN_RegsStruct);
  12. /* 加速率的设置为466 steps/s2,范围14.55至59590 steps/s2*/
  13. dSPIN_RegsStruct.ACC = AccDec_Steps_to_Par(800);//466);
  14. /* 减速率的设置为466 steps/s2,范围14.55至59590 steps/s2 */
  15. dSPIN_RegsStruct.DEC = AccDec_Steps_to_Par(800);//466);
  16. /* 最大速度设置为488步/秒,最大速度设置范围为15.25至15610步/秒*/
  17. dSPIN_RegsStruct.MAX_SPEED = MaxSpd_Steps_to_Par(1000);
  18. /* 最小速度设置为0步/秒,取值范围为0至976.3,步骤/秒*/
  19. dSPIN_RegsStruct.MIN_SPEED = MinSpd_Steps_to_Par(0);
  20. /* 全步进速度设置252步/秒,范围为7.63到15625步/秒*/
  21. dSPIN_RegsStruct.FS_SPD = FSSpd_Steps_to_Par(2000);//252);
  22. /*保持占空比(转矩)设定为10%,范围在0到99.6%*/
  23. dSPIN_RegsStruct.KVAL_HOLD = Kval_Perc_to_Par(5);
  24. /* 运行占空比(转矩)设定为10%,范围在0到99.6%*/
  25. dSPIN_RegsStruct.KVAL_RUN = Kval_Perc_to_Par(10);
  26. /* 加速的占空比(转矩)设定为10%,范围在0到99.6%*/
  27. dSPIN_RegsStruct.KVAL_ACC = Kval_Perc_to_Par(10);
  28. /* 减速的占空比(转矩)设定为10%,范围在0到99.6% */
  29. dSPIN_RegsStruct.KVAL_DEC = Kval_Perc_to_Par(10);
  30. /* 加速/减速曲线斜率的速度值。 range 0 to 3906 steps/s */
  31. dSPIN_RegsStruct.INT_SPD = IntSpd_Steps_to_Par(200);//200);
  32. /* 加减速——开始斜率(反电动势)BEMF补偿设置 0 to 0.4% s/step */
  33. dSPIN_RegsStruct.ST_SLP = BEMF_Slope_Perc_to_Par(0.038);
  34. /* 加速度——结束斜率(反电动势)BEMF补偿设置 0 to 0.4% s/step */
  35. dSPIN_RegsStruct.FN_SLP_ACC = BEMF_Slope_Perc_to_Par(0.063);
  36. /* 减速度——结束斜率(反电动势)BEMF补偿设置 0 to 0.4% s/step */
  37. dSPIN_RegsStruct.FN_SLP_DEC = BEMF_Slope_Perc_to_Par(0.063);
  38. /* 热补偿参数设置为1,范围为1-1.46875*/
  39. dSPIN_RegsStruct.K_THERM = KTherm_to_Par(1);
  40. /* 过流阈值设置1500毫安 */
  41. dSPIN_RegsStruct.OCD_TH = dSPIN_OCD_TH_2250mA; //375mA//750mA//1125mA//1500mA//1875mA//2250mA//2625mA//3000mA//3375mA//3750mA//4125mA//4500mA//4875mA//5250mA//5625mA//6000mA
  42. /* 失速阈值设置至1000mA,范围:31.25 to 4000mA */
  43. dSPIN_RegsStruct.STALL_TH = StallTh_to_Par(3000);//1000
  44. /* 设置到128微步模式 */
  45. dSPIN_RegsStruct.STEP_MODE = dSPIN_STEP_SEL_1_128;
  46. /* 报警设置 - 启用所有警报 */
  47. dSPIN_RegsStruct.ALARM_EN = dSPIN_ALARM_EN_ALL_ENABLE;
  48. //dSPIN_ALARM_EN_OVERCURRENT
  49. //|dSPIN_ALARM_EN_THERMAL_SHUTDOWN
  50. //|dSPIN_ALARM_EN_THERMAL_WARNING
  51. //|dSPIN_ALARM_EN_UNDER_VOLTAGE
  52. //|dSPIN_ALARM_EN_STALL_DET_A
  53. //|dSPIN_ALARM_EN_STALL_DET_B;
  54. //|dSPIN_ALARM_EN_SW_TURN_ON
  55. //|dSPIN_ALARM_EN_WRONG_NPERF_CMD;
  56. /* 内部振荡器,2MHz的的OSCOUT时钟,电源电压补偿禁用,启用过流关断,压摆率= 290 V /us,PWM频率为15.6kHz *///ENABLE// //过流关断
  57. dSPIN_RegsStruct.CONFIG = dSPIN_CONFIG_INT_16MHZ_OSCOUT_2MHZ
  58. | dSPIN_CONFIG_SW_HARD_STOP
  59. | dSPIN_CONFIG_VS_COMP_DISABLE
  60. | dSPIN_CONFIG_OC_SD_DISABLE
  61. | dSPIN_CONFIG_SR_290V_us
  62. | dSPIN_CONFIG_PWM_DIV_2
  63. | dSPIN_CONFIG_PWM_MUL_1;
  64. // Program all dSPIN registers
  65. dSPIN_Registers_Set(&dSPIN_RegsStruct);
  66. }
复制代码


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

最佳答案

查看完整内容

L6470可以在8~45V的宽电压下工作,峰值电流7A(平均电流最大3A)。 而你的电机,最大输出才1.1A。 所以,你应该看看电机的资料, 最大驱动电流是多少? 最大转速是多少? 最大支持细分步数是多少? 还有用示波器看看电机反电动势。 通常情况下,步进电机驱动电路是电流式控制设计, 电流控制器监测并控制绕组电流强度, 因为电源电压变化、停转等会导致电流有很大变化, 而且,随着转速提高或减小,电机的反电动势(BEMF)的变化 ...
收藏 2 评论48 发布时间:2017-9-29 09:12

举报

48个回答
无薪税绵 回答时间: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的各个补偿因子和对应寄存器值。


付上相关资料:
1、STM32控制L6470的官方资料.pdf (1.94 MB, 下载次数: 271)

评分

参与人数 2ST金币 +1 蝴蝶豆 +5 收起 理由
ouy008 + 1 很给力!
zero99 + 5

查看全部评分

还是看不穿 回答时间:2017-9-29 09:22:18
程序注释乱码了
  1. /**********************************************************************
  2. * 名    称:L6470_ConfigurationX
  3. * 功    能:配置X号电机各参数
  4. * 入口参数:
  5. * 出口参数:
  6. * 说    明:步进电机初始化设置
  7. ***********************************************************************/
  8. void L6470_ConfigurationX(void)
  9. {
  10.         /* 初始化L6470各寄存器初值 */
  11.         dSPIN_Regs_Struct_Reset(&dSPIN_RegsStruct);
  12.         /* 加速率的设置为466 steps/s2,范围14.55至59590 steps/s2*/
  13.         dSPIN_RegsStruct.ACC                 = AccDec_Steps_to_Par(800);//466);
  14.         /* 减速率的设置为466 steps/s2,范围14.55至59590 steps/s2 */
  15.         dSPIN_RegsStruct.DEC                 = AccDec_Steps_to_Par(800);//466);
  16.         /* 最大速度设置为488步/秒,最大速度设置范围为15.25至15610步/秒*/
  17.         dSPIN_RegsStruct.MAX_SPEED         = MaxSpd_Steps_to_Par(1000);
  18.         /* 最小速度设置为0步/秒,取值范围为0至976.3,步骤/秒*/
  19.         dSPIN_RegsStruct.MIN_SPEED        = MinSpd_Steps_to_Par(0);
  20.         /* 全步进速度设置252步/秒,范围为7.63到15625步/秒*/
  21.         dSPIN_RegsStruct.FS_SPD         = FSSpd_Steps_to_Par(2000);//252);
  22.         /*保持占空比(转矩)设定为10%,范围在0到99.6%*/
  23.         dSPIN_RegsStruct.KVAL_HOLD         = Kval_Perc_to_Par(5);
  24.         /* 运行占空比(转矩)设定为10%,范围在0到99.6%*/
  25.         dSPIN_RegsStruct.KVAL_RUN         = Kval_Perc_to_Par(10);
  26.         /* 加速的占空比(转矩)设定为10%,范围在0到99.6%*/
  27.         dSPIN_RegsStruct.KVAL_ACC         = Kval_Perc_to_Par(10);
  28.         /* 减速的占空比(转矩)设定为10%,范围在0到99.6% */
  29.         dSPIN_RegsStruct.KVAL_DEC         = Kval_Perc_to_Par(10);               
  30.         /* 加速/减速曲线斜率的速度值。 range 0 to 3906 steps/s */
  31.         dSPIN_RegsStruct.INT_SPD         = IntSpd_Steps_to_Par(200);//200);
  32.         /* 加减速——开始斜率(反电动势)BEMF补偿设置 0 to 0.4% s/step */
  33.         dSPIN_RegsStruct.ST_SLP         = BEMF_Slope_Perc_to_Par(0.038);
  34.         /* 加速度——结束斜率(反电动势)BEMF补偿设置 0 to 0.4% s/step */
  35.         dSPIN_RegsStruct.FN_SLP_ACC = BEMF_Slope_Perc_to_Par(0.063);
  36.         /* 减速度——结束斜率(反电动势)BEMF补偿设置 0 to 0.4% s/step */
  37.         dSPIN_RegsStruct.FN_SLP_DEC = BEMF_Slope_Perc_to_Par(0.063);
  38.         /* 热补偿参数设置为1,范围为1-1.46875*/
  39.         dSPIN_RegsStruct.K_THERM         = KTherm_to_Par(1);
  40.         /* 过流阈值设置1500毫安 */
  41.         dSPIN_RegsStruct.OCD_TH         = dSPIN_OCD_TH_2250mA; //375mA//750mA//1125mA//1500mA//1875mA//2250mA//2625mA//3000mA//3375mA//3750mA//4125mA//4500mA//4875mA//5250mA//5625mA//6000mA
  42.         /* 失速阈值设置至1000mA,范围:31.25 to 4000mA */
  43.         dSPIN_RegsStruct.STALL_TH         = StallTh_to_Par(3000);//1000
  44.         /* 设置到128微步模式 */
  45.         dSPIN_RegsStruct.STEP_MODE         = dSPIN_STEP_SEL_1_128;
  46.         /* 报警设置 - 启用所有警报 */
  47.         dSPIN_RegsStruct.ALARM_EN         = dSPIN_ALARM_EN_ALL_ENABLE;       
  48.                                                                         //dSPIN_ALARM_EN_OVERCURRENT
  49.                                                                    //|dSPIN_ALARM_EN_THERMAL_SHUTDOWN
  50.                                                                    //|dSPIN_ALARM_EN_THERMAL_WARNING
  51.                                                                    //|dSPIN_ALARM_EN_UNDER_VOLTAGE
  52.                                                                    //|dSPIN_ALARM_EN_STALL_DET_A       
  53.                                                                    //|dSPIN_ALARM_EN_STALL_DET_B;
  54.                                                                    //|dSPIN_ALARM_EN_SW_TURN_ON
  55.                                                                    //|dSPIN_ALARM_EN_WRONG_NPERF_CMD;
  56.         /* 内部振荡器,2MHz的的OSCOUT时钟,电源电压补偿禁用,启用过流关断,压摆率= 290 V /us,PWM频率为15.6kHz *///ENABLE// //过流关断
  57.         dSPIN_RegsStruct.CONFIG         = dSPIN_CONFIG_INT_16MHZ_OSCOUT_2MHZ
  58.                                                                 | dSPIN_CONFIG_SW_HARD_STOP
  59.                                                                 | dSPIN_CONFIG_VS_COMP_DISABLE       
  60.                                                                 | dSPIN_CONFIG_OC_SD_DISABLE        
  61.                                                                 | dSPIN_CONFIG_SR_290V_us       
  62.                                                                 | dSPIN_CONFIG_PWM_DIV_2       
  63.                                                                 | dSPIN_CONFIG_PWM_MUL_1;       
  64.         // Program all dSPIN registers
  65.         dSPIN_Registers_Set(&dSPIN_RegsStruct);
  66. }
复制代码
五哥1 回答时间:2017-10-1 08:31:46
电机匹配吗?
jundao721 回答时间:2018-3-9 09:31:45
再对比一下电机的参数,看看和你的设置是不是合适

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

七哥 回答时间:2018-3-9 09:54:32
有电机参数吗?对这个比较好奇。以前也玩过步进电机,但没你这复杂,步速没你这快。有噪音和振动比较正常。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wenyangzeng 回答时间:2018-3-9 10:04:47
调高转速震动、停转,应该是保护电路起控了,或者电源供电电压下降了。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

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

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

jcx0324 回答时间:2018-3-9 11:23:34
是不是供电电压太低了,提高点电压看看

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

anny 回答时间:2018-3-9 13:06:50
检查一下电路是不是超过了最大速度限制,造成了信号不正常

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

orima 回答时间:2018-3-9 21:24:12
建议先好好看看L6470官方资料和应用案例.

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

lhwstm32 回答时间:2018-3-12 21:31:01
电路可能超过了最大速度限制!

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

蟲子 回答时间:2018-3-13 09:28:11
学习学习!
arion1 回答时间:2018-7-10 11:11:04
我用的是AM23HS5412-01的电机,细分1/8,上到6400步/s就开始卡顿了,转不起来了
ouy008 回答时间:2018-7-25 15:54:51
最近也在用这个芯片,振动太大,还在找原因
1234下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版