舵机控制(STM32F103C8T6)

这篇具有很好参考价值的文章主要介绍了舵机控制(STM32F103C8T6)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

        本文是以STM32F103C8T6作为主控芯片,通过PB6端口输出PWM,实现控制180°舵机。

一、舵机控制原理

(一)概述

        舵机是一种位置伺服驱动器器,是一种带有输出轴的小装置。当我们向伺服器发送一个控制信号时,输出轴就可以转到特定的位置。只在控制信号持续不变,伺服机构就会保持相对的角度位置不变。如果控制信号发生变化,输出轴的位置也会相应发生变化。舵机的控制大部分都是通过PWM信号控制的。

        注:舵机按角度分为90°、180°、270°、360°舵机,其中360°舵机只能控制旋转速度不能固定在某一角度上。

(二)PWM

        PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的时间占整个信号周期的百分比。如下图

舵机控制(STM32F103C8T6)(三)控制原理

        通过向舵机的信号线发送PWM信号控制舵机的输出量,一般来说,PWM的周期及占空比,可通过程序控制的。

        当我们向舵机发送脉冲宽度为1.5ms时,舵机的输出轴将移至中间位置0°;

        当脉冲宽度为1ms时,舵机的输出轴将移至中间位置-45°;

        脉冲宽度为2ms时,舵机的输出轴将移至中间位置45°。

        注:不同类型和品牌的伺服电机之间最大位置和最小位置的角度可能会不同。许多伺服器仅旋转约170度(或者只有90度),但宽度为1.5 ms的伺服脉冲通常会将伺服设置为中间位置(通常是指定全范围的一半);具体参考下图

舵机控制(STM32F103C8T6)

占空比 = t / T 相关参数如下:

t = 0.5ms —————— 舵机会转到 -90 °
t = 1.0ms —————— 舵机会转到 -45°
t = 1.5ms —————— 舵机会转到 0°
t = 2.0ms —————— 舵机会转到 45°
t = 2.5ms —————— 舵机会转到 90°

 PWM周期为20ms = (2000*720)/72000000 = 0.2,通过程序设置的TIM_Period = 1999,TIM_Prescaler = 719(本文程序)

二、硬件连接

(一)舵机线说明

舵机控制(STM32F103C8T6)

(二)引脚连接

主控 舵机
5V +5V
GND GND
PB6 PWM

三、参考代码

1、初始化

void TIM4_CH1_PWM_Init(u16 arr,u16 psc)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
	TIM_OCInitTypeDef TIM_OCInitTypeStruct;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
	
	//要开启复用功能的时钟才能重映射
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  ,ENABLE); 
	
	//TIM3部分重映射
	/*
	*查看数据手册,引脚的定时器通道是完全映射,还是部分映射
	*二者调用参数不相同
	*完全映射 :GPIO_FullRemap_TIM4
	*部分映射 :GPIO_PartialRemap_TIM4
	*/
	
	//设置该引脚为复用输出功能
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStruct);
	
	//初始化TIM4
	TIM_TimeBaseStruct.TIM_Period = arr;//重装载值 
	TIM_TimeBaseStruct.TIM_Prescaler = psc;//预分频值 
	TIM_TimeBaseStruct.TIM_ClockDivision = 0; //时钟分频1、2、4分频	
	TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;//设置计数模式
	TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStruct);
	
	//初始化输出比较参数
	TIM_OCInitTypeStruct.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式
	TIM_OCInitTypeStruct.TIM_OutputState = TIM_OutputState_Enable;//比较输出使能
	TIM_OCInitTypeStruct.TIM_OCPolarity = TIM_OCPolarity_High;//输出极性
	TIM_OC1Init(TIM4,&TIM_OCInitTypeStruct); //选择定时器输出通道 TIM4_CH1
	
	//使能预装载寄存器
	TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Enable);
	
	//使能定时器
	TIM_Cmd(TIM4,ENABLE);
}

2、主函数

int main(void)
{
	TIM4_CH1_PWM_Init(1999,719);//PWM频率=72000000/(719+1)/(1999+1)=50hz=20ms
	
	while(1)
	{
		//-90度
		TIM_SetCompare1(TIM4,1750);//占空比(2000-1750)/2000*20ms=2.5ms

		//45度
		//TIM_SetCompare1(TIM4,1800);//占空比(2000-1800)/2000*20ms=2ms

		//0度
		//TIM_SetCompare1(TIM4,1850);//占空比(2000-1850)/2000*20ms=1.5ms

		//-45度
		//TIM_SetCompare1(TIM4,1900);//占空比(2000-1900)/2000*20ms=1ms

		//-90度
		//TIM_SetCompare1(TIM4,1945);//占空比(2000-1945)/2000*20ms=0.5ms  	
	}
}

