1. 材料介绍

  1. STM32F103VET6开发板,此处我使用的是野火的指南者,不过F103系列的应该都是可以通用的,具体大家可以自行参考相对应开发板的用户手册。
  2. SG90舵机一个。我使用的是180°旋转的,实际上在某宝购买的时候360°、180°、90°的SG90都叫这个名字,如果你真的不懂的话,选购之前最好是问问客服可以旋转多少度。
  3. 杜邦线若干。

2.接线方法

主要是SG90舵机的三根线,我使用的这款舵机红线接5V(3.3V带不动舵机),棕色接GND,黄色线接开发板的PC6(图中错误标注为PB9,不换图了,大家知道是信号线即可).

3.舵机控制原理

  1. 控制信号
    舵机的控制信号为PC6输出的PWM信号,周期为20ms,其中脉冲宽度从0.5ms~2.5ms,对应舵盘的0°到180°,呈线性变化。
    也就是说,给舵机提供一定的脉宽,它的输出轴就会保持在一个与之对应的角度上,直到下一个不同的脉宽出现,转到新的对应角度。
  2. 反馈信号
    舵机接收来自信号线的控制信号,电机在转动时,会带动反馈电位计的转动,电位计将输出一个电压信号到舵机控制板,进行反馈,该信号与控制信号进行比较,从而调整转动方向与速度,直到反馈信号与控制信号相同。

代码部分

#include "stm32f10x.h"
void pwm_init(void);
void delay(uint32_t x);
int main()
{     pwm_init();    //PWM初始化while(1){TIM_SetCompare1(TIM3, 195);//0度delay(10000000);TIM_SetCompare1(TIM3, 190);//45度delay(10000000);TIM_SetCompare1(TIM3, 185);//90度delay(10000000);TIM_SetCompare1(TIM3, 180);//135度delay(10000000);TIM_SetCompare1(TIM3, 177);//比180度旋转的稍微小一点,因为舵机旋转到180度之后可能会卡一下,详细原因可以自行查找delay(10000000);
//      TIM_SetCompare1(TIM3, 175);//180度
//      delay(10000000);    }
}void pwm_init()
{GPIO_InitTypeDef GPIO_InitStructure;   //声明初始化GPIO的结构体变量TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//声明初始化定时器的结构体变量TIM_OCInitTypeDef TIM_OCInitStructure;//根据TIM_OCInitStruct中指定的参数初始化外设TIMx//开启时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//  配置GPIO的模式和IO口GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;// PC6GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出GPIO_Init(GPIOC,&GPIO_InitStructure);//TIM3定时器初始化TIM_TimeBaseInitStructure.TIM_Period = 199; //PWM 频率=72000/(199+1)=36Khz//设置自动重装载寄存器周期的值TIM_TimeBaseInitStructure.TIM_Prescaler = 7199;//设置用来作为TIMx时钟频率预分频值TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;//设置时钟分割:TDTS = Tck_timTIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM3, & TIM_TimeBaseInitStructure);GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);//改变指定管脚的映射 规则在F103参考手册里。//PWM初始化TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//PWM输出使能TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;TIM_OC1Init(TIM3,&TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);//使能或者失能TIMx在CCR1上的预装载寄存器TIM_Cmd(TIM3,ENABLE);//使能或者失能TIMx外设
}void delay(uint32_t x)
{while(x--);
}

