cubemx+stm32f302 驱动新西达30A电调

2019-04-13 12:31发布

电调的控制方法——PWM

    单片机输出1ms~2ms的方波脉冲,根据航模标准,PWM信号线的频率应该是50Hz,对应的每个周期20ms,一般白 {MOD}为油门线。如果是单向电调,1ms表示0%的油门,2ms表示100%的油门。如果是双向电调(有正、反转和刹车),标准1.5ms是0点,1ms是反向油门最大(100%油门),用于刹车或反转;2ms正向油门最大(100%油门),用于正转。这是无线遥控模型比例控制的一个标准。对于其它电调也一样。注意,电调转速只与1ms~2ms的脉宽有关,与脉冲重复率无关。1~2ms的方波脉宽渐变过程对应油门的从小到大,从负到正的渐变。 脉宽的幅度2.5V~6V;所以3~5V工作电压的单片机都适用。 默认接线都是正确OK,如下图示。
第一次使用电调需要配置,参考下图。

首先设定油门行程,代码如下 /*使用TIM2 channel1作为PWM输出口,频率50Hz定时器参考配置如下#define  PERIOD_VALUE       (40000 - 1)  /* Period Value  */ #define  PULSE1_VALUE       2100        /* Capture Compare 1 Value  */ #define  PULSE2_VALUE       3000        /* Capture Compare 2 Value  */ #define  PULSE_MAX 4000        /* 按照电调要求 1%即2ms  */ #define  PULSE_MIN       2000         /* 0.5%即1ms  */ uhPrescalerValue = (uint32_t) (SystemCoreClock / 2000000) - 1; /* USER CODE BEGIN PFP */ /* Private function prototypes -----------------------------------------------*/ /* TIM2 init function */ static void MX_TIM2_Init(void) {   TIM_ClockConfigTypeDef sClockSourceConfig;   TIM_MasterConfigTypeDef sMasterConfig;   TIM_OC_InitTypeDef sConfigOC;  htim2.Instance = TIM2;   htim2.Init.Prescaler = uhPrescalerValue;   htim2.Init.CounterMode = TIM_COUNTERMODE_UP;   htim2.Init.Period = PERIOD_VALUE;   htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;   if (HAL_TIM_Base_Init(&htim2) != HAL_OK)   {     Error_Handler();   }   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;   if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)   {     Error_Handler();   }   if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)   {     Error_Handler();   }   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;   if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)   {     Error_Handler();   }   sConfigOC.OCMode = TIM_OCMODE_PWM1;   sConfigOC.Pulse = 0;   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;   if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)   {     Error_Handler();   }   HAL_TIM_MspPostInit(&htim2); } 油门行程设置解释,置于main 函数初始化阶段 HAL_Delay(1000); sConfigOC.Pulse = 4000; //满油门 HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1); //启动 HAL_Delay(3000); //延时3秒,实际可调整,确保能听到最高油门确认音 sConfigOC.Pulse = 2000;//最高油门确认音后,油门至最低 HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);//确认 HAL_Delay(2000);//延时,会有锂电节数音及最终确认音

注意上电顺序,先上单片机,再给电调供电!! 油门设定完成后即可进行正常上电,main 函数参数时,将占空比设置为5%(1ms)最低油门即可,再通过按键或者串口更改占空比进行调速。

完整代码:https://git.oschina.net/zjzto/XXDdriver.git