快速学习Stm32舵机控制板控制多个舵机运动以及调速

本文详细介绍了如何使用STM32单片机通过单个定时器中断法实现对8个舵机的同时控制。通过将20ms的控制周期分时复用,每2.5ms控制一个舵机,实现了多个舵机的同步转动。此外,还探讨了脉冲细分法来控制舵机的调速,通过调整脉宽值实现平滑运行。内容涵盖初始化配置、GPIO控制、定时器设置及速度控制策略,为扩展到更多舵机控制提供了基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本次分享stm32对多个舵机的控制,之前讲解过单个舵机的控制。以及控制原理,定时器的使用和pwm的输出来控制一个舵机的角度转向。这次就和大家分享一下多个舵机的控制以及调速。利用单片机实现对 8 个舵机的同时控制,掌握多个舵机控制程序实现方法。从单个舵机控制到多个舵机控制,理解定时器的分时复用。为扩展控制 16 路,24 路舵机打下坚实的基础。

多个舵机控制如下图所示
16路舵机控制板子(维特智能)
在这里插入图片描述
多个舵机控制方案

利用单个定时器中断法。该方案的实现方法是将舵机 20ms 的周期分解成若干份(由于舵机控制信号的最大高电平时间为 2.5 毫秒,故一般分成 8 份以上), 每一份时间完成一个舵机的控制。以将 20ms 平均分解成 8 份为例进行说明:单片机上电初始化时,先将所有的 IO 端口电平拉低;当定时器产生第一次溢出中断时,在中断服务程序中对定时器计数寄存器重新赋值,所赋值为第一个受控舵机控制信号的高电平时间值,并将 IO 口拉高;当定时器产生第二次中断时,继续给寄存器重新赋值,此次所赋值为 2.5ms 减去高电平所得时间值;剩下的17.5ms 时间内重复七次上述操作,这样即可同时完成 8 个舵机的控制。

每20mm的周期,把每个周期分为8分,每份2.5mm 控制一个舵机,总共控制8个舵机

参考demo 本次使用stm32f103 c8t6

主函数

 int main(void)
{
   
      
	SysTick_Init();		//系统滴答定时器初始化 		
	Servor_GPIO_Config();
	Timer_Init();
	Timer_ON();
	while (1)
	{
   
   	
		for(i=0;i<8;i++)           //每个舵机到0度
		{
   
   
			CPWM[i]=500; //给PWM舵机一个0.5ms的高电平脉冲,传入到定时器2 
		}
	
		Delay_ms(1000); 
		for(i=0;i<8;i++)           //每个舵机到180度
		{
   
   
			CPWM[i]=2500;//给PWM舵机一个2.5ms的高电平脉冲,传入到定时器2 
		} 
		Delay_ms(1000); 
	}
} 

初始化i/o口

void Servor_GPIO_Config(void)	
{
   
   
	GPIO_InitTypeDef GPIO_InitStructure;	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA, ENABLE);
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable , ENABLE);
	GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8|GPIO_Pin_15;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	RCC_APB2PeriphClockCmd
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

闰土小蒋

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

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

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

打赏作者

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

抵扣说明:

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

余额充值