STM32驱动SG90舵机相关推荐

  1. STM32驱动sg90舵机失败

    背景:        十月份参加学校举办的Robomaster校内赛,使用sg90舵机驱动机械臂夹取小球. 遇到问题:        使用STM32单片机的定时器输出PWM来驱动舵机,一直无法使舵机运 ...

  2. 基于STM32驱动SG90舵机

    1.舵机介绍 这边对SG90舵机进行一个简短的文字介绍: 舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围,总间隔为2ms.脉冲的宽度将决定马达转动的距 ...

  3. STM32的SG90舵机驱动

    今天来讲一下如何使用STM32来驱动SG90舵机 舵机:舵机是一种位置(角度)伺服的驱动器,适用那些需要角度不断变化并可以保持的控制系统.舵机只是一种通俗的叫法,其实质是一个伺服马达. 驱动SG90舵 ...

  4. ESP8266驱动SG90舵机控制开关灯(灯的开关)的折腾记录

    https://blog.csdn.net/qq_47749454/article/details/117638828 想法来源地址在上面,可以去参考一下,建议是结合两篇文章一块看,按照大佬的先来折腾 ...

  5. 驱动SG90舵机运算

    一.舵机: 1.1MHZ=1us  1KHZ=1000us   1HZ=1000 000us    1/60HZ=166ms 2.1ms<=脉宽<=2ms --> 1KHZ<= ...

  6. Arduino 不使用舵机库<Servo.h>驱动SG90舵机

    点击下载示例 由于<Servo.h>中使用了定时器,严重影响了其他引脚的信号变化.所以自行写了个简单的驱动程序. 舵机驱动原理如下: 舵机的控制信号为周期是 20ms 的(PWM)信号,其 ...

  7. MSP430 STM32 单片机 SG90 舵机

    接线: 注意: 1 工作电压:4.2-6V 2 PWM给20ms周期,也就是50HZ 3 手册可能写的是高电平是1ms到2ms,其实给0.5ms到2.5ms,还是要试试才知道. 4 给舵机直流电5V, ...

  8. SG90舵机的原理和控制方式

    前言 做过机器人.智能车或者玩航模的朋友应该对舵机不会陌生,这种舵机也是很常用的. 舵机只是我们通俗的叫法,它的本质是一个伺服电机,也可以叫做位置(角度)伺服驱动器.一般被应用在那些需要控制角度变化的 ...

  9. STM32—TIM3输出PWM信号驱动MG996R舵机(按键控制)

    文章目录 一.前言 二.MG996R舵机简介 三.通用定时器TIMx 四.TIM3输出PWM信号代码详解 上传代码 一.前言 利用STM32的TIM3的通道1输出PWM信号,驱动MG996R舵机,按键 ...

  10. 【STM32】基于F103C8T6和ESP01远程控制灯光开关(SG90舵机控制)

    先上实物! 视频演示 主控和配件选择 主控板选择经济实惠的c8t6,网络通信选择esp01,因为寝室使用不能更改电路,所以用一个sg90舵机来按点灯开关. 服务器 服务器使用自己搭建的emqx服务器, ...

最新文章

  1. android 8.0 intent,Android 8.0通知栏适配问题
  2. Linux之Less命令跳转到特定的行号
  3. tms tck_两个用于Eclipse的TCK –开源到底有什么?
  4. Python 数据分析三剑客之 Matplotlib(四):线性图的绘制
  5. python延时队列_如何通过Python实现RabbitMQ延迟队列
  6. leetcode 题解 java_leetcode-java题解(每天更新)
  7. 读书笔记_量化交易如何建立自己的算法交易03
  8. 如何在Linux中使用netstat命令
  9. Panoply软件安装
  10. python 实现简单画板_Python图像处理之简单画板实现方法示例
  11. php读写明华读卡器,rwCard 明华USBIC卡读卡器IC卡读写程序 - 下载 - 搜珍网
  12. Python爬取豆瓣网图书评论
  13. 城市数据派(多尺度地理加权回归理论与应用——关于地理加权回归GWR和多尺度地理加权回归MGWR)
  14. 机器学习 - 概念学习
  15. R语言数据缺失值处理
  16. mac foxmail html签名,Foxmail怎么设置签名?Foxmail个性签名设置方法
  17. 计算机cpu风扇不转怎么办,电脑cpu风扇不转是怎么回事
  18. 阿里总参谋长曾鸣:区块链中没有绝对的“去中心化”
  19. 从零开始学习信号完整性(SIPI)--2
  20. D妹上新|DoH和DoT开始公测啦!

热门文章

  1. stm32电容触摸按键的实现
  2. 微信小程序开发详解(九)---微信小程序布局基础
  3. intel h61 linux驱动下载,intel h61主板驱动
  4. dnf服务器文件夹,有效提升DNF游戏稳定性 缓存文件清理教学
  5. 《给QTreeView表项添加右键菜单》:系列教程之四
  6. dubbo接口调试工具
  7. 麦当劳中国首个IT战略研发中心在南京启用;大食代积极布局中国西南市场 | 美通企业日报...
  8. Eclipse中开发测试脚本
  9. 电力行业安全建设方案
  10. matlab光学教程,基于MATLAB的物理光学仿真