//设置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