电调的控制方法——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