基于SG90舵机(伺服电机)的操作笔记
1.SG90舵机官方数据
尺寸:21.5mmX11.8mmX22.7mm
重量:9克 (1kg=1公斤=2斤)
无负载速度:0.12秒/60度(4.8V) 0.002s/度
堵转扭矩:1.2-1.4公斤/厘米(4.8V)
使用温度:-30~~+60摄氏度
死区设定:7us (7MHZ)
工作电压:4.8V-6V
位置等级:1024级
脉冲控制精度为2us
2.操作技巧
1.采用PWM控制的方式来进行舵机的操纵
2.舵机的控制需要MCU产生一个20ms的脉冲信号,以0.5ms到2.5ms的高电平来控制舵机的角度
3.数据:
0.5ms-------------0度; 2.5%
1.0ms------------45度; 5.0%
1.5ms------------90度; 7.5%
2.0ms-----------135度; 10.0%
2.5ms-----------180度; 12.5%
4.关键函数:
TIM_SetCompare1(TIM1,cout);
TIM1:TIM1->arr(预装载值),cout值为自设 通过改变cout的值从而进行cout和预装载值的比较 从而控制高电平时间
0.5ms-2.5ms这段高电平时间越长舵机转过角度越大,0.5ms舵机就转过0°,2.5ms舵机就转到最大角度(大概185°)
3.相关代码操作:
part1:PWM初始化
#include "pwm.h"
#include "led.h"//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM1_PWM_Init(u16 arr,u16 psc)
{ GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); //使能GPIO外设时钟使能//设置该引脚为复用输出功能,输出TIM1 CH1的PWM脉冲波形GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //TIM_CH1GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 80KTIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 不分频TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高TIM_OC1Init(TIM1, &TIM_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化外设TIMxTIM_CtrlPWMOutputs(TIM1,ENABLE); //MOE 主输出使能 TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //CH1预装载使能 TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的预装载寄存器TIM_Cmd(TIM1, ENABLE); //使能TIM1}
part2:main.c
//使用stm32控制舵机的使用
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "pwm.h"
#include "key.h"
#define key1 PCin(5)
#define key2 PAin(15)
#define key3 PAin(0)
//key1 key2 低电平触发
//key3 高电平触发
u16 cout;
int main(void){ cout=1850;KEY_Init();delay_init(); //延时函数初始化 LED_Init(); //初始化与LED连接的硬件接口TIM1_PWM_Init(1999,719); //PWM频率===(2000*720)/72000000=0.02=20ms 使用一个20ms的脉冲周期//每20ms进入一次中断 官方数据为数据每加1则转动1.85度while(1){ if(key3==0&&key1==0) //key1按下,舵机缓慢正向转动{ if(key1==0){ delay_ms(5);//消抖cout+=2;}}#if 0else if(key3==1&&key1==0) //key1、key3同时按下,舵机加速转动{ delay_ms(5);cout+=1;} #endifif(key3==1) //舵机回到90度(起始位置)key3为校正位{ cout=1850; } if(key3==0&&key2==0) //key2按下,舵机缓慢反向转动{ delay_ms(5);cout-=2;}#if 0else if(key3==1&&key2==0) //key2、key3同时按下,舵机加速转动{ delay_ms(5);cout-=5; }#endifTIM_SetCompare1(TIM1,cout); //PWM输出(比较模式)delay_ms(50);}}
注:
1.此方式是对于180度舵机有效
2.cout的值设置为180度 刚好是舵机旋转90度,进行数值的加减可以控制舵机的正反转动
基于SG90舵机(伺服电机)的操作笔记相关推荐
- 笔记-模拟舵机:基于STM32F103ZET的SG90舵机控制
写在前面:笔者是一名小白,如有错误,还请及时指正. 1.舵机基本知识 1.SG90舵机是一个模拟舵机,而非数字舵机,这两者的区别是这样,数字舵机只要给一个PWM信号即可,这个信号是目的地的位置,舵机会 ...
- 基于51单片机的超声波避障小车(HC-SR04,SG90舵机)
+ 一.HC-SR04超声波模块 二.SG90舵机 三.总程序编写 一.HC-SR04超声波模块 HC-SR04时序图 触发信号输入端(Trig)输入一个10微秒以上的高电平信号,超声发送口收到信号自 ...
- 基于STM32驱动SG90舵机
1.舵机介绍 这边对SG90舵机进行一个简短的文字介绍: 舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围,总间隔为2ms.脉冲的宽度将决定马达转动的距 ...
- 懒人开关 ESP32控制舵机旋转(基于ESP32+SG90舵机+微信小程序)
提示:站在巨人肩膀上的小白,大家可以提出自己的看法.如有侵删: 原文参考链接:esp32单片机控制舵机 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/566 ...
- 【STM32】基于F103C8T6和ESP01远程控制灯光开关(SG90舵机控制)
先上实物! 视频演示 主控和配件选择 主控板选择经济实惠的c8t6,网络通信选择esp01,因为寝室使用不能更改电路,所以用一个sg90舵机来按点灯开关. 服务器 服务器使用自己搭建的emqx服务器, ...
- 学习笔记3 Linux定时器和sg90舵机的综合应用
今天学习了Linux的定时器功能,并复刻了学习51单片机时玩的智能感应垃圾桶项目.总体感觉难度不大. 先捏软柿子,sg90舵机,应该是市面上能能买到的最便宜的舵机了吧(我瞎说的,如果不是可以发链接给我 ...
- SG90舵机的原理和控制方式
前言 做过机器人.智能车或者玩航模的朋友应该对舵机不会陌生,这种舵机也是很常用的. 舵机只是我们通俗的叫法,它的本质是一个伺服电机,也可以叫做位置(角度)伺服驱动器.一般被应用在那些需要控制角度变化的 ...
- 树莓派操控SG90舵机
目录 舵机接线 PWM介绍 使用PWM控制舵机 这里使用树莓派来操作sg90的舵机.先看一下这个舵机的样子: 这就是传说中的SG90舵机啦,转角是0-180. SG90舵机接线: SG90舵机有三条线 ...
- php控制舵机,分享一个关于SG90舵机的实验(+串口控制)
新手第一次做实验,如果有写的不对的地方,还希望各位大佬多多指导. --------第一次做实验,也发现了自己学习过的东西掌握的不是很好,大佬们有啥入门级别的模块也可以推荐一下,分享当然更好了. --- ...
最新文章
- 2021全球抗体亲和力预测大赛来了!
- 原来deepin部署环境还是那么简单(只不过要用root权限)
- 我的配置(vc可以禁止控制台输出)
- 上传图片自动加水印html,帝国cms用户前台投稿上传图片自动加水印的实现方法...
- 【Matlab】求解黎卡提 Riccati 方程 李雅普诺夫 Lyapunov 方程
- 语言print如何实现连续输出_【每日一题】如何实现一个高效的单向链表逆序输出?...
- Python对Protobuf进行序列化与反序列化
- 北向资金运作akshare
- oracle 从右往左截取_截取GIF、调分辨率、快捷拨号,三星这些功能让人爱不释手...
- code第一部分数组:从有序数组中移除重复的数据
- android setCompoundDrawables和setCompoundDrawablesWithIntrinsicBounds区别
- 浅谈搜狗下拉词框优化推广的优势有哪些
- win10系统字体 chrome 修改苹果字体
- c语言初步经典题4----求圆柱体的表面积
- 利用浏览器保存和下载视频
- 爬虫实战:英雄联盟手游能“干掉”王者荣耀?微博4.3亿网友吵翻了……
- rocketmq-常见问题总结(基本概念、高可用、中间件选型)
- 雪花算法的原理和实现Java
- Java 集合List、Set、Map知识结构大全详解
- 跳出“套路”泥沼,让在线教育回归本心