微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 控制采样电机

控制采样电机

时间:10-02 整理:3721RD 点击:

气体采样采用主动抽取气体的方式保证充足而平稳的气流,所以我们采用气泵抽取气体来完成。

1、设计概述

客户对这部分要求能够设定电机的速度,但并不需要动态调节。对电机的控制有很多方式,我们采用比较简单的方式。我们采用定时器产生PWM舶来实现这一控制过程。

2、硬件连接

对电机的控制我们使用高级定时器TIM1产生PWM波来控制,对于OneNET麒麟座中TIM1的通道1、2、3以及他们的互补输出均已经引到了端子排J2-5(PA10)、2-6(PA9)、J2-7(PA8)、J5-7(PA7)、J3-2(PB0)、J3-3(PB1),如下图所示:


                              

所采用的空气泵是一种比较小型的设备,需要12V-24V电源,具体如下:


由于电机是12V-24V的所以我们还需要必要的电路来完成这一功能,控制板如下图所示:


这种控制板的原理图如下所示,在后续的设计中我们将设计为一体:


接下来我们在STM32CubeMX中作相应的配置,配置如下:


3、软件设计

完成硬件的配置和连接后,我们开始编写软件,首先,我们实现必要的初始化,使得PWM波形能够产生。

/* 对TIM1进行初始化配置*/

static void TIM1_PWM_Initialization(void)

{

TIM_MasterConfigTypeDef sMasterConfig;

TIM_OC_InitTypeDef sConfigOC;

TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;

htim1.Instance = TIM1;

htim1.Init.Prescaler = 0;

htim1.Init.CounterMode = TIM_COUNTERMODE_UP;

htim1.Init.Period = 0;

htim1.Init.ClockDivision = TIM_CLOCKdivISION_div1;

htim1.Init.RepetitionCounter = 0;

  if(HAL_TIM_OC_Init(&htim1) != HAL_OK)

  {

   _Error_Handler(__FILE__, __LINE__);

  }

  sMasterConfig.MasterOutputTrigger= TIM_TRGO_RESET;

sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;

  if(HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) !=HAL_OK)

  {

   _Error_Handler(__FILE__, __LINE__);

  }

sConfigOC.OCMode = TIM_OCMODE_TIMING;

sConfigOC.Pulse = 0;

sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;

sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;

sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;

sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;

  if(HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)

  {

   _Error_Handler(__FILE__, __LINE__);

  }

  if(HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)

  {

   _Error_Handler(__FILE__, __LINE__);

  }

  if(HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)

  {

   _Error_Handler(__FILE__, __LINE__);

  }

sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;

sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;

sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;

sBreakDeadTimeConfig.DeadTime = 0;

sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;

sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;

sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;

  if(HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) !=HAL_OK)

  {

   _Error_Handler(__FILE__, __LINE__);

  }

HAL_TIM_MspPostInit(&htim1);

}

完成配置后,我们接下来编写一个控制程序,用以调节占空比。具体的实现代码如下:

//配置TIM1为PWM输出

void PWM_Configuration(void)

{

  //计算初始化的频率和占空比

TimerPeriod = PWMTimePeriod;//计算用于设置ARR寄存器的值使产生信号的频率为17.57 Khz

  PWM1Pulse= (uint16_t) (((uint32_t) 5 * (TimerPeriod - 1)) / 10);//计算CCR1寄存器的值在通道1和1N产生50%占空比,用于TIM1

  PWM2Pulse= (uint16_t) (((uint32_t) 5 * (TimerPeriod - 1)) / 10);//计算CCR1寄存器的值在通道1和1N产生50%占空比,用于TIM8

PWM_InitProcess(TIM1,TimerPeriod,PWM1Pulse);

}

配置完成编译后,基本能都达到效果,在随后的设计中我们将进一步改进。


干货  顶贴

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top