关于:STM32通过其通用定时器输出PWM波实现舵机驱动

什么是PWM波:

                        脉冲宽度调制,简称脉宽调制,是利用微处理器的数字输出对模拟电路进行控制的一种非常有效的技术,广泛应用在测量、通信、功率控制与变换的等领域中。

                        具有一定频率,其(占空比:高电平所占整个周期的比例)高电平可以调节的波。通过PWM波改变设备在一定时间内的做功。可以用于调节电动机转速、改变直流电压、调节舵机角度等;

PWM波的频率:指在一秒内信号从高电平到低电平再回到高电平的次数(周期次数),也就是说一秒钟有多少个PWM周期就有多少HZ;

脉宽时间:高电平的时间;

STM32通用定时器实现PWM波输出配置流程:

                        通用定时器的PWM模式下有两种计数模式:互为相反,根据电路区分有效电平是高还是低

                        通用定时器产生PWM波的过程:

                                                                                打开定时器时钟

                                                                                定时器的时基单元:预分频、重载值、时钟源的初始化

                                                                                输出通道的配置:有效电平、PWM模式、比较寄存器的初值

                                                                                使能定时器

                                                                                打开预装载寄存器

                          具体配置代码:

void TIM4_PWM_config(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	GPIO_InitTypeDef GPIO_InitStructure = {0}; 
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 
	GPIO_Init(GPIOB, &GPIO_InitStructure);

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);	
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	
	TIM_TimeBaseStructure.TIM_Period= (10000-1);							 
	TIM_TimeBaseStructure.TIM_Prescaler= (72-1);					 
	TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;		
	TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
	TIM_TimeBaseStructure.TIM_RepetitionCounter=0;					 
	TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);					 
	TIM_OCInitTypeDef  TIM_OCInitStructure;
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;						
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse = 0;													 
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;		
	TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;	 
	TIM_OC1Init(TIM4, &TIM_OCInitStructure);			   						 
	TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);						
	
	TIM_Cmd(TIM4, ENABLE);						
	TIM_CtrlPWMOutputs(TIM4, ENABLE);	
}

对应舵机角度:传入参数:定时器和比较值

void Server_180_Angle(void)
{
	TIM_SetCompare1(TIM4,5);//0
	Delay_ms(1000);
	
	TIM_SetCompare1(TIM4,10);//45
	Delay_ms(1000);
	
	TIM_SetCompare1(TIM4,15);//90
	Delay_ms(1000);	
	
	TIM_SetCompare1(TIM4,20);//135
	Delay_ms(1000);
	
	TIM_SetCompare1(TIM4,25);//180
	Delay_ms(1000);	
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值