STM32 定时器输出pwm的频率计算方法 PWM 频率检测方法 直流电机的位置控制

调节频率: 定时器重载值 = 定时器分频后的频率 / 最终输出的频率

调节占空比:

/*
功能:
	改变指定定时器指定通道的pwm的频率和占空比
参数:
	htim:定时器句柄
	chanel: 通道
	duty_cycle:占空比 0.0~1.0
	frequency :PWN频率
*/
void change_duty_cycle_frequency(TIM_HandleTypeDef *htim,uint32_t chanel,float duty_cycle,uint32_t  frequency)
{
	uint32_t arr = 10000/ frequency -1 ; // 定时器重载值 = 定时器分频后的频率 / 最终输出的频率 
	printf("param %d %.3f\r\n",arr,duty_cycle);
	__HAL_TIM_SET_AUTORELOAD(htim,arr);
	__HAL_TIM_SET_COMPARE(htim,chanel,arr*duty_cycle);
	//__HAL_TIM_URS_ENABLE(htim);
}

频率测量计算方法 : 检测频率=  定时器分频后的频率 / 定时器的一个周期的计数值

/*
检测PWM的频率和占空比
第一个上升沿复位计数器
第二个上升沿通道1是检测周期
第一个下降沿通道2检测占空比

*/
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
	if(htim != &htim2) return;
	if(htim->Channel ==HAL_TIM_ACTIVE_CHANNEL_1 )
	{
		printf("f =  %d %d %.2f %.2f\r\n",one,two,one*1.0/two,84*1000*1000*1.0/two );
		two = __HAL_TIM_GET_COMPARE(htim,TIM_CHANNEL_1);
	}
	else if(htim->Channel ==HAL_TIM_ACTIVE_CHANNEL_2 )
	{
			one = __HAL_TIM_GET_COMPARE(htim,TIM_CHANNEL_2);
	}
}

有刷电机控制转动圈数,必须要有编码器的存在

直流有刷电机的位置控制(控制转动几圈)是通过编码反应电机转动的角度。 如电机旋转一圈编码器输出60000个脉冲,用户要求电机旋转2圈,就是设置PID目标值12000=6000*2, PID 传入的实际值也就是编码器的脉冲数

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Car12

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值