智能车中的舵机入门

单片机控制舵机 修改浏览权限 | 删除

. 什么是舵机:

舵机如下所示:

有三根线,一般依次是地,电源(5V 左右),信号(信号的幅值>=3.3V),不清

楚各个脚打开舵机一测量就知道了。

2. 其工作原理是:

控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms ,宽度为1.5ms 的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。当然我们可以不用去了解它的具体工作原理,知道它的控制原理就够了。就象我们使用晶体管一样,知道可以拿它来做开关管或放大管就行了,至于管内的电子具体怎么流动是可以完全不用去考虑的。 3. 舵机的控制:

舵机的控制一般需要一个20ms 左右的时基脉冲,该脉冲的高电平部分一般为

0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关系是这样的:

0.5ms--------------0度;

1.0ms------------45度;

1.5ms------------90度;

2.0ms-----------135度;

2.5ms-----------180度;

重要说明:

1:上面部分还是成线形关系的,Y=90X-45(X 单位是ms,Y 单位是度数:)

2:上面所说的0度 45度等是指度 45度位置(什么意思呢:我说明一下就知道了,就拿45度位置来说,若舵机停在0度位置,下载45度位置程序后则舵机停在45度,即顺时针走了45度,若当时舵机在135度位置,则反转90度到45度位置。所以舵机不存在正转反转问题。这点非常重要。

3:若想转动到45度位置,要一直产生1.0ms 的高电平(即PA0=1;

Delay(1ms);PA0=0;Delay(20ms);要不停的产生这个高低电平,产生PWM 脉冲 请看下形象描述吧:

下面是我在ATMEGA32上的测试程序,开发软件:ICC AVR

#include

typedef struct BYTE_BIT

{

unsigned BIT0:1;

unsigned BIT1:1;

unsigned BIT2:1;

unsigned BIT3:1;

unsigned BIT4:1;

unsigned BIT5:1;

unsigned BIT6:1;

unsigned BIT7:1;

}BYTEBIT;

#define SET_BIT8_FORMAT(Addr) (*((volatile BYTEBIT *)&Addr)) # define PORTB_BIT SET_BIT8_FORMAT(PORTB)

# define _PB0 PORTB_BIT.BIT0

# define _PB1 PORTB_BIT.BIT1

# define _PB2 PORTB_BIT.BIT2

# define _PB3 PORTB_BIT.BIT3

# define _PB4 PORTB_BIT.BIT4

# define _PB5 PORTB_BIT.BIT5

# define _PB6 PORTB_BIT.BIT6

# define _PB7 PORTB_BIT.BIT7

/*delay(1)延时时间为300US

delay(80)延时时间为20mS

delay(4)延时时间为1mS

delay(8)延时时间为2mS

delay(6)延时时间为1.55mS

delay(2)延时时间为0.55MS

delay(10)延时时间为2.5mS

*/

void Delay(int j)

{ int i;

for(;j>0;j--)

{

for(i=0;i

}

}

void main(void) {

int i,j;

DDRB=0XFF;

while(1)

{

//2.0ms 135度位置

_PB7=1;

Delay(8);

_PB7=0;

Delay(74);

/*

//1.0ms 45度位置

_PB7=1;

Delay(4);

_PB7=0;

Delay(78);

//1.5ms 90度位置

_PB7=1;

Delay(6);

_PB7=0;

Delay(78);

// 2.5ms 180度位置

_PB7=1;

Delay(10);

_PB7=0;

Delay(72);

//0.5ms 0度位置

_PB7=1;

Delay(2);

_PB7=0;

Delay(78);

*/

}

}

测试过绝对可以。延时时间是我用示波器测量的,硬件开发板晶振用的内部1M 晶振。

看了网上其他人有用中断的,有用PWM 的,其实目的是一样的。改变20ms 的周期波形的占空比。其实用单片机这样做也有不方面,若转动某个角度,程序修改 需要再下载一下,挺麻烦的。我让同事在LABVIEW 下做的。在上面改就可以了,非常方便

单片机控制舵机 修改浏览权限 | 删除

. 什么是舵机:

舵机如下所示:

有三根线,一般依次是地,电源(5V 左右),信号(信号的幅值>=3.3V),不清

楚各个脚打开舵机一测量就知道了。

2. 其工作原理是:

控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms ,宽度为1.5ms 的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。当然我们可以不用去了解它的具体工作原理,知道它的控制原理就够了。就象我们使用晶体管一样,知道可以拿它来做开关管或放大管就行了,至于管内的电子具体怎么流动是可以完全不用去考虑的。 3. 舵机的控制:

舵机的控制一般需要一个20ms 左右的时基脉冲,该脉冲的高电平部分一般为

0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关系是这样的:

0.5ms--------------0度;

1.0ms------------45度;

1.5ms------------90度;

2.0ms-----------135度;

2.5ms-----------180度;

重要说明:

1:上面部分还是成线形关系的,Y=90X-45(X 单位是ms,Y 单位是度数:)

2:上面所说的0度 45度等是指度 45度位置(什么意思呢:我说明一下就知道了,就拿45度位置来说,若舵机停在0度位置,下载45度位置程序后则舵机停在45度,即顺时针走了45度,若当时舵机在135度位置,则反转90度到45度位置。所以舵机不存在正转反转问题。这点非常重要。

3:若想转动到45度位置,要一直产生1.0ms 的高电平(即PA0=1;

Delay(1ms);PA0=0;Delay(20ms);要不停的产生这个高低电平,产生PWM 脉冲 请看下形象描述吧:

下面是我在ATMEGA32上的测试程序,开发软件:ICC AVR

#include

typedef struct BYTE_BIT

{

unsigned BIT0:1;

unsigned BIT1:1;

unsigned BIT2:1;

unsigned BIT3:1;

unsigned BIT4:1;

unsigned BIT5:1;

unsigned BIT6:1;

unsigned BIT7:1;

}BYTEBIT;

#define SET_BIT8_FORMAT(Addr) (*((volatile BYTEBIT *)&Addr)) # define PORTB_BIT SET_BIT8_FORMAT(PORTB)

# define _PB0 PORTB_BIT.BIT0

# define _PB1 PORTB_BIT.BIT1

# define _PB2 PORTB_BIT.BIT2

# define _PB3 PORTB_BIT.BIT3

# define _PB4 PORTB_BIT.BIT4

# define _PB5 PORTB_BIT.BIT5

# define _PB6 PORTB_BIT.BIT6

# define _PB7 PORTB_BIT.BIT7

/*delay(1)延时时间为300US

delay(80)延时时间为20mS

delay(4)延时时间为1mS

delay(8)延时时间为2mS

delay(6)延时时间为1.55mS

delay(2)延时时间为0.55MS

delay(10)延时时间为2.5mS

*/

void Delay(int j)

{ int i;

for(;j>0;j--)

{

for(i=0;i

}

}

void main(void) {

int i,j;

DDRB=0XFF;

while(1)

{

//2.0ms 135度位置

_PB7=1;

Delay(8);

_PB7=0;

Delay(74);

/*

//1.0ms 45度位置

_PB7=1;

Delay(4);

_PB7=0;

Delay(78);

//1.5ms 90度位置

_PB7=1;

Delay(6);

_PB7=0;

Delay(78);

// 2.5ms 180度位置

_PB7=1;

Delay(10);

_PB7=0;

Delay(72);

//0.5ms 0度位置

_PB7=1;

Delay(2);

_PB7=0;

Delay(78);

*/

}

}

测试过绝对可以。延时时间是我用示波器测量的,硬件开发板晶振用的内部1M 晶振。

看了网上其他人有用中断的,有用PWM 的,其实目的是一样的。改变20ms 的周期波形的占空比。其实用单片机这样做也有不方面,若转动某个角度,程序修改 需要再下载一下,挺麻烦的。我让同事在LABVIEW 下做的。在上面改就可以了,非常方便


相关文章

  • 飞思卡尔-智能车入门
  • 从外观上看,智能车系统主要表现为由一系列的硬件组成,包括组成车体的底盘.轮胎.舵机装置.马达装置.道路检测装置.测速装置和控制电路板等.硬件是智能车系统的基础,没有一个好的硬件平台,智能车就无法运行.而软件部分则是整个智能车系统的灵魂,软件 ...查看


  • 蓝宙电子智能创新实验室
  • 智能创新实验室建设方案 芜湖蓝宙电子科技有限公司 -飞思卡尔大学计划官方合作伙伴 版 本:Version 2.0 所 有 者:蓝宙电子 日 期:2014.03.12 目录 一. 二. 实验室介绍 . .................... ...查看


  • 终极入门指引"从零开始玩航模"遥控飞机,遥控直升机,遥控汽车
  • 本帖最后由 fireofice 于 2012-11-4 20:57 编辑 写在前面的话: 鉴于置顶帖被某位版版删黄贴时全部一并删除,许多优质精华帖丢失. 无奈之余,也只能在此重新补一个帖子,帮助新手入门. 也不希望以后再会出现类似于这样的愚 ...查看


  • 基于激光传感器的智能车循迹系统
  • 装 订 线 河北大学工商学院 本科生毕业论文(设计) 题目: 学 部 信息科学与工程学部 学科门类 工学 专 业 电气工程及自动化 学 号 姓 名 指导教师 2013年5月16日 基于激光传感器的智能车循迹系统 摘 要 智能汽车是未来汽车发 ...查看


  • 遥控赛车设计
  • IVT-REJX-50 苏州工业园区职业技术学院 毕业项目 苏州工业园区职业技术学院 毕业项目任务书(个人表) 系部: 电子工程系 续表: 注: 此表在指导老师指导下填写. 诚 信 声 明 本人郑重声明: 所呈交的毕业项目报告/论文< ...查看


  • 光电循迹小车使用手册
  • 光电循迹小车使用手册 1. 仿真软件介绍 在做实物之前,可以用仿真软件plastid进行在线仿真.这样不仅可以加快设计进度,同时可以减少实际电路的调试,减少出错,节约成本. Plastid是为"飞思卡尔"杯全国大学生智能 ...查看


  • 机器人保姆 | 家庭服务机器人系统设计方案...
  • 1系统整体设计方案 整个家庭服务机器人系统主要由四部分组成,包括铺满RFID智慧地板的模拟智能家居环境.移动的轮式机器人.XBee协调器以及上位机. 智能家居环境设计长为3.25米,宽为2米,铺满RFID智能地板,分隔成厨房和客厅两个房间, ...查看


  • 舵机驱动原理
  • 舵机驱动原理 1.舵机简介 2.舵机的组成 3.舵机工作原理 4.舵机选购 5.舵机控制原理及编程方法 6.实验室用舵机Futaba S3003使用说明 7.程序举例 1 概述 舵机也叫伺服电机,最早用于船舶上实现其转向功能,由于可以通过程 ...查看


  • 智能车光电组技术报告
  • 燕山大学里仁学院 智能车 光电组技术方案 朗朝见 龙悦 朱波 2011-3-6 第一章 1.1 1.2 1.3 1.4 1.5 1.6 第二章 2.1. 2.2. 2.3. 第三章 3.1. 3.3. 第四章 4.1. 4.2. 4.3. ...查看


热门内容