搜档网
当前位置:搜档网 › 单片机控制 舵机 参考程序

单片机控制 舵机 参考程序

单片机控制 舵机 参考程序

单片机控制舵机参考程序

51 单片机的资源都差不多,这里采用STC89C52 作为控制芯片,上位机的输出控制信号,利用串口接收控制舵机。理论上,只用一个定时器就可以产生无限多路PWM波输出,但事实上,PWM输出越多,定时器中断里面操作的语句就越多,很繁杂,单片机的运行速度会变得很慢,以致于输出PWM波周期大于一般舵机的控制周期20ms,或者频率产生误差,导致舵机的颤抖。所以,只利用一个定时器输出PWM有一定限制,路数不能太多,如果需要控制的舵机数量太多,建议更换带有PWM输出的单片机。下面是单片机控制三路舵机的程序。#include

sbit duoji1=P3 ;//PWM 输出口1

sbit duoji2=P2;//PWM输出口2

sbit duoji3=P2 ;//PWM 输出口3

intt,xinhao[3],flag;//xinhao[3]是上位机传来的三个控制信号

void main()

{

EA=1;

flag=0;

for(t=0;t xinhao[t]=15;//初始化控制信号

t=0;

TMOD=0x21;//设置定时器1 的工作方式为3,用于产生波特率,//接收串口的数据,设置定时器0 的工作方式为1,//用于控制舵机的PWM 波输出TH1=0xfd;//设置串口波特率为9600

TL1=0xfd;

基于单片机的机械臂控制系统设计与制作汇总

基于单片机的机械臂控制系统设计与制作 电子信息科学与技术专业 学号:3080203201 姓名:丁路 班级:电科081 日期:2011.10.26

目录 课程设计题目及要求 第一章绪论 1.1 设计题目及要求 1.2 设计内容 第二章硬件设计 2.1 硬件结构图 2.2 各模块工作原理及设计 2.2.1 控制模块 2.2.2 显示模块 2.2.3 按键模块 2.2.4 舵机模块 2.3 软件程序设计 第三章硬件制作以及程序的下载调试 3.1 电路板的制作 3.2 元器件的焊接 3.3 程序的下载与调试 第四章总结 4.1 课程设计体会 4.2 奇瑞参观感受 课程设计题目及要求

题目:基于单片机的机械臂控制系统设计与制作 实习内容: 1,完成基于单片机的机械臂控制系统原理图和PCB的绘制,在基本要求的基础上自己可以作一定的扩展; 2,利用热转印纸、三氯化铁腐蚀液等完成PCB板的制作; 3,完成相应电路的焊接和调试; 4,完成相应软件程序的编写; 5,完成软、硬件的联调; 6,交付实习报告。 实习要求: 1,两人一组,自由搭配,但要遵循能力强弱搭配、男女搭配、考研和不考研的搭配; 2,充分发挥主观能动性,遇到问题尽量自己解决,在基本要求基础上可自由发挥; 3,第一次制作电路,电路不可追求复杂; 4,注意安全!熨斗、烙铁。 第一章绪论

单片机自20世纪70年代问世以来,以其极高的性价比,受到人们的重视和关注,应用广泛,发展迅速。单片机集体积小、重量轻、抗干扰能力强、环境要求低、价格低廉、可靠性高、灵活性好、开发较为容易等众多优点,以广泛用于工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,无论在民间、商业、及军事领域单片机都发挥着十分重要的作用二十一世纪,随着机械化、自动化水平的不断提高,不仅减轻了劳动强度、提高生产率,而且把人类活动从危险、恶劣环境中替换出来。而其中机器人技术,显示出极大的优越性;在宇宙探索、海洋开发以及军事应用上具有重要的实用价值。大力发展机器人技术,一方面能让社会从劳动苦力型转换到福利休闲型,另一方面能极大的提高民众的幸福感。在新时期的世界各国,随着应用日益广泛,机器人技术将不断发展并走向成熟。 本次课程设以单片机作为控制器实现对机械手臂的简单控制。在单片机最小系统的基础上扩展按键接口和舵机接口以及LED显示器,构成最简单的机械臂控制系统。 第二章硬件设计 2.1 硬件结构图 本系统的控制器采用的是STC 12C5A32S2单片机,具有A/D转换

51单片机程序:按键控制舵机角度

#include "reg52.h" unsigned char count; //0.5ms次数标识 sbit pwm =P2^7 ; //PWM信号输出 sbit jia =P2^4; //角度增加按键检测IO口 sbit jan =P2^5; //角度减少按键检测IO口 unsigned char jd=5; //角度标识 void delay(unsigned char i)//延时 { unsigned char j,k; for(j=i;j>0;j--) for(k=125;k>0;k--); } void Time0_Init() //定时器初始化 { TMOD = 0x01; //定时器0工作在方式1 IE = 0x82; TH0 = 0xfe; TL0 = 0x33; //11.0592MZ晶振,0.5ms TR0=1; //定时器开始 } void Time0_Int() interrupt 1 //中断程序 { TH0 = 0xfe; //重新赋值 TL0 = 0x33; if(count< jd) //判断0.5ms次数是否小于角度标识 pwm=1; //确实小于,PWM输出高电平 else pwm=0; //大于则输出低电平 count=(count+1); //0.5ms次数加1 count=count%40; //次数始终保持为40 即保持周期为20ms } void keyscan() //按键扫描 { if(jia==0) //角度增加按键是否按下 { delay(10); //按下延时,消抖 if(jia==0) //确实按下 { jd++; //角度标识加1 count=0; //按键按下则20ms周期从新开始 if(jd==6) jd=5; //已经是180度,则保持 while(jia==0); //等待按键放开

51单片机超高精度6路舵机控制程序

51单片机超高精度6路舵机控制程序 #include //包含单片机寄存器的头文件 #define uchar unsigned char #define uint unsigned int P0M1=0X00; P0M0=0XFF;//设置P0 为强推挽输出 sbit servo0=P0^0; sbit servo1=P0^1; sbit servo2=P0^2; sbit servo3=P0^3; sbit servo4=P0^4; sbit servo5=P0^5; sbit servo6=P0^6; sbit servo7=P0^7; uchar serVal[2]; uint pwm[]={1382,1382,1382,1382,1382,1382,1382,1382}; //初始90度,(实际是1382.4,取整得1382) uchar pwm_flag=0; uint code ms0_5Con=461; //0.5ms计数(实际是460.8,取整得461) uint code ms2_5Con=2304; //2.5ms计数 /******************************************************************** * 功能: 串口初始化,晶振11.0592,波特率9600,使能了串口中断 ***********************************************************************/ void Com_Init() { TMOD |= 0x20; //用定时器设置串口波特率 TH1=0xFD; //256-11059200/(32*12*9600)=253 (FD) TL1=0xFD;//同上 TR1=1;//定时器1开关打开 REN=1; //开启允许串行接收位 SM0=0;//串口方式,8位数据 SM1=1;//同上 EA=1; //开启总中断 ES=1; //串行口中断允许位 } /******************************************************************** * 功能: 舵机PWM中断初始化 ***********************************************************************/ void Timer0Init()

舵机的原理与单片机控制

舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具,如航模,包括飞机模型,潜艇模型;遥控机器人中已经使用得比较普遍。舵机是一种俗称,其实是一种伺服马达。 一、舵机原理: 舵机有舵盘,位置反馈电位器,减速齿轮组,直流电机和控制电路组成。减速齿轮组由直流电机驱动,其输出转轴带动一个具有线性比例特性的位置反馈电位器作为位置检测。控制电路根据电位器的反馈电压,与外部输入控制脉冲进行比较,产生纠正脉冲,控制并驱动直流电机正转或反转,使减速齿轮输出的位置与期望值相复合。从而达到精确控制转向角度的目的。 二、舵机的参数 转速:由舵机无负载的情况下转过60°角所需时间来衡量,常见舵机的速度一般在 0.11/60°~0.21S/60°之间。 扭矩:单位是KG·CM,这是一个扭矩单位。可以理解为在舵盘上距舵机轴中心水平距离1CM 处,舵机能够带动的物体重量。 电压:小型舵机的工作电压一般为4.8V或6V。 重量:以克为单位,微型9g舵机,中型45g,100g舵机等。 三、舵机的脉冲控制 舵机的控制脉冲周期20ms,脉宽从0.5ms-2.5ms,分别对应-90 度到+90 度的位置,以

180度角度伺服为例 注:这只是一种参考数值,具体的参数,请参见舵机的技术参数。改变高电平的脉冲宽度就改变了输出角度。 四、舵机的单片机控制

舵机的单片机控制: 舵机只有3根线,电压,地,脉宽控制信号线,与单片机接口只需要一条线,PB0为单片机定时器输出脚,用单片机的定时器产生20ms的脉冲频率控制舵机,通过改变脉冲的占空比来控制输出角度。舵机转动时需要消耗比较大的电流,所以舵机的电源最好单独提供,不要和单片机使用同一路电源。 点击参见:AVR单片机定时器输出PWM实例 小企鹅diy科学探究学习网 更多文章转到https://www.sodocs.net/doc/1516510287.html,/wqb_lmkj/blog文章分类-机器人

51红外循迹小车报告(舵机版)最终版

简易教程

前言 往届全国大学生电子设计竞赛曾多次出现了集光、机、电于一体的简易智能小车题目,此次,笔者在通过多次论证、比较与实验之后,制作出了简易小车的寻迹电路系统。 整个系统基于普通玩具小车的机械结构,利用小车的底盘、前后轮电机及其自动复原装置,能够平稳跟踪路面黑色轨迹运行。系统分为检测、控制、驱动三个模块。首先利用光电对接收管和路面信号进行检测,然后经过比较器处理,对软件控制模块进行实时控制,输出相应的信号给驱动芯片驱动电机转动,从而控制整个小车的运动。 智能小车能在画有黑线的白纸“路面”上行驶,这是由于黑线和白纸对光线的反射系数不同,小车可根据接收到的反射光的强弱来判断“道路”---黑线,最终实现简单的循迹运动。 个人水平有限,有错误不足之处,还望各位前辈同学多多包含,指出修正,完善。谢谢! 李学云王维 2016年7月27号

目录 前言 (1) 第一部分硬件设计 (1) 1.1 车模选择 (1) 1.2传感器选择 (1) 1.3 控制模块选择 (2) 第二部分软件设计及调试 (3) 2.1 开发环境 (3) 2.2总体框架 (3) 2.3 舵机程序设计与调试 (3) 2.3.1 程序设计 (3) 2.3.2 调试 (3) 2.3.3 程序代码 (4) 2.4 传感器调试 (5) 2.4.1 传感器好坏的检测 (5) 2.4.2 单片机能否识别信号并输出信号 (5) 2.5 综合调试 (7) 附录1 (9) 第一篇舵机(舵机及转向控制原理) (9) 1.1概述 (9) 1.2舵机的组成 (10) 1.3舵机工作原理 (11) 1.4舵机使用中应注意的事项 (12) 1.5如何利用程序实现转向 (12) 1.6舵机测试程序 (13) 附录2 (14) 第二篇光电红外传感器 (14) 2.1传感器的原理 (14) 2.2红外光电传感器ST188 结构图 (15) 2.3传感器的选择 (15) 2.4传感器的安装 (16) 2.5使用方法 (16) 2.7红外传感器输入输出调试程序 (17)

单片机控制舵机

舵机如下所示: 有三根线,一般依次是地,电源(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;

舵机控制程序

在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。 舵机是一种位置伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。其工作原理是:控制信号由接收机的通道进入信号调制芯片,

获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。舵机的控制信号是PWM信号,利用占

空比的变化改变舵机的位置。一般舵机的控制要求如图1所示。 图1 舵机的控制要求 单片机实现舵机转角控制可以使用FPGA、模拟电路、单片机来产生舵机的控制信号,但FPGA成本高且电路复杂。对于脉宽调制信号的脉宽变换,常用的一种方法是采用调制信号获取有源滤波后的直流电压,但是需要50Hz(周期是20ms)的信号,这对运放 器件的选择有较高要求,从电路体积和功耗考虑也不易采用。5mV 以上的控制电压的变化就会引起舵机的抖动,对于机载的测控系统而言,电源和其他器件的信号噪声都远大于5mV,所以滤波

电路的精度难以达到舵机的控制精度要求。 也可以用单片机作为舵机的控制单元,使PWM信号的脉冲宽度实现微秒级的变化,从而提高舵机的转角精度。单片机完成控制算法,再将计算结果转化为PWM信号输出到舵机,由于单片机系统是一个数字系统,其控制信号的变化完全依靠硬件计数,所以受外界干扰较小,整个系统工作可靠。 单片机系统实现对舵机输出转角的控制,必须首先完成两个任务:首先是产生基本的PWM周期信号,本设计是产生20ms的周期信号;其次是脉宽的调整,即单片机模拟PWM信号的输出,并且调整占空比。当系统中只需要实现一个舵机的控制,采用的控制方式是改变单片机的一个定时器中断的初值,将20ms分为两次中断执行,一次短定时中断和一次长定时中断。这样既节省了硬件电路,也减少了软件开销,控制系统工作效率和控制精度都很高。 具体的设计过程: 例如想让舵机转向左极限的角度,它的正脉冲为2ms,则负脉冲为 20ms-2ms=18ms,所以开始时在控制口发送高电平,然后设置定时器在

单片机程序按键控制舵机角度

#i n c l u d e"r e g52.h" unsigned char count; //0.5ms次数标识 sbit pwm =P2^7 ; //PWM信号输出 sbit jia =P2^4; //角度增加按键检测IO口 sbit jan =P2^5; //角度减少按键检测IO口 unsigned char jd=5; //角度标识 void delay(unsigned char i)//延时 { unsigned char j,k; for(j=i;j>0;j--) for(k=125;k>0;k--); } void Time0_Init() //定时器初始化 { TMOD = 0x01; //定时器0工作在方式1 IE = 0x82; TH0 = 0xfe; TL0 = 0x33; //11.0592MZ晶振,0.5ms TR0=1; //定时器开始 } void Time0_Int() interrupt 1 //中断程序 {

TH0 = 0xfe; //重新赋值 TL0 = 0x33; if(count< jd) //判断0.5ms次数是否小于角度标识 pwm=1; //确实小于,PWM输出高电平 else pwm=0; //大于则输出低电平 count=(count+1); //0.5ms次数加1 count=count%40; //次数始终保持为40 即保持周期为20ms } void keyscan() //按键扫描 { if(jia==0) //角度增加按键是否按下 { delay(10); //按下延时,消抖 if(jia==0) //确实按下 { jd++; //角度标识加1 count=0; //按键按下则20ms周期从新开始 if(jd==6) jd=5; //已经是180度,则保持 while(jia==0); //等待按键放开 }

舵机控制

利用单片机PWM信号进行舵机控制(图) 基于单片机的舵机控制方法具有简单、精度高、成本低、体积小的特点,并可根据不同的舵机数量加以灵 活应用。 在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。 舵机是一种位置伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。其工作原理是:控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。 图1舵机的控制要求 舵机的控制信号是PWM信号,利用占空比的变化改变舵机的位置。一般舵机的控制要求如图1所示。 单片机实现舵机转角控制 可以使用FPGA、模拟电路、单片机来产生舵机的控制信号,但FPGA成本高且电路复杂。对于脉宽调制信号的脉宽变换,常用的一种方法是采用调制信号获取有源滤波后的直流电压,但是需要50Hz(周期是20ms)的信号,这对运放器件的选择有较高要求,从电路体积和功耗考虑也不易采用。5mV以上的控制电压的变化就会引起舵机的抖动,对于机载的测控系统而言,电源和其他器件的信号噪声都远大于5mV,所以滤波电路的精度难以达到舵机的控制精度要求。 也可以用单片机作为舵机的控制单元,使PWM信号的脉冲宽度实现微秒级的变化,从而提高舵机的转角精度。单片机完成控制算法,再将计算结果转化为PWM信号输出到舵机,由于单片机系统是一个数字系统,其控制信号的变化完全依靠硬件计数,所以受外界干扰较小,整个系统工作可靠。 单片机系统实现对舵机输出转角的控制,必须首先完成两个任务:首先是产生基本的PWM周期信号,本设

51控制舵机程序大全

#include void InitTimer0(void) { TMOD = 0x01; TH0 = 0x0B1; TL0 = 0x0E0; EA = 1; ET0 = 1; TR0 = 1; }void delay(1)(void) { unsigned char a,b,c; for(c=1;c>0;c--) for(b=142;b>0;b--) for(a=2;a>0;a--); } void main(void) { InitTimer0(); P1_2=0; while(1); } void Timer0Interrupt(void) interrupt 1 { //20ms中断 TH0 = 0x0B1; TL0 = 0x0E0; P1_2=1; delay(1); P1_2=0; }

#include #include #include #define uchar unsigned char #define uint unsigned int sbit IN1=P0^0; sbit IN2=P0^1; sbit EA1=P0^5; sbitdj=P0^7; //舵机口 uint t=0;//中断次数 ucharzk;//高电平中断次数uchar p=0;//定义pwm占空比void delay(uint z) { uinti,j; for(i=0;i>8;//100us一次中断TL0=-100%256; if(t==0)zk=p; if(t=zk) dj=0; t++; if(t>=200) t=0;//20mspwm周期 } void turn_left() { IN1=1;IN2=0;EA1=1;//电机工作p=5;//0.5ms delay(600); } void turn_right() { IN1=1;IN2=0;EA1=1;//电机工作p=25;//2.5ms delay(600);

单片机按键控制舵机转动

忆飞工作室 https://www.sodocs.net/doc/1516510287.html, 忆飞电子淘宝店欢迎进入 设计者:曾传辉 时间2012年8月13号 手机:134******** QQ:36439133 旺旺:epiapl_cn 程序名称:按键控制舵机控制 程序效果:单片机两个按键控制左右转,转角90度单片 #include #define Sevro_moto_pwm P1_0 //接舵机信号端输入PWM信号调节速度 #define k1 P2_5 //按键控制舵机左转 #define k2 P2_6 //按键控制舵机右转 unsigned char pwm_val_left = 0;//变量定义 unsigned char push_val_left;// =14;//舵机归中,产生约,1.5MS 信号 unsigned int timer=0; //延时基准变量 unsigned char timer1=0; //扫描时间变量 void pwm_Servomoto(void); //函数申明 unsigned int val,val2,fl1,fl2; //变量申明 /************************************************************************/ void delay(unsigned int k) //延时函数 { unsigned int x,y; for(x=0;x

舵机简介及单片机C51控制方法

1、概述 舵机最早出现在航模运动中。在航空模型中,飞行机的飞行姿态是通过调节发动机和各个控制舵面来实现的。举个简单的四通飞机来说,飞机上有以下几个地方需要控制: 1.发动机进气量,来控制发动机的拉力(或推力); 2.副翼舵面(安装在飞机机翼后缘),用来控制飞机的横滚运动; 3.水平尾舵面,用来控制飞机的俯仰角; 4.垂直尾舵面,用来控制飞机的偏航角; 遥控器有四个通道,分别对应四个舵机,而舵机又通过连杆等传动元件带动舵面的转动,从而改变飞机的运动状态。舵机因此得名:控制舵面的伺服电机。 不仅在航模飞机中,在其他的模型运动中都可以看到它的应用:船模上用来控制尾舵,车模中用来转向等等。由此可见,凡是需要操作性动作时都可以用舵机来实现。 2、结构和控制 一般来讲,舵机主要由以下几个部分组成,舵盘、减速齿轮组、位置反馈电位计5k、直流电机、控制电路板等。 工作原理:控制电路板接受来自信号线的控制信号(具体信号待会再讲),控制电机转动,电机带动一系列齿轮组,减速后传动至输出舵盘。舵机的输出轴和位置反馈电位计是相连的,舵盘转动的同时,带动位置反馈电位计,电位计将输出一个电压信号到控制电路板,进行反馈,然后控制电路板根据所在位置决定电机的转动方向和速度,从而达到目标停止。 舵机的基本结构是这样,但实现起来有很多种。例如电机就有有刷和无刷之分,齿轮有塑料和金属之分,输出轴有滑动和滚动之分,壳体有塑料和铝合金之分,速度有快速和慢速之分,体积有大中小三种之分等等,组合不同,价格也千差万别。例如,其中小舵机一般称作微舵,同种材料的条件下是中型的一倍多,金属齿轮是塑料齿轮的一倍多。需要根据需要选用不同类型。 舵机的输入线共有三条,红色中间,是电源线,一边黑色的是地线,这辆根线给舵机提供最基本的能源保证,主要是电机的转动消耗。电源有两种规格,一是4.8V,一是6.0V,分别对应不同的转矩标准,即输出力矩不同,6.0V对应的要大一些,具体看应用条件;另外一根线是控制信号线,Futaba的一般为白色,JR的一般为桔黄色。另外要注意一点,SANWA的某些型号的舵机引线电源线在边上而不是中间,需要辨认。但记住红色为电源,黑色为地线,一般不会搞错。舵机的控制信号为周期是20ms的脉宽调制(PWM)信号,其中脉冲宽度从 0.5ms-2.5ms,相对应舵盘的位置为0-180度,呈线性变化。也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应的角度上,无论外界转矩怎样改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应的位置上。舵机内部有一个基准电路,产生周期20ms,宽度1.5ms的基准信号,有一个比较器,将外加信号与基准信号相比较,判断出方向和大小,从而产生电机的转动信号。由此可见,舵机是一种位置伺服的驱动器,转动范围不能超过180度,适用于那些需要角度不断变化并可以保持的驱动当中。比方说机器人的关节、飞机的舵面等。 常见的舵机厂家有:日本的Futaba、JR、SANWA等,国产的有北京的新幻想、吉林的振华等。现举Futaba S3003来介绍相关参数,以供大家设计时选用。之所

舵机控制C程序

舵机控制C程序 #include #defineucharunsignedchar #defineuintunsignedint /* 变量定义 */ ucharkey_stime_counter,hight_votage=15,timeT_counter; bitkey_stime_ok; /* 引脚定义 */ sbitcontrol_signal=P0^0; sbitturn_left=P3^4; sbitturn_right=P3^5; /***************************************************************** 名称:定时器0初始化 功能:20ms定时,11.0592M晶振 初值20ms 初值0.1ms *****************************************************************/ voidTimerInit() { control_signal=0; TMOD=0x01;//设置定时器0为工作方式1 EA=1;//开总中断 ET0=1;//定时器0中断允许 TH0=0xFF;//定时器装初值 TL0=0xA3; TR0=1;//启动定时器0 } /********************************************** 定时器0中断服务函数 ***********************************************/ voidtimer0(void)interrupt1using0 { TH0=0xFF; TL0=0xA3;//定时器0重新装入数值

51单片机一个定时器控制多路舵机

#ifndef __interrupt0_H__ #define __interrupt0_H__ void interrupt0() //STM中断服务子程序 { _t2af = 0 ; switch (cnt) { case 0: PWMOUT_2 = PWMOUT_3 = PWMOUT_4 = PWMOUT_5 = PWMOUT_6 = 0; PWMOUTbuf_1 = (PWMbuf - PWMOUTbuf_1); _tm2al = PWMOUTbuf_1 & 0x00ff; _tm2ah = PWMOUTbuf_1 >>8 ; //重新定义计数初值 if( PWMOUTbuf_1 >= PWMOUTbufmin1 && PWMOUTbuf_1 <= PWMOUTbufmax1) {PWMOUTbuf_1 = PWMOUTcnt_1; PWMOUT_1 = 1;} else {PWMOUTbuf_1 = PWMbuf-PWMOUTcnt_1; PWMOUT_1 = 0 ; cnt = 1;} //判断脉宽是否在正常范围之内 break; case 1: PWMOUT_1 = PWMOUT_3 = PWMOUT_4 = PWMOUT_5 = PWMOUT_6 = 0; PWMOUTbuf_2 = (PWMbuf - PWMOUTbuf_2); _tm2al = PWMOUTbuf_2 & 0x00ff; //重新定义计数初值 _tm2ah = PWMOUTbuf_2 >> 8; if(PWMOUTbuf_2 >= PWMOUTbufmin1 && PWMOUTbuf_2 <= PWMOUTbufmax1) {PWMOUTbuf_2 = PWMOUTcnt_2; PWMOUT_2 = 1;} else {PWMOUTbuf_2 = PWMbuf-PWMOUTcnt_2;PWMOUT_2 = 0;cnt = 2;} //判断脉宽是否在正常范围之内 break; case 2: PWMOUT_1 = PWMOUT_2 = PWMOUT_4 = PWMOUT_5 = PWMOUT_6 = 0; PWMOUTbuf_3 = (PWMbuf - PWMOUTbuf_3); _tm2al = PWMOUTbuf_3 & 0x00ff; //重新定义计数初值 _tm2ah = PWMOUTbuf_3 >> 8; if(PWMOUTbuf_3 >= PWMOUTbufmin1 && PWMOUTbuf_3 <= PWMOUTbufmax1) {PWMOUTbuf_3 = PWMOUTcnt_3; PWMOUT_3 = 1;}

51单片机控制舵机程序

#include <> #define Stop 0 //宏定义,停止 #define Left 1 //宏定义,左转 #define Right 2 //宏定义,右转 sbit ControlPort = P2^0; //舵机信号端口 sbit KeyLeft = P1^0; //左转按键端口 sbit KeyRight = P1^1; //右转按键端口 sbit KeyStop = P1^2; //归位按键端口 unsigned char TimeOutCounter = 0,LeftOrRight = 0; //TimeOutCounter:定时器溢出计数 LeftOrRight:舵机左右旋转标志 void InitialTimer ( void ) { TMOD=0x10; //定时/计数器1工作于方式1 TH1 = ( 65535 - 500 ) / 256; // TL1 = ( 65535 - 500 ) % 256; EA=1; //开总中断 ET1=1; //允许定时/计数器1 中断 TR1=1; //启动定时/计数器1 中断 } void ControlLeftOrRight ( void ) //控制舵机函数 { if( KeyStop == 0 ) { //while ( !KeyStop ); //使标志等于Stop(0),在中断函数中将用到

LeftOrRight = Stop; } if( KeyLeft == 0 ) { //while ( !KeyLeft ); //使标志等于Left(1),在中断函数中将用到 LeftOrRight = Left; } if( KeyRight == 0 ) { //while ( !KeyRight ); //使标志等于Right(2),在中断函数中将用到 LeftOrRight = Right; } } void main ( void ) //主函数 { InitialTimer(); for(;;) { ControlLeftOrRight(); } } void Timer1 ( void ) interrupt 3 //定时器中断函数 { TH1 = ( 65535 - 500 ) / 256;

stc12c5a60s2单片机驱动舵机程序

stc12c5a60s2单片机驱动舵机程序 #include ; //STC12C5A系列单片机 #define uchar unsigned char #define uint unsigned int //宏定义 #define ulint unsigned long int //宏定义 void delay(uint time); void Timer_init(); void Timer0(unsigned long int us); uint pwm_valu=500; sbit dj=P1^0; void main() { Timer_init();//定时器初始化 Timer0(31); //通过一个定时值进入定时循环 while(1) { pwm_valu=550; //

delay(2000); pwm_valu=2500; // delay(2000); // pwm_valu=1000; // delay(2000); // pwm_valu=2000; // delay(2000); // pwm_valu=1500; // delay(2000); } } //软件延时 void delay(uint time)

uint i,j; for(i=0;i;>;8; TL0=(valu;>;8; TR0 = 1;//T0开始工作 } /************************************* t0 中断中断 *************************************/ void T0zd() interrupt 1 { static uchar num=1; switch(num) // { case 1: { dj=1;

舵机控制(读书)

由于rocky于Sun May 18, 2003 12:59 pm 向本人提出希望了解有关舵机的知识,现将本人在航空模型运动中和机器人制作中积累的一点点经验写出来,奉献给大家,希望本文能起到抛砖引玉的作用。但由于时间仓促,难免有不正确的地方,热情欢迎大家批评指教。 1、概述 舵机最早出现在航模运动中。在航空模型中,飞行机的飞行姿态是通过调节发动机和各个控制舵面来实现的。举个简单的四通飞机来说,飞机上有以下几个地方需要控制: 1.发动机进气量,来控制发动机的拉力(或推力); 2.副翼舵面(安装在飞机机翼后缘),用来控制飞机的横滚运动; 3.水平尾舵面,用来控制飞机的俯仰角; 4.垂直尾舵面,用来控制飞机的偏航角; 遥控器有四个通道,分别对应四个舵机,而舵机又通过连杆等传动元件带动舵面的转动,从而改变飞机的运动状态。舵机因此得名:控制舵面的伺服电机。 不仅在航模飞机中,在其他的模型运动中都可以看到它的应用:船模上用来控制尾舵,车模中用来转向等等。由此可见,凡是需要操作性动作时都可以用舵机来实现。 2、结构和控制 一般来讲,舵机主要由以下几个部分组成,舵盘、减速齿轮组、位置反馈电位计5k、直流电机、控制电路板等。 工作原理:控制电路板接受来自信号线的控制信号(具体信号待会再讲),控制电机转动,电机带动一系列齿轮组,减速后传动至输出舵盘。舵机的输出轴和位置反馈电位计是相连的,舵盘转动的同时,带动位置反馈电位计,电位计将输出一个电压信号到控制电路板,进行反馈,然后控制电路板根据所在位置决定电机的转动方向和速度,从而达到目标停止。 舵机的基本结构是这样,但实现起来有很多种。例如电机就有有刷和无刷之分,齿轮有塑料和金属之分,输出轴有滑动和滚动之分,壳体有塑料和铝合金之分,速度有快速和慢速之分,体积有大中小三种之分等等,组合不同,价格也千差万别。例如,其中小舵机一般称作微舵,同种材料的条件下是中型的一倍多,金属齿轮是塑料齿轮的一倍多。需要根据需要选用不同类型。 舵机的输入线共有三条,红色中间,是电源线,一边黑色的是地线,这辆根线给舵机提供最基本的能源保证,主要是电机的转动消耗。电源有两种规格,一是4.8V,一是6.0V,分别对应不同的转矩标准,即输出力矩不同,6.0V对应的要大一些,具体看应用条件;另外一根线是控制信号线,Futaba的一般为白色,JR的一般为桔黄色。另外要注意一点,SANWA的某些型号的舵机引线电源线在边上而不是中间,需要辨认。但记住红色为电源,黑色为地线,一般不会搞错。 舵机的控制信号为周期是20ms的脉宽调制(PWM)信号?,其中脉冲宽度从0.5ms-2.5ms,相对应舵盘的位置为0-180度,呈线性变化。也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应的角度上,无论外界转矩怎样改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应的位置上。舵机内部有一个基准电路,产生周期20ms,宽度1.5ms的基准信号,有一个比较器,将外加信号与基准信号相比较,判断出方向和大小,从而产生电机的转动信号。由此可见,舵机是一种位置伺服的驱动器,转动范围不能超过180度,适用于那些需要角度不断变化并可以保持的驱动当中。比方说机器人的关节、飞机的舵面等。常见的舵机厂家有:日本的Futaba、JR、SANWA等,国产的有北京的新幻想、吉林的振华等。现举Futaba S3003来介绍相关参数,以供大家设计时选用。之所以用3003是因为这个型号是市场上最常见的,也是价格相对较便宜的一种(以下数据摘自Futaba产品手册)。 尺寸(Dimensions):40.4×19.8×36.0 mm

基于51单片机的舵机控制原理

网络上流行的对舵机的误解文章太多太多!而且很怪异的是——很多主流的意识是错误的!!! 下面这篇文章,我大致看过,是符合科学原理的,想学习知识的可以看看。 注意吸收知识,要由根本上去分析,而不是以讹传讹!否则你必定就象很多人一样去坚守“数码舵机比模拟舵机快”这个完全错误的观点,呵呵,那会被真正掌握知识的人暗地里面耻笑的 数码舵机常见问题原理分析及解决: 一、数码舵机与模拟舵机的区别 传统模拟舵机和数字比例舵机(或称之为标准舵机)的电子电路中无MCU微控制器,一般都称之为模拟舵机。老式模拟舵机由功率运算放大器等接成惠斯登电桥,根据接收到模拟电压控制指令和机械连动位置传感器(电位器)反馈电压之间比较产生的差分电压,驱动有刷直流电机伺服电机正/反运转到指定位置。数字比例舵机是模拟舵机最好的类型,由直流伺服电机、直流伺服电机控制器集成电路(IC),减速齿轮组和反馈电位器组成,它由直流伺服电机控制芯片直接接收PWM(脉冲方波,一般周期为20ms,脉宽1~2 ms,脉宽1 ms为上限位置,1.5ms为中位,2ms为下限位置)形式的控制驱动信号,迅速驱动电机执行位置输出,直至直流伺服电机控制芯片检测到位置输出连动电位器送来的反馈电压与PWM控制驱动信号的平均有效电压相等,停止电机,完成位置输出。 数码舵机电子电路中带MCU微控制器故俗称为数码舵机,数码舵机凭借比之模拟舵机具有反应速度更快,无反应区范围小,定位精度高,抗干扰能力强等优势已逐渐取代模拟舵机在机器人、航模中得到广泛应用。 数码舵机设计方案一般有两种:一种是MCU+直流伺服电机+直流伺服电机控制器集成电路(IC)+减速齿轮组+反馈电位器的方案,以下称为方案1,另一种是MCU+直流伺服电机+减速齿轮组+反馈电位器的方案,以下称为方案2。市面上加装数码驱动板把模拟舵机改数码舵机属方案1。 二、舵机电机调速原理及如何加快电机速度 常见舵机电机一般都为永磁直流电动机,如直流有刷空心杯电机。直流电动机有线形的转速-转矩特性和转矩-电流特性,可控性好,驱动和控制电路简单,驱动控制有电流控制模式和电压控制两种模式。舵机电机控制实行的是电压控制模式,即转速与所施加电压成正比,驱动是由四个功率开关组成H桥电路的双极性驱动方式,运用脉冲宽度调制(PWM)技术调节供给直流电动机的电压大小和极性,实现对电动机的速度和旋转方向(正/反转)的控制。电机的速度取决于施加到在电机平均电压大小,即取决于PWM驱动波形占空比(占空比为脉宽/周期的百分比)的大小,加大占空比,电机加速,减少占空比电机减速。 所以要加快电机速度:1、加大电机工作电压;2、降低电机主回路阻值,加大电流;二者在舵机设计中要实现,均涉及在满足负载转矩要求情况下重新选择舵机电机。 三、数码舵机的反应速度为何比模拟舵机快 很多模友错误以为:“数码舵机的PWM驱动频率300Hz比模拟舵机的50Hz高6倍,则舵机电机转速快6倍,所以数码舵机的反应速度就比模拟舵机快6倍”。这里请大家注意占空比的概念,脉宽为每周期有效电平时间,占空比为脉宽/周期的百分比,所以大小与频率无关。占空比决定施加在电机上的电压,在负载转矩不变时,就决定电机转速,与PWM的频率无关。 模拟舵机是直流伺服电机控制器芯片一般只能接收50Hz频率(周期20ms)~300Hz左右的PWM外部控制信号,太高的频率就无法正常工作了。若PWM外部控制信号为50Hz,则直流伺服电机控制器芯片获得位置信息的分辨时间就是20ms,比较PWM控制信号正比的电压与反馈电位器电压得出差值,该差值经脉宽扩展(占空比改变,改变大小正比于差值)后

基于51单片机的舵机控制

基于51单片机的舵机控制 2010-05-23 19:48 基于单片机的舵机控制方法具有简单、精度高、成本低、体积小的特点,并可根据不同的舵机数量加以灵活应用 在机器人机电控制系统中,舵机控制效果是性能的重要影响因素舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口 舵机是一种位置伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统其工作原理是:控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出最后,电压差的正负输出到电机驱动芯片决定电机的正反转当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动舵机的控制信号是PWM信号,利用占空比的变化改变舵机的位置一般舵机的控制要求如图1所示 图1 舵机的控制要求 单片机实现舵机转角控制 可以使用FPGA、模拟电路、单片机来产生舵机的控制信号,但FPGA成本高且电路复杂对于脉宽调制信号的脉宽变换,常用的一种方法是采用调制信号获取有源滤波后的直流电压,但是需要50Hz(周期是20ms)的信号,这对运放器件的选择有较高要求,从电路体积和功耗考虑也不易采用5mV以上的控制电压的变化就会引起舵机的抖动,对于机载的测控系统而言,电源和其他器件的信号噪声都远大于5mV,所以滤波电路的精度难以达到舵机的控制精度要求 也可以用单片机作为舵机的控制单元,使PWM信号的脉冲宽度实现微秒级的变化,从而提高舵机的转角精度单片机完成控制算法,再将计算结果转化为PWM信号输出到舵机,由于单片机系统是一个数字系统,其控制信号的变化完全依靠硬件计数,所以受外界干扰较小,整个系统工作可靠

相关主题