相关代码,有需要可以自行下载(实现了能过串只发送控制旋转)
网盘链接:
链接:https://pan.baidu.com/s/1p-lAXJ4pS6-Tw3DFqxdQhQ 
提取码:ml04
如有什么问题欢迎指出来,有什么模块可以联系博主,博主会查询资料分享出来。文章来源地址https://www.toymoban.com/news/detail-406282.html

到了这里,关于舵机控制(STM32F103C8T6)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Stm32f103c8t6(proteus仿真)学习——3.按键控制LED灯

    按键:button 电阻:res 先配置LED灯的GPIO 编写LED亮灭的函数 实现按下按键LED灯的状态取反 led.c总代码 先配置按键的GPIO 获取当前按键键值的函数 key.c总代码 5.1 按键按下实现LED亮或者灭 仿真效果图: 5.2 按键按下实现LED状态取反 仿真效果图: 百度网盘 链接:https://pan.baidu.co

    2024年02月07日
    浏览(61)
  • STM32F103C8T6实现CAN通讯与直流编码电机转速闭环控制

    本次实验目的是通过CAN发送目标转速与转向信息,接收方在接到CAN数据流后开始对直流编码电机进行转速闭环控制。我会尽量说清每个函数,注释每一句代码,希望能对大家有所帮助。 CAN通讯基于STM32自带CAN通讯模块,配合库函数使用十分方便。关于CAN通讯可以参考站内大佬

    2023年04月08日
    浏览(41)
  • STM32驱动串口屏,STM32F103C8T6串口发送指令控制HMI串口屏

    串口屏是一个集成了单片机的屏幕模块,采用的是TTL串口协议,可以直接通过对应指令控制屏幕, 本文采用的串口屏是陶晶驰T0系列的基本型,目的是通过单片机的串口来控制串口屏 上面仅是一部分常用的基础指令,更多更仔细的指令或者函数可以访问陶晶驰资料官网。 硬

    2024年02月13日
    浏览(49)
  • Qt实现安卓手机蓝牙通信并控制stm32f103c8t6驱动VFD屏

    Qt具有跨平台的特性所以非常适合写通信的demo,但是在这个例程中Qt蓝牙部分不支持Windows平台,安卓平台使用没问题。 Qt蓝牙主要涉及到三个类的使用: QBluetoothDeviceDiscoveryAgent //扫描周围蓝牙设备 QBluetoothLocalDevice //扫描本地蓝牙 QBluetoothSocket //建立蓝牙的socket读写 安卓不支

    2024年02月08日
    浏览(55)
  • 基于STM32F103C8T6的端口重映射及定时器输出PWM控制

    #一、端口重映射原理及部分/完全重映射 #二、端口重映射的配置 #三、PWM控制 ##1、通用定时器输出PWM ##2、PWM的工作原理 ##3、PWM的内部运作机制 ##4、PWM的模式 ##5、自动加载的预载寄存器 #四、定时器输出PWM结构体及库函数的配置 #五、项目硬件 #六、项目代码 一、端口重映射

    2024年02月13日
    浏览(52)
  • STM32F103C8T6串口通信

      首先来看一下需要操作的函数,以及配置的步骤: 图1                                                  图2   Code: usart.c #include \\\"usart.h\\\" void ustart_Init(void ) { GPIO_InitTypeDef GPIO_Init_Ustar ; // 定义输出端口TX的结构体对象 USART_InitTypeDef USTART_Init; // 定义串口初始化结构体对象

    2024年02月16日
    浏览(53)
  • STM32F103C8T6板子介绍

    STM32简介 STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器 STM32常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等 STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器。  STM32F103C8T6 F1XX片上资源

    2024年02月11日
    浏览(57)
  • 功耗测评 | STM32F103C8T6

    STM32F103C8T6 MCU越来越广泛的应用在生产生活的各个领域,外接丰富的传感器、功能模块、通信模块、显示存储等可以形成各种可样的产品项目应用。对于功耗要求比较高的产品,一般会选择STM32L系列的MCU,但是从功耗的评测角度,逻辑上是基本相似的。 在很多应用场合中都对

    2024年02月07日
    浏览(45)
  • STM32F103C8T6系统板

    1.电源部分 2.复位 3.晶振 4. 电源电路——防反接 有关二极管 漫谈二极管防电源反接电路 本次采用上图右下角的NMOS防反接电路。 电源电路——电源芯片 AMS1117是AMS公司的 ,LM1117是NS(美国国家半导体)的,LM1117要贵很多,所以一般的用AMS1117就可以了。 (以下分析参考STM32F10

    2024年02月02日
    浏览(72)
  • STM32F103C8T6串口调试篇

    项目开发中,当出现bug时,由于不知道某个变量的值,所以很难定位问题,针对此问题,串口调试脱颖而出。通过串口printf()实时将需要显示的信息打印出来,这样就很方便的定位问题。 串口设置方法 1.购买调试器pwlink2。参考STM32F103C8T6程序烧录方法_stm32f103c8t6如何烧录_流

    2024年02月12日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包