51单片机-舵机入门

最新更新时间:2021-10-19来源: eefocus关键字:51单片  机械控制 手机看文章 扫描二维码
随时随地手机看文章

1.舵机准备


舵机是单片机机械控制入门必学的模块,在一些机器人关节中也是采用舵机作为控制,学习并熟练掌握使用舵机是我们对单片机的进一步认识。


所以我们不能一直局限地使用开发板进行学习,而是扩展一些电子模块来辅助我们更加深入了解单片机。所以大家需要自行购买舵机。


小型的舵机与大型的舵机控制原理几乎大同小异,考虑到经济的合理使用,我们选择小型舵机作为入门学习和简单使用即可。


常见的小型舵机型号为“9g舵机”,外观大体如下

9.1.png

不过笔者觉得这种型号的舵机虽然便宜且大家都普遍使用,但是这种舵机远没有金属舵机好用,所以笔者还是建议大家选择购买与上图体型差不多但价格稍贵一点的金属舵机为好,本教程使用的舵机型号如下图所示

9.2.png

2.舵机控制原理


本教程使用的舵机为9g尺寸,型号为“MG90S”作为示例模块。


这种舵机的作用角度为0~180度,也就是舵机桨可以任意在某个角度卡死不动,由于供电原因我们使用蛮力是很难掰动舵机桨的,只有舵机掉电之后舵机桨才会任意地让我们扭动。


舵机有三根线,除了供电的两根电源线还有一根信号线,因为我们使用的是5V电压功率的舵机,所以其电源线可以直接接到单片机的+5V和GND上,信号线的话就接到单片机的一个IO端口上,这个IO端口通过输出PWM控制舵机桨的角度在任意位置上固定停留。


这个PWM的周期为20ms,高电平的时间在0.5ms~2.5ms之间可以控制舵机桨角度的停留位置。


0.5ms---------0度。


1.0ms---------45度。


1.5ms---------90度。


2.0ms---------135度。


2.5ms---------180度。


我们把舵机的电源线接好,然后信号线连接P1.7,把代码下载进去,舵机桨在上电之后就会旋转到一个固定角度的位置上停留在那不动,我们想扭动舵机桨是比较吃力的。


3.代码


#include  

#include //详见第六章第8讲

#include    //详见第八章第11讲

sbit PWMOUT = P1^7;  //舵机信号线引脚

  

void main()

{   

    LED_Init();//初始化LED硬件模块

    EA = 1;    //闭合总中断开关

    TIM0_Init(100,9);//定时0.1ms,9是微调使定时精度更高

    while(1); 

}

  

void TIM0_IRQHandler() interrupt 1

    static u8 pwm=0;

    TH0 = T0RH;  //重新加载重载值

    TL0 = T0RL;

    

    pwm++;

    if(pwm>=200)pwm=0; //pwm在0~199之间间隔0.1ms变化,周期为20ms

 

    if(pwm<10)PWMOUT=1;//高电平在周期为20ms的PWM中持续的时间为1ms,低电平持续的时间就是19ms,舵机桨在45度处的位置停留不动

    else PWMOUT=0; 

}


我们画出波形图

9.21.png

断电之后我们把舵机桨扭到另一个角度位置,然后再上电,观察舵机桨的实验现象好好领悟这个小模块的工作原理。


关键字:51单片  机械控制 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic545801.html

上一篇:51单片机-呼吸灯
下一篇:51单片机-舵机与按键

推荐阅读

