wenbo2005.online

学习记录 / STM32

舵机控制与映射函数

STM322025-11-13
//设置SG90为参数范围内(0~180°)任意度数
/*
* htim:要设置的定时器句柄
* Channel:PWM输出通道
* Arr:PWM一个周期计数值
* angle:角度
*
*/
void SG90_Dispaly(TIM_HandleTypeDef * htim,uint32_t Channel, uint32_t Arr, short angle)
{
    uint16_t duty = Arr * ((0.0556f * angle + 7.5)/100.0f);
    __HAL_TIM_SET_COMPARE(htim,Channel,duty);
}

//将一个参数范围映射到另一个范围
/*
* value : 需要映射的值
* fromLow :原范围的最小值
* fromHigh :原范围的最大值
* toLow : 现范围的最小值
* toHigh : 现范围的最大值
*
*/
float Mapping( float value , float fromLow , float fromHigh , float toLow , float toHigh )
{
    return ( ( value - fromLow ) * ( toHigh - toLow ) / ( fromHigh - fromLow ) + toLow ) ;
}

线性变换公式(点线式):

Y = (Y2 - Y1) / (X2 - X1) * (X - X1) + Y1