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

ST MC BLDC电机无法快速切换正反转

[复制链接]
ramtron 提问时间:2019-8-14 18:03 /
想用ST MC电机库进行BLDC开发,实际要求电机可以快速切换正反转,但实际实验过程中却无法实现,两方向切换过程中必须要延时一些时间,否则反向无法正常启动。感觉就像是要“缓一下”才行,但这缓
的时间也太长了,我测试时则需500ms或以上(如下程序红色语句所示),想请教下这是什么原因。
开发套件为NUCLEO-IHM01,电机库版本为5.3,测试代码如下:

int main(void)
{
  /* USER CODE BEGIN 1 */
         int16_t Motor1Speed,Motor1SpeedAverage;
         int16_t Motor1Dir;
         uint16_t Motor1State,Motor1Faults;
  /* USER CODE END 1 */
  /* MCU Configuration--------------------------------------------------------*/
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
  /* USER CODE BEGIN Init */
  /* USER CODE END Init */
  /* Configure the system clock */
  SystemClock_Config();
  /* USER CODE BEGIN SysInit */
  /* USER CODE END SysInit */
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ADC1_Init();
  MX_DAC_Init();
  MX_TIM1_Init();
  MX_USART2_UART_Init();
  MX_MotorControl_Init();
  /* Initialize interrupts */
  MX_NVIC_Init();
  /* USER CODE BEGIN 2 */
  /* USER CODE END 2 */
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
                         MC_ProgramSpeedRampMotor1(100/6,600);
                         MC_StartMotor1();
                         HAL_Delay(2000);
                         Motor1Speed = MC_GetMecSpeedReferenceMotor1();
                         Motor1SpeedAverage = MC_GetMecSpeedAverageMotor1();
                         Motor1Dir = MC_GetImposedDirectionMotor1();
                         Motor1State = MC_GetSTMStateMotor1();
                         Motor1Faults = MC_GetOccurredFaultsMotor1();
                         if((Motor1State==10)||(Motor1State==11))
                        {
                                MC_AcknowledgeFaultMotor1();
                        }
                        MC_StopMotor1();
                        HAL_Delay(500);
                               
                         MC_ProgramSpeedRampMotor1(-100/6,600);
                         MC_StartMotor1();
                         HAL_Delay(2000);
                         Motor1Speed = MC_GetMecSpeedReferenceMotor1();
                         Motor1SpeedAverage = MC_GetMecSpeedAverageMotor1();
                         Motor1Dir = MC_GetImposedDirectionMotor1();
                         Motor1State = MC_GetSTMStateMotor1();
                         Motor1Faults = MC_GetOccurredFaultsMotor1();
                         if((Motor1State==10)||(Motor1State==11))
                        {
                                 MC_AcknowledgeFaultMotor1();
                        }
                        MC_StopMotor1();
                        HAL_Delay(500);                       
  }
  /* USER CODE END 3 */
}

收藏 评论16 发布时间:2019-8-14 18:03

举报

16个回答
mmuuss586 回答时间:2019-8-15 09:17:16
可以先停止,再切换啊
mmuuss586 回答时间:2019-8-15 09:19:05

正反转快速切换本身就不太支持,加编码器,位置控制会好些
ramtron 回答时间:2019-8-15 09:27:17
mmuuss586 发表于 2019-8-15 09:19
正反转快速切换本身就不太支持,加编码器,位置控制会好些

正反转快速切换为什么不太支持呢?切换过程中那么长的时间都在做些什么呢?因代码有些复杂,目前还没理解到这一部分。
接下来我是准备加编码器TLE5012B的,我应用是快速跟踪定位,不知用这套件上的方案加上自己修改代码能否实现?
ramtron 回答时间:2019-8-16 10:10:22
没有人了解了吗?
darkghool-16056 回答时间:2019-8-16 17:21:51
ramtron 发表于 2019-8-15 09:27
正反转快速切换为什么不太支持呢?切换过程中那么长的时间都在做些什么呢?因代码有些复杂,目前还没理解 ...

数字接口的磁编码器做反馈一般转速不能太高,转速高了以后读取电角度有延迟电机会振动到怀疑人生
ramtron 回答时间:2019-8-19 09:59:13
darkghool-16056 发表于 2019-8-16 17:21
数字接口的磁编码器做反馈一般转速不能太高,转速高了以后读取电角度有延迟电机会振动到怀疑人生 ...

你好,转速我要求不高的,有3圈每秒都够了。
现在问题是这启动的时间太长了,至少500ms,导致反向转动时等待时间太长了!
如果这时间在30ms左右那都可以了,而且还没搞懂这500ms系统在做些什么,我发现调用MC_StartMotor1();函数后至少需要500ms以上电机才真正动起来!
darkghool-16056 回答时间:2019-8-19 11:29:42
ramtron 发表于 2019-8-19 09:59
你好,转速我要求不高的,有3圈每秒都够了。
现在问题是这启动的时间太长了,至少500ms,导致反向转动时等 ...

低速的话用磁编没问题,我猜想st的库应该是想做的比较安全点,防止瞬间启动烧毁吧,他那里面用到编码器的话还需要启动前定位,它里面的状态切换太麻烦了,我就是移植st库里那几个关键函数,剩下的自己做状态切换,可以做到瞬间启动正反转,但是瞬间反转带来的问题是会有很高的反电动势,不过你这低速的话不会有这问题
这一道天堑 回答时间:2019-8-19 13:02:54
改一下STOPPERMANENCY_MS 宏的值就可以了,唉,你这还好,我这要求来回摆动,1s起码3-4次。目前感觉ST的搞不定,升速即便超调很多也感觉太慢了,我觉得我可能需要换TI的看看了。

评分

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

查看全部评分

子曰好人 回答时间:2019-8-19 14:17:11
ST这套程序就是一个demo,你们对它要求太高了,拿来入门可以好好研究一下,想要达到高性能,还得自己写代码
12下一页

所属标签

相似问题

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