51单片机外接ADC0808制作简易电压表
main.c#include<reg52.h>#define uchar unsigned char#define uint unsigned int sbit Start = P3^0;sbit EOC=P3^1; //sbit OE=P3^2 ; //uchar code table [] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//段选uchar code table_SMG [] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};//位选 //------------------------变量区-
发表于 2022-08-11
<font color='red'>51</font><font color='red'>单片</font>机外接ADC0808制作简易电压表
关于51单片机的地址空间溢出以及解决方法的个人看法(proteus无法仿真)
在51单片机程序编写中,当变量过多而且数据类型过大的话,容易在编译的时候出现以下的问题,具体表现为: *** ERROR L107: ADDRESS SPACE OVERFLOWSPACE: DATA SEGMENT: _DATA_GROUP_LENGTH: 0019HProgram Size: data=130.0 xdata=7 code=3267Target not created.这样子也就是所谓的编译失败,不能生成HEX文件,更加无法烧写到程序中去,那么如何解决这个问题呢,我在网上找到了解法,网上的具体步骤如下:1.先点击这个图标2.在其中的memory model 将small改成compact选项,那么即可编译通过。3
发表于 2022-08-10
关于<font color='red'>51</font><font color='red'>单片</font>机的地址空间溢出以及解决方法的个人看法(proteus无法仿真)
51单片机脉冲信号的计数和LCD显示
设计目标和思路在个人剂量仪开发的过程中,从探头输出的核脉冲信号经过后期放大,成形,滤波以及甄别之后,成为一系列脉冲信号输出,这种脉冲信号由于衰变的随机性,并不是固定频率的脉冲信号。我们本次设计就是针对这种脉冲进形脉冲信号的计数以及在LCD1602显示屏上面的显示。这是C语言的代码部分#include"reg51.h" #include <stdio.h>#include <math.h>#include <string.h>#include <intrins.h>#define uint8_t unsigned char //0-255#define uint16
发表于 2022-08-10
<font color='red'>51</font><font color='red'>单片</font>机脉冲信号的计数和LCD显示
51单片机之74HC138译码器控制数码管进行100s计数
/** I use a timer in my code to control the time I use 138decoder int the hardware**/#include<reg51.h>#define uint unsigned int#define uchar unsigned charsbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;uchar code tab_1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uchar tab_2[2];uchar counter=0,time=0,counter_T
发表于 2022-08-10
51单片机制作脉冲发生器
要求1.在Keil IDE(u Vision2)中完成应用程序设计,并编译2.在ISIS 7 Professional 中完成电路设计、调试与仿真/** I use a timer in my code to control the time**/#include<reg51.h>#define uint unsigned int#define uchar unsigned charuchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchar second=0,counter=0,second_1=0,second_0=0,time=
发表于 2022-08-10
<font color='red'>51</font><font color='red'>单片</font>机制作脉冲发生器
51单片机定时器2捕获模式测脉冲频率
常规方法测量脉冲的频率,利用51单片机的两个定时器来测量,一个定时器来定时,一个定时器作为计数方式;能不能有一个更好的方法,不使用这么多硬件,只使用一个定时器就可以满足需求? 当然可以的,定时器2有输入捕获功能,P1.1接外部脉冲,当来一个脉冲,定时2就进入中断服务程序中断一次,同时也有定时功能。下面是主要的程序:#include<reg52.h>#define uint unsigned int#define uchar unsigned char#define ulong unsigned longuint timer2_count;uint cap_count;uchar code dispbit[]={0x01,
发表于 2022-08-10

推荐帖子

用最新库玩转智林STM32开发板(之十)------关于HEX文件的下载
我从开始到现在,共计写了九讲,关于智林开发板的库例程,但我必须说明一下,我写过的东东都是好用的,但扩大到智林用户"上帝"中就会出现这样或那样的问题,首先我说一下我的编程思路,我一般只用三个文件,1,STM32F10X.S就是起始文件,这是KEIL给你的,白送.2.主程序文件,main.c3,库文件我用的是STM32F10xR.LIB 有人会问你用*R.lib,智林ULINK还好用不拉,我可心告诉你,绝对好用,但只能对我编的程序打断点,这一点我觉得足够了,你没事调库的东东干
ddllxxrr stm32/stm8
WinCE 注册表问题
在WinCE系统中,如何查看注册表信息: 天天看大家说看看注册表,那到底用什么方式打开注册表啊、WinCE注册表问题
54288519 WindowsCE
【MP430共享】基于MSP430单片机的倒车雷达设计
本文详细介绍了一种基于MSP430单片机的超声波脉冲测距预警倒车雷达系统。该系统以空气中超声波的传播速度为确定条件,利用反射超声波测量待测距离。论文介绍了超声波传感器的原理以及特性,并且在此基础上提出了系统的总体构成。针对测距系统发射、接受、检测、多路控制、显示部分的总体设计方案进行了论证 [本帖最后由hangsky于2011-9-808:23编辑]【MP430共享】基于MSP430单片机的倒车雷达设计
hangsky 微控制器 MCU
选择ASIC、FPGA、DSP设计无线电系统的准则1
ASIC、FPGA和DSP的应用领域呈现相互重迭的趋势,使设计人员必须在软件无线电架构设计中重新考虑组件选择策略问题。本文从可程序性、整合度、开发周期、性能和功率五个方面论述了选择ASIC、FPGA和DSP的重要准则。 软件无线电(SoftwareDefinedRadio;SDR)架构一直被认为是基地台开发的重要关键,而随着其适应新通讯协议的能力不断增强,软件无线电架构已被一些设计人员视为在单个基础架构设计中支持多种无线通讯协议的重要解决方案。 直到最近,软件无线电仍然只是大多数通
yyy FPGA/CPLD
请问:状态机被综合掉的问题
我用3段式写一个状态机没事,但我改成一段式写就出现了这个错误:Warning:Can\'tdisplaystatemachinestates--registerholdingstatemachinebit"|singlestate|CURRENT_STATE.writedata0"wassynthesizedaway 为什么状态机会被综合掉呢??请问:状态机被综合掉的问题
yaxuangela FPGA/CPLD
06、安路SparkRoad国产FPGA测评【学习篇】RGB灯
本帖最后由1nnocent于2022-7-2715:44编辑 RGB三色灯例程实现的功能为R、G、B三种颜色交替点亮,个人比较想看到的是多种颜色灯的组合,但是历程并没有实现此功能。RGB灯其实非常简单,就是三个不同颜色的LED,在分析代码时顺便改下代码(具体功能为一个灯亮时,三个灯依次点亮;两个灯亮时,两两依次点亮;三个灯亮时,三个全亮,再三个全不亮。一共八种情况),实现多种颜色的组合。以下是硬件原理图和对应的FPGA引脚:接下来简单分析以下代码:输入接口为2
1nnocent 国产芯片交流
小广播
实战 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved