2024-01-19 11:55 AM
Hello All,
I just Bought an Evespin32G4 dual Board.
https://www.st.com/en/evaluation-tools/evspin32g4-dual.html
I completed the configuration using the X-CUBE-MCSDK-6.
Goal: I will command 2 motors 36V, 4A (Moteur Hoverboard)
I generated the cube ide project. When I run mc_startMotor1 (), the motor 1 starts training, then I tested the second motor mc_startMotor2 () and is turning.
Then I tried to run the 2 function one after the other to turn the 2 motor at the same time, for some reason just one of them turn, when I reset it seems like sometimes the first motor turn, and other times the second motor turn.
So please any idea, it can be something in the configuration.
Solved! Go to Solution.
2024-05-17 01:20 AM
Hello,
This issue has been fixed with the solution proposed above in our new MCSDK 6.3.0 release,
so feel free to download it and try if it solved correctly your issue reported in this post.
Kind Regards.
Amina.
2024-01-23 12:31 AM
Dear ItzSam,
May be an error occurs after mc_startMotor2() call that prevents the motor to spin.
You can check errors using "MC_GetCurrentFaultsMotor2()" API or using Motot pilot tool.
2024-02-09 10:51 AM - edited 2024-02-10 01:48 AM
hey,
sorry for the delay,
i just tested the project i just call
mc_startMotor1 ()
then i call
mc_startMotor2 ()
just one of them turn
this is a screenShot of the handler of the 2 motors
as you can see the state of the first motor is RUN, and the other is FAULT_OVER
with pastFaults code 1024 and some times both dont start
edit : i found out that theose error linked to dirver protecttion and overcurrent
i fixed them , now i am getting the FOC duration Fault, with the same problem one motor turn the other try to run for a second , then one of them just stop with FOC duration Fault.
thank you in advance.
2024-02-12 12:26 AM
Hello,
In case of FOC duration fault, please decrease the PWN Generation Frequency or increase Current sensing regulator execution time to give more time to MCU to process FOC.
2024-02-13 10:31 PM
Hello and thank you for your reply,
Sorry, but I am not able to run both motors on the EVSPING4-Dual, for now I have a problem linked to the overcurrent with the same behavior the first motor starts fine when I try to start the second either one of them stop with overcurrent fault or both, but separately they work fine.
I am using:
MCW Version: 6.2.0 + evspinG4 Dual
Trying to turn 2 hoverboard motors (I don't have their full caractersitcs): 36V/15A 500rpm with hall sensors and 15 pole pairs.
I disabled the over current protection for stage 2.
And now I get the overcurrent problems, both motor runs with no load and I start with low speed then I increase.
Here is the link to the workbench Project, please can you check it and and find where is my mistake.
https://drive.google.com/file/d/1u24FDPWdu0OykvhSL4KgBAJoid3Gnju0/view?usp=sharing
Best regards.
2024-02-19 06:48 AM
Hello,
Thank you for this problem report.
We are investigating the issue, and we will come back to you asap.
2024-02-27 06:42 AM
Hello,
We noticed that TIM1 and TIM8 did not start in a synchronized way as expected.
Could you please try by modifying the TIM1/8 starting procedure?
On main.c file, comment following lines:
In MX_TIM1_Init:
// sSlaveConfig.SlaveMode = TIM_SLAVEMODE_TRIGGER;
// sSlaveConfig.InputTrigger = TIM_TS_ITR1;
// if (HAL_TIM_SlaveConfigSynchro(&htim1, &sSlaveConfig) != HAL_OK)
// {
// Error_Handler();
// }
In MX_TIM8_Init:
// sSlaveConfig.SlaveMode = TIM_SLAVEMODE_TRIGGER;
// sSlaveConfig.InputTrigger = TIM_TS_ITR1;
// if (HAL_TIM_SlaveConfigSynchro(&htim8, &sSlaveConfig) != HAL_OK)
// {
// Error_Handler();
// }
Add them in pwm_common.c startTimers() function:
__weak void startTimers(void)
{
uint32_t isTIM2ClockOn;
uint32_t trigOut;
TIM_HandleTypeDef htim = {0};
TIM_SlaveConfigTypeDef sSlaveConfig = {0};
htim.Instance = TIM1;
sSlaveConfig.SlaveMode = TIM_SLAVEMODE_TRIGGER;
sSlaveConfig.InputTrigger = TIM_TS_ITR1;
HAL_TIM_SlaveConfigSynchro(&htim, &sSlaveConfig);
htim.Instance = TIM8;
sSlaveConfig.SlaveMode = TIM_SLAVEMODE_TRIGGER;
sSlaveConfig.InputTrigger = TIM_TS_ITR1;
HAL_TIM_SlaveConfigSynchro(&htim, &sSlaveConfig);
isTIM2ClockOn = LL_APB1_GRP1_IsEnabledClock(LL_APB1_GRP1_PERIPH_TIM2);
And replace r1_ps_pwm_curr_fdbk.c R1_TIMxInit() function by:
void R1_TIMxInit(TIM_TypeDef *TIMx, PWMC_R1_Handle_t *pHandle)
{
if (pHandle->pParams_str->TIMx == TIM1)
{
/* TIM1 Counter Clock stopped when the core is halted */
LL_DBGMCU_APB2_GRP1_FreezePeriph(LL_DBGMCU_APB2_GRP1_TIM1_STOP);
}
else
{
/* TIM8 Counter Clock stopped when the core is halted */
LL_DBGMCU_APB2_GRP1_FreezePeriph(LL_DBGMCU_APB2_GRP1_TIM8_STOP);
}
/* Disable main TIM counter to ensure a synchronous start by TIM2 trigger */
LL_TIM_DisableCounter(TIMx);
LL_TIM_SetCounterMode(TIMx, TIM_CR1_CMS_1);
/* Disable ADC trigger */
LL_TIM_SetTriggerOutput(TIMx, LL_TIM_TRGO_RESET);
LL_TIM_OC_DisablePreload(TIMx, LL_TIM_CHANNEL_CH1);
LL_TIM_OC_DisablePreload(TIMx, LL_TIM_CHANNEL_CH2);
LL_TIM_OC_DisablePreload(TIMx, LL_TIM_CHANNEL_CH3);
LL_TIM_OC_DisablePreload(TIMx, LL_TIM_CHANNEL_CH4);
LL_TIM_OC_EnablePreload(TIMx, LL_TIM_CHANNEL_CH5);
LL_TIM_OC_EnablePreload(TIMx, LL_TIM_CHANNEL_CH6);
if (2U == pHandle->pParams_str->FreqRatio)
{
if (HIGHER_FREQ == pHandle->pParams_str->IsHigherFreqTim)
{
if (3U == pHandle->pParams_str->RepetitionCounter)
{
/* Set TIMx repetition counter to 1 */
LL_TIM_SetRepetitionCounter(TIMx, 1);
LL_TIM_GenerateEvent_UPDATE(TIMx);
/* Repetition counter will be set to 3 at next Update */
LL_TIM_SetRepetitionCounter(TIMx, 3);
}
else
{
/* Nothing to do */
}
}
else
{
/* Nothing to do */
}
if (M1 == pHandle->_Super.Motor)
{
LL_TIM_SetCounter(TIMx, (uint32_t)(pHandle->Half_PWMPeriod) - 1U);
}
}
else /* bFreqRatio equal to 1 or 3 */
{
if (M1 == pHandle->_Super.Motor)
{
if (3U == pHandle->pParams_str->RepetitionCounter)
{
/* Set TIMx repetition counter to 1 */
LL_TIM_SetRepetitionCounter(TIMx, 1);
LL_TIM_GenerateEvent_UPDATE(TIMx);
/* Repetition counter will be set to 3 at next Update */
LL_TIM_SetRepetitionCounter(TIMx, 3);
}
else
{
/* Nothing to do */
}
LL_TIM_SetCounter(TIMx, (uint32_t)(pHandle->Half_PWMPeriod) - 1U);
}
else
{
/* Nothing to do */
}
}
LL_TIM_ClearFlag_BRK(TIMx);
LL_TIM_ClearFlag_BRK2(TIMx);
LL_TIM_EnableIT_BRK(TIMx);
/* Enable drive of TIMx CHy and CHyN by TIMx CHyRef */
LL_TIM_CC_EnableChannel(TIMx, TIMxCCER_MASK_CH123);
}
Could you tell us if behavior is improved on your side?
2024-05-17 01:20 AM
Hello,
This issue has been fixed with the solution proposed above in our new MCSDK 6.3.0 release,
so feel free to download it and try if it solved correctly your issue reported in this post.
Kind Regards.
Amina.
2024-05-17 08:52 AM
Hello,
Thank you. I have read the release notes and saw that you took it into consideration. I tested version 6.3.0, and it works now.
Best regards.