2024-04-04 12:39 AM - edited 2024-04-04 02:11 AM
Hi, I'm using an STM32F439ZI (on a nucleo board) and connected a Zaber stage with its encoder to it. When disconnected, I can measure the A & B signals schanging from GND to 5V. I currently cannot paste an image from the scope but I've lookerd at them before and the quadrature output looks as expected with no pullups or pull downs required. I hooked the signals up to pins PE9 & PE11 and set TIM1 up to Encoder mode:
and the TIM1_init() looks like this:
static void MX_TIM1_Init(void)
{
/* USER CODE BEGIN TIM1_Init 0 */
/* USER CODE END TIM1_Init 0 */
TIM_Encoder_InitTypeDef sConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
/* USER CODE BEGIN TIM1_Init 1 */
/* USER CODE END TIM1_Init 1 */
htim1.Instance = TIM1;
htim1.Init.Prescaler = 0;
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
htim1.Init.Period = 65535;
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim1.Init.RepetitionCounter = 0;
htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
sConfig.EncoderMode = TIM_ENCODERMODE_TI1;
sConfig.IC1Polarity = TIM_ICPOLARITY_RISING;
sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI;
sConfig.IC1Prescaler = TIM_ICPSC_DIV1;
sConfig.IC1Filter = 10;
sConfig.IC2Polarity = TIM_ICPOLARITY_RISING;
sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;
sConfig.IC2Prescaler = TIM_ICPSC_DIV1;
sConfig.IC2Filter = 0;
if (HAL_TIM_Encoder_Init(&htim1, &sConfig) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM1_Init 2 */
/* USER CODE END TIM1_Init 2 */
}
yet, TIM1->CNT remains 0 as trhe encoder rotates.
Can someone here help me find where my problem might be at?
Solved! Go to Solution.
2024-04-04 02:10 AM
This has been resolved, I was just missing to start time timer:
HAL_TIM_Encoder_Start(&htim1, TIM_CHANNEL_ALL);
2024-04-04 02:10 AM
This has been resolved, I was just missing to start time timer:
HAL_TIM_Encoder_Start(&htim1, TIM_CHANNEL_ALL);