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

STEVAL-SPIN3201评估板实现位置控制Position Control(增量编码器)

[复制链接]
Moran_Hansir 发布时间:2020-9-3 10:09
软件:Motor Control Workbench 5.4.3,STM32CubeMX 6.0.1,Keil MDK-ARM v5
硬件:STEVAL-SPIN3201 评估板(控制+驱动一体),电机 SCORPION SII-2215-900KV(普通的无人机电机,可视为表贴PMSM),编码器欧姆龙 E6B2-CWZ5G(1020线,ABZ输出)

MCSDK 本来只支持速度控制和力矩(电流)控制,但官方在MCSDK 5.4.3版本中增加了位置控制功能,可详见 Release Notes for X-Cube-MCSDK。位置控制的具体说明在官方 AN5464 文档中。AN5464 给的例子用的是 NUCLEO-F302R8 + X-NUCLEO-IHM08M1 套件,我这里用的是STEVAL-SPIN3201,在实现 位置控制过程中(我们称为Position Control,但在生成的代码中叫做 Trajectory Control,简写TC,即TC类函数),个人总结了几点需要稍微注意下:

1. 目前的固件只支持增量编码器,AB相输出或ABZ相输出均可,目前不支持磁编码器等绝对位置传感器;

2. 在位置控制模式中,如果用AB相编码器,则电机对齐后的位置为0初始机械位置,如果用ABZ相编码器,电机对齐后会缓慢转动一圈来找Z相有输出的位置,并将该位置作为0初始机械位置;

3. 在用位置控制模式时,需要整定电流环和位置环参数,在 drive_parameters.h 头文件中;

我用的是ABZ相编码器,在配置好Workbench后还需要在CubeMX中把Z相对应的管脚PA2配置为GPIO_EXTI2,即Z相有输出时会触发中断来标定0初始机械位置。
生成工程文件后,还需要修改一下代码,在main.c中,官方给的测试位置控制的代码为:
  1. /* USER CODE BEGIN 2 */
  2. MC_StartMotor1();
  3. /* USER CODE END 2 */
  4. /* Infinite loop */
  5. /* USER CODE BEGIN WHILE */
  6. while(MC_GetAlignmentStatusMotor1()!=TC_ALIGNMENT_COMPLETED){}
  7. while (1)
  8. {
  9. /* USER CODE END WHILE */
  10. /* USER CODE BEGIN 3 */
  11. MC_ProgramPositionCommandMotor1(3.14/2,0.1);
  12. HAL_Delay(2000);
  13. MC_ProgramPositionCommandMotor1(-3.14/2,0.1);
  14. HAL_Delay(2000);
  15. }
  16. /* USER CODE END 3 */
复制代码
我用起来未成功,修改了电机启动函数的位置、调整了位置控制的时间参数、开启了Z相对应管脚的中断,代码如下:
  1.   /* USER CODE BEGIN 2 */

  2.   /* USER CODE END 2 */

  3.   /* Infinite loop */
  4.   /* USER CODE BEGIN WHILE */
  5.         while(MC_GetAlignmentStatusMotor1()!=TC_ALIGNMENT_COMPLETED){}
  6.        MC_StartMotor1();
  7.   while (1)
  8.   {
  9.     /* USER CODE END WHILE */
  10.                
  11.     /* USER CODE BEGIN 3 */
  12.                 MC_ProgramPositionCommandMotor1(3.14/2,1);
  13.                 HAL_Delay(2000);
  14.                 MC_ProgramPositionCommandMotor1(-3.14/2,1);
  15.                 HAL_Delay(2000);
  16.   }
  17.   /* USER CODE END 3 */
  18. }
复制代码
  1. static void MX_NVIC_Init(void)
  2. {
  3.   /* TIM1_BRK_UP_TRG_COM_IRQn interrupt configuration */
  4.   HAL_NVIC_SetPriority(TIM1_BRK_UP_TRG_COM_IRQn, 0, 0);
  5.   HAL_NVIC_EnableIRQ(TIM1_BRK_UP_TRG_COM_IRQn);
  6.   /* DMA1_Channel1_IRQn interrupt configuration */
  7.   HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 1, 0);
  8.   HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
  9.   /* TIM2_IRQn interrupt configuration */
  10.   HAL_NVIC_SetPriority(TIM2_IRQn, 3, 0);
  11.   HAL_NVIC_EnableIRQ(TIM2_IRQn);
  12.   /* USART1_IRQn interrupt configuration */
  13.   HAL_NVIC_SetPriority(USART1_IRQn, 3, 0);
  14.   HAL_NVIC_EnableIRQ(USART1_IRQn);
  15.   /* EXTI0_1_IRQn interrupt configuration */
  16.   HAL_NVIC_SetPriority(EXTI0_1_IRQn, 3, 0);
  17.   HAL_NVIC_EnableIRQ(EXTI0_1_IRQn);
  18.   /* EXTI2_3_IRQn interrupt configuration */
  19.   HAL_NVIC_SetPriority(EXTI2_3_IRQn, 3, 0);
  20.   HAL_NVIC_EnableIRQ(EXTI2_3_IRQn);
  21. }
复制代码
该位置控制测试程序为电机每隔2s正转到90°位置,然后反转到90°位置,官方给的位置控制时间为0.1秒,我在我的电机上响应跟不上,这个可能和整定的控制器参数有关,由于是测试位置控制模式ok不ok,所以把时间改为了1秒。最后上视频:

收藏 1 评论2 发布时间:2020-9-3 10:09

举报

2个回答
ddwqbbb 回答时间:2020-9-16 18:09:12
follow模式好用吗
Kevin201707 回答时间:2020-11-20 15:08:12
收藏

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版