173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

stm32控制舵机接线图

keros@mark 2023-03-18 资讯中心

要用Stm32控制舵机转任意角度,需要学习32单片机哪些知识点?

舵机需占空比不同的PWM脉冲,可以用软延时方法产生,也可用定时器的基夲功能,还可以用定时器的高级功能,后两种方法都要求了解定时器

图中的实验9就是定时器产高级功能生PWM方波

STM32的芯片可以直接驱动舵机吗?

可以的。STM32可以直接驱动9G。舵机控制口有三根线:VCC(6V或5V)、信号(3V)、GND。信号用STM32的IO口推挽输出就可以,3.3V没事。VCC用5V也OK的。亲测。

stm32f407怎么与舵机相连相连

控制舵机直接连就可以了。控制线接STM32的PWM输出口,剩下两个电源别接反就行,最好板子的电源是外接电源不用USB的,USB电流最大500mA,我怕不够。

怎么让舵机定时转

清单

STM32F103C8T6 1个,Jlink下载线 1根

MG90S舵机 1个

12V电源 1个,12V转5V降压模块(给舵机供电) 1个

杜邦线数根

MG90S舵机

如图所示,舵机有三根线,红色接5V正极,黑色接地;黄色为信号线,接收PWM信号

实物图

输出PWM控制舵机

STM32控制舵机,总的来说是向舵机信号线发送周期为20ms的PWM(Pulse Width Modulation 脉冲宽度调制)信号来控制舵机转角,PWM脉冲的占空比决定了舵机的转角位置,对应关系如下图;

STM32靠定时器TIM实现PWM信号的输出,STM32有多个定时器,分为通用定时器和高级定时器,每个通用定时器都可以输出4路PWM,本文采用TM2_CH4,及定时器2的第4路PWM;对应STM32F103C8T6上的PB11引脚;

创建工程输出PWM

本文使用STM32CubeMX创建工程,更加简单高效,即便对单片机不熟悉也可操作成功;

一、打开STM32CubeMX,新建一个工程,搜索并选择STM32F103C8,然后start project;

二、进行基本设置,配置RCC、SYS、HCLK

RCC - 设置高速外部时钟HSE 选择外部时钟源

SYS - 选择Debug方式 serial wire

HCLK - 设置为72MHZ

三、设置定时器

选择TIM2

选择内部时钟源

设置Channel4为PWM模式

右侧对应管脚自动设置为复用模式

设置定时器参数

控制舵机我们需要设置PWM输出一个周期时间为20ms的信号,定时器时钟为72Mhz

预分频Prescaler设置为720-1,则单周期为72M/(Prescaler + 1) = 100Khz(0.01ms)

以20ms为周期,则Counter Period为20ms/0.01ms - 1 = 1999

此处可设定默认脉冲宽度为0.5ms,及0.5/20*2000 = 50

四、接下来设置输出格式

添加工程名PWM

修改IDE为MDK-ARM V5

在Code Genetator中设置包含库与工程格式

至此STM32CubeMX已设置完成,接下来GENERATE CODE,并打开文件;

在main函数中启动定时器,并输出一定的脉冲的PWM信号即可驱动舵机;

五、修改代码

在main.c文件相应位置处添加如下代码

启动PWM输出

输出PWM信号

/* USER CODE BEGIN Includes */

#include "stdio.h"

/* USER CODE END Includes */

/* USER CODE BEGIN 2 */

HAL_TIM_PWM_Start(htim2,TIM_CHANNEL_4); //启动定时器

int compareValue = 150; //将compareValue设置为50、150、250分别对应0°、90°、180°

/* USER CODE END 2 */

/* Infinite loop */

/* USER CODE BEGIN WHILE */

while (1)

{

/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */

__HAL_TIM_SET_COMPARE(htim2, TIM_CHANNEL_4, compareValue); //输出PWM信号

HAL_Delay(10);

}

/* USER CODE END 3 */

}

登录后复制

添加完以上代码之后,编译,然后通过JLink将程序LOAD到STM32F103C8T6,将舵机信号线连接PB11(TIM2_CHANNEL4)口,并接上电源,舵机即可转动到指定角度;由以上定时器设定可知,compareValue值50、150、250 对应 0.5ms、1.5ms、2.5ms 对应 0°、90°、180°;若想让舵机连续转动,在50~250内循环改变compareValue值即可;

六、接线

开始时用单片机的5V输出给舵机供电,舵机哒哒哒响,但是不转,怀疑是供电不给力,单独供电后驱动成功;

JIink连接电脑和单片机,下载程序到单片机并给单片机供电

舵机黄色信号线接STM32F103C8T6引脚PB11,接收PWM信号

舵机红色电源线接稳压板5V输出正极,舵机黑色地线需与单片机地相连

调试

实操中可能会出现各种各样的问题,以下有几种调试方法

一、舵机测试

调试模块一端接电,一段接舵机,手动模式下,舵机会跟着旋钮同步旋转,可以用来测试舵机是否健康;

二、串口调试助手

可下载串口调试助手,用ttl转USB模块连接电脑,在特定位置进行打印输出,检查程序是否按预设运行

stm32

求教使stm32控制两个舵机完整程序

//配置 回中

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO| RCC_APB2Periph_GPIOA

| RCC_APB2Periph_TIM1, ENABLE);

void GPIO_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

/* TIM pin configuration */

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;

GPIO_Init(GPIOA, GPIO_InitStructure);

}

void TIM_Configuration(void)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_OCInitTypeDef TIM_OCInitStructure;

/* Time base configuration */

TIM_TimeBaseStructure.TIM_Period =19999;

TIM_TimeBaseStructure.TIM_Prescaler = 71;

TIM_TimeBaseStructure.TIM_ClockDivision = 0;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM1, TIM_TimeBaseStructure);

/* TIM1 PWM1 Mode configuration: Channel 1,2*/

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_Pulse = 1499;

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

TIM_OC1Init(TIM1, TIM_OCInitStructure);

TIM_OC2Init(TIM1, TIM_OCInitStructure);

}

//改变角度500——-90,2500——90

TIM_SetCompare1(TIM1, Compare1);

TIM_SetCompare2(TIM1, Compare1);

如何用秉火mini stm32哪个接口控制舵机

控制舵机的原理图很简单,用51的任何一个IO口,连舵机的控制脚就行了。舵机的电源(5V)和地也连好,原理图就这么简单。关键在于程序。

本文标签:stm32控制舵机接线图

产品列表
产品封装
友情链接