舵机简介和C51例程
- 格式:doc
- 大小:39.50 KB
- 文档页数:6
舵机的控制方式和工作原理介绍舵机是一种常见的电动执行元件,广泛应用于机器人、遥控车辆、模型飞机等领域。
它通过电信号控制来改变输出轴的角度,实现精准的位置控制。
本文将介绍舵机的控制方式和工作原理。
一、舵机的结构和工作原理舵机的基本结构包括电机、减速装置、控制电路以及输出轴和舵盘。
电机驱动输出轴,减速装置减速并转动输出轴,而控制电路则根据输入信号来控制电机的转动或停止。
舵机的主要工作原理是通过PWM(脉宽调制)信号来控制。
PWM信号是一种周期性的方波信号,通过调整占空比即高电平的时间来控制舵机的位置。
通常情况下,舵机所需的控制信号频率为50Hz,即每秒50个周期,而高电平的脉宽则决定了输出轴的角度。
二、舵机的控制方式舵机的控制方式主要有模拟控制和数字控制两种。
1. 模拟控制模拟控制是指通过改变输入信号电压的大小,来控制舵机输出的角度。
传统的舵机多采用模拟控制方式。
在模拟控制中,通常将输入信号电压的范围设置在0V至5V之间,其中2.5V对应于舵机的中立位置(通常为90度)。
通过改变输入信号电压的大小,可以使舵机在90度以内左右摆动。
2. 数字控制数字控制是指通过数字信号(如脉宽调制信号)来控制舵机的位置。
数字控制方式多用于微控制器等数字系统中。
在数字控制中,舵机通过接收来自微控制器的PWM信号来转动到相应位置。
微控制器根据需要生成脉宽在0.5ms至2.5ms之间变化的PWM信号,通过改变脉宽的占空比,舵机可以在0度至180度的范围内进行精确的位置控制。
三、舵机的工作原理舵机的工作原理是利用直流电机的转动来驱动输出轴的运动。
当舵机接收到控制信号后,控制电路将信号转换为电机驱动所需的功率。
电机驱动输出轴旋转至对应的角度,实现精准的位置控制。
在舵机工作过程中,减速装置的作用非常重要。
减速装置可以将电机产生的高速旋转转换为较低速度的输出轴旋转,提供更大的扭矩输出。
这样可以保证舵机的运动平稳且具有较大的力量。
四、舵机的应用领域舵机以其精准的位置控制和力矩输出,广泛应用于各种领域。
利用单片机PWM信号进行舵机控制基于单片机的舵机控制方法具有简单、精度高、成本低、体积小的特点,并可根据不同的舵机数量加以灵活应用。
在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。
舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。
舵机是一种位置伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。
其工作原理是:控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。
它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。
最后,电压差的正负输出到电机驱动芯片决定电机的正反转。
当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。
图1 舵机的控制要求舵机的控制信号是PWM信号,利用占空比的变化改变舵机的位置。
一般舵机的控制要求如图1所示。
单片机实现舵机转角控制可以使用FPGA、模拟电路、单片机来产生舵机的控制信号,但FPGA成本高且电路复杂。
对于脉宽调制信号的脉宽变换,常用的一种方法是采用调制信号获取有源滤波后的直流电压,但是需要50Hz(周期是20ms)的信号,这对运放器件的选择有较高要求,从电路体积和功耗考虑也不易采用。
5mV以上的控制电压的变化就会引起舵机的抖动,对于机载的测控系统而言,电源和其他器件的信号噪声都远大于5mV,所以滤波电路的精度难以达到舵机的控制精度要求。
也可以用单片机作为舵机的控制单元,使PWM信号的脉冲宽度实现微秒级的变化,从而提高舵机的转角精度。
单片机完成控制算法,再将计算结果转化为PWM信号输出到舵机,由于单片机系统是一个数字系统,其控制信号的变化完全依靠硬件计数,所以受外界干扰较小,整个系统工作可靠。
单片机系统实现对舵机输出转角的控制,必须首先完成两个任务:首先是产生基本的PWM周期信号,本设计是产生20ms的周期信号;其次是脉宽的调整,即单片机模拟PWM 信号的输出,并且调整占空比。
舵机控制流程图常规舵机控制流程图1.5ms脉宽)带动电位器柄旋舵机电路方框图0.5—2.5msDC马达舵机说明1,电机经过变速(减速)后连接到电位器柄旋转2,输入脉冲宽度为0.5—2.5ms,周期为3ms—20ms(数字舵机的脉冲周期因不同的客户使用的周期不同,常用为10ms;模拟舵机周期为20ms.)3,脉冲宽度,表示电位器转动的角度不同(即舵臂角度不同) 4,电机转速为14000/分钟,减速比为250:1,要求舵角转速为0.10-0.2S/60度(此部份与电机转速有关,程序方面需注意及时扫描电位器角度而给电机改变不同供电方式),扫描不及时易出现舵臂回抖现象.5,脉冲宽度不变的情况下,能锁住电机.6,堵转4秒钟后,电机进入低压供电(或PWM少占空比)工作模式,堵转一旦去除,电机供电进入正常模式.程序其它要求(因客户要求不同,需做不同类型的舵机)1,马达供电PWM(周期或占空比可调)2,电位器角度识别精度可调(1023分,255分,511分..)3,舵转动角度可调(-90 +90度)参考电路图:VR15KR1220C4104123J1CON3VDDS11G12S23G24D25D26D17D18U1UD4606GS11G12S23G24D25D26D17D18U2UD4606GVDDVDDVSS1P3.0/SCL2SDA/P3.13VPP/P3.24ADC8/P005ADC9/P016ADC10/P027ADC11/P038ADC12/P049ADC13/P0510ADC14/P0611ADC0/P1012ADC1/P1113ADC2/P1214ADC3/P1315ADC4/P1416ADC5/P1517ADC6/P1618ADC7/P1719VDD20U3SC51P5708SN+C210uin3G1o u t2U4XC6206-33+C310USinSin3.3V3.3VR3220KR4220K A-+MG1MOTOR SERVO R21KC1104o u t1o u t2o u t3o u t4o u t1o u t2o u t3o u t4mo ter正转1111反转111111STOP STOPSTOP 电机正转电机反转不良舵机现象:1,堵转保护人为堵转电机时,约3秒后电机进入低电流(即低压,占空比少)供电方式,用以降低电机损耗而保护舵机.堵转一旦去除,电机需立即进入正常供电方式.不良现象:A,无保护功能B,堵转去除后电机不能马上进入正常状态2,马达抖动轻微外力作用舵臂时,因电位器角度有此而有细微变化(如:0.02度)下,马达转动以校正角度差.不良现象:A,马达校正时力度过大在,是出现抖动现象.(如角度差与电机供电时间或PWM没有建立关系;全压供电方式)堵转保护流程图无刷舵机控制流程图。
一、 基本原理介绍二、演示机构采用的是舵机,每个需要一路PWM 波和两路电源输入。
电源输入标准为5V 1-8A ,采用带输入和输出保护的50w 开关电源供电;PWM 波为50Hz ,正脉冲时间为0.5-2.5ms ,对应-90°至90°(实际使用中为了保护机械,为0.7-2.3ms ,舵机旋转范围为-70°至70°)。
由于系统对于输出的频率有5Hz 的限制,因此使用软件延迟来实现最多八路的的PWM 波输出。
PWM 波由MCU 通过软件延时产生,算法概述如下(流程图见附件):1. A 路输出2.5ms 脉冲(输出正脉冲,不足时间由低电平 补至2.5ms ),此时其他五路无输出,相当于输出2.5ms 低电平; 2. B 路输出2.5ms 脉冲(同A 路,不足时间由低电平补齐),此时包括A 路的其他五路无输出,相当于输出2.5ms 低电平;3. 同理,输出C,D,E,F 路4. 此时,1-3步总时间为2.5*6=15ms ,其中每路由一个小于2.5ms 的正脉冲和低电平时间组成。
由于输出周期为20ms ,故应再输出20ms-15ms=5ms 低电平时间,使得各路频率为50Hz 。
重复1-3步,得到输出波形如下图:(仅以4路为例,使用Proteus 仿真示波器,图2.2.2)可以看到,此时各路输出均为50Hz ,正脉冲时间为0.5-2.5ms图 2.2.1 舵机及其控制原理图2.2.2 Proteus仿真此算法在50Hz(20ms)频率的限制下,最多可输出8路PWM波形(8*2.5ms=20ms)三、实际程序程序如下:#include <stdio.h>#include <REG52.h>#define uchar unsigned char#define uint unsigned intsbit Out1=P2^0;sbit Out2=P2^1;sbit Out3=P2^2;sbit Out4=P2^3;sbit Out5=P2^4;void PWM(uint a, uint b,uint c, uint d,uint e) {uchar A,B,C,D,E;uint M=984;A=250-a;B=250-b;C=250-c;D=250-d;E=250-e;do { Out1 = 1; } while(a--);do { Out1 = 0; } while(A--);do { Out2 = 1; } while(b--);do { Out2 = 0; } while(B--);do { Out3 = 1; } while(c--);do { Out3 = 0; } while(C--);do { Out4 = 1; } while(d--);do { Out4 = 0; } while(D--);do { Out5 = 1; } while(e--);do { Out5 = 0; } while(E--);do{ }while(M--);}main()uchar a,b,c,d,e;uint m;a=170;b=149;c=d=e=149;SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1 TMOD = 0x20; //定时器工作方式2PCON = 0x80;//TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。
51单片机舵机控制程序题目:基于51单片机的舵机控制程序设计与实现第一章:引言1.1 研究背景51单片机是一种广泛应用于嵌入式系统中的微控制器,具有成本低、功耗低、可靠性高等优点。
而舵机是一种能够控制角度的电机装置,广泛应用于机器人、航模和自动化设备等领域。
本章旨在探讨基于51单片机的舵机控制程序设计与实现的意义和必要性。
1.2 研究目的本研究的主要目的在于设计并实现一套稳定、高效的舵机控制程序,为使用51单片机的嵌入式系统提供角度控制功能。
通过本研究,可以提高舵机控制的精度和稳定性,拓展舵机的应用领域。
第二章:51单片机舵机控制程序的设计2.1 硬件设计根据舵机的控制特点,我们需要通过PWM信号控制舵机转动的角度。
在硬件设计上,我们需要使用51单片机的定时器功能产生PWM信号,并通过IO口输出给舵机。
具体的设计方案包括选择合适的定时器、设置定时器的工作模式和频率等。
2.2 软件设计在软件设计上,我们需要通过编写51单片机的控制程序实现舵机的控制。
具体的设计流程包括:(1)初始化:设置定时器的工作模式和频率,配置IO口的输出模式。
(2)角度控制:根据舵机的角度范围和控制精度,将目标角度转换为占空比,并通过PWM信号控制舵机转动到目标角度。
(3)稳定性优化:通过对定时器周期和占空比的调整,优化舵机的稳定性,减小舵机的误差。
第三章:51单片机舵机控制程序的实现3.1 硬件搭建在实现阶段,我们需要根据硬件设计方案选购相应的硬件元件,并将其搭建成一个完整的舵机控制系统。
具体的搭建过程包括:(1)选购舵机和51单片机等硬件元件,并连接相关的信号线。
(2)按照硬件设计方案,搭建并调试舵机控制系统。
3.2 软件编写在软件实现阶段,我们需要使用51单片机的编程语言(如C语言或汇编语言)编写舵机控制程序,并通过编译和烧录等步骤将程序下载到51单片机中。
具体的编写过程包括:(1)按照软件设计方案,编写舵机控制程序的相关函数和逻辑。
舵机的文献综述最近几年国内机器人开始快速发展,很多高校、中小学在进行机器人技术教学。
小型的机器人、模块化的机器人、组件式机器人是教学机器人的首选。
在这些机器人产品中,舵机是最关键、使用最多的部件。
依据控制方式的特点,舵机应该称为微型伺服马达。
早期在模型上使用最多,主要用于控制模型的舵面,所以俗称舵机。
舵机接受一个简单的控制指令就可以自动转动到一个比较精确的角度,所以非常适合在关节型机器人产品上使用。
仿人型机器人就是舵机运用的最高境界。
一、舵机的结构舵机简单是集成了直流电机、电机控制器和减速器等,并封装在一个便于安装的外壳里的伺服单元。
能够利用简单的输入信号比较精确的控制转动角度的机电系统。
舵机内部有一个电位器(或其它角度传感器)用于检测输齿轮箱出轴转动角度,控制板根据电位器的信息能比较精确的控制和保持输出轴的角度。
这样的直流电机控制方式叫闭环控制,所以舵机更准确的说是伺服马达,英文 servo。
舵机的主体结构主要有几个部分:外壳、减速齿轮组、电机、电位器、控制电路。
简单的工作原理是:控制电路接收信号源的控制信号,并驱动电机转动;齿轮组将电机的速度成大倍数缩小,并将电机的输出扭矩放大相应倍数,然后输出;电位器和齿轮组的末级一起转动,测量舵机轴转动角度;电路板检测并根据电位器判断舵机转动角度,然后控制舵机转动到目标角度或保持在目标角度。
舵机的外壳一般是塑料的,特殊的舵机可能会有铝合金外壳。
金属外壳能够提供更好的散热,可以让舵机内的电机运行在更高功率下,以提供更高的扭矩输出。
金属外壳也可以提供更牢固的固定位置。
齿轮箱有塑料齿轮、混合齿轮、金属齿轮的差别。
塑料齿轮成本底,噪音小,但强度较低;金属齿轮强度高,但成本高,在装配精度一般的情况下会有很大的噪音。
#include 〈reg52。
h〉#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工作于方式1TH1 = (65535 - 500 ) / 256; //0。
25msTL1 = ( 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;TL1 = ( 65535 — 500 )% 256;TimeOutCounter ++;switch (LeftOrRight ){case 0 ://为0时,舵机归位,脉宽1。
舵机的工作原理以及控制在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。
舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。
舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。
目前在高档遥控玩具,如航模,包括飞机模型,潜艇模型;遥控机器人中已经使用得比较普遍。
舵机是一种俗称,其实是一种伺服马达。
其工作原理是:控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。
它内部有一个基准电路,产生周期为20m s,宽度为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度;请看下形象描述吧:这只是一种参考数值,具体的参数,请参见舵机的技术参数。
小型舵机的工作电压一般为4.8V或6V,转速也不是很快,一般为0.22/60度或0.18/60度,所以假如你更改角度控制脉冲的宽度太快时,舵机可能反应不过来。
如果需要更快速的反应,就需要更高的转速了。
要精确的控制舵机,其实没有那么容易,很多舵机的位置等级有1024个,那么,如果舵机的有效角度范围为180度的话,其控制的角度精度是可以达到180/1024度约0.18度了,从时间上看其实要求的脉宽控制精度为2000/1024us约2us。
51控制舵机程序章节一:引言(约200字)舵机是一种广泛应用于机器人、航空模型、无人机等控制系统中的关键部件。
其通过控制电流使舵盘旋转,从而实现控制机械臂、舵面等部件的运动。
51单片机作为一种常用的微控制器,具备处理速度快、成本低、易编程等优点,被广泛应用于舵机控制。
本文旨在介绍利用51单片机控制舵机的主要方法和步骤,并通过实验验证舵机控制效果。
章节二:51单片机舵机控制原理(约300字)51单片机通过PWM(脉冲宽度调制)技术来控制舵机。
PWM波形的占空比决定了舵机的位置。
当占空比为0%时,舵机处于最左转位置;当占空比为100%时,舵机处于最右转位置;当占空比为50%时,舵机处于中间位置。
通过改变占空比大小可以控制舵机的角度。
章节三:51单片机舵机控制程序设计(约300字)首先,需要通过51单片机的GPIO口与舵机连接,将舵机的控制线连接到51单片机的PWM输出口。
接下来,在主程序中初始化PWM相关参数,例如PWM的频率、占空比等。
然后,在主循环中,通过改变PWM占空比的值,实现对舵机位置的控制。
可以通过控制PWM值的增减来控制舵机的角度。
章节四:实验验证与结果分析(约200字)实验中,我们使用51单片机和舵机进行舵机控制实验。
通过改变PWM占空比大小,我们可以观察到舵机位置的变化。
实验结果显示,随着PWM占空比的增加,舵机的角度逐渐增加,反之亦然。
通过实验验证,说明了51单片机可以有效地控制舵机的运动。
综上所述,本文介绍了51单片机控制舵机的原理、程序设计步骤,并通过实验证明了其控制效果。
通过本文的研究,可以为舵机控制的相关研究提供参考和借鉴。
章节一:引言(约200字)舵机是一种广泛应用于机器人、航空模型、无人机等控制系统中的关键部件。
其通过控制电流使舵盘旋转,从而实现控制机械臂、舵面等部件的运动。
51单片机作为一种常用的微控制器,具备处理速度快、成本低、易编程等优点,被广泛应用于舵机控制。
如何用单片机控制舵机及程序详细舵机概述舵机最早出现在航模运动中。
在航空模型中,飞行机的飞行姿态是通过调节发动机和各个控制舵面来实现的。
举个简单的四通飞机来说,飞机上有以下几个地方需要控制:1.发动机进气量,来控制发动机的拉力(或推力);2.副翼舵面(安装在飞机机翼后缘),用来控制飞机的横滚运动;3.水平尾舵面,用来控制飞机的俯仰角;4.垂直尾舵面,用来控制飞机的偏航角;遥控器有四个通道,分别对应四个舵机,而舵机又通过连杆等传动元件带动舵面的转动,从而改变飞机的运动状态。
舵机因此得名:控制舵面的伺服电机。
不仅在航模飞机中,在其他的模型运动中都可以看到它的应用:船模上用来控制尾舵,车模中用来转向等等。
由此可见,凡是需要操作性动作时都可以用舵机来实现。
舵机工作原理一般来讲,舵机主要由以下几个部分组成,舵盘、减速齿轮组、位置反馈电位计5k、直流电机、控制电路板等。
工作原理:控制电路板接受来自信号线的控制信号(具体信号待会再讲),控制电机转动,电机带动一系列齿轮组,减速后传动至输出舵盘。
舵机的输出轴和位置反馈电位计是相连的,舵盘转动的同时,带动位置反馈电位计,电位计将输出一个电压信号到控制电路板,进行反馈,然后控制电路板根据所在位置决定电机的转动方向和速度,从而达到目标停止。
舵机的基本结构是这样,但实现起来有很多种。
例如电机就有有刷和无刷之分,齿轮有塑料和金属之分,输出轴有滑动和滚动之分,壳体有塑料和铝合金之分,速度有快速和慢速之分,体积有大中小三种之分等等,组合不同,价格也千差万别。
例如,其中小舵机一般称作微舵,同种材料的条件下是中型的一倍多,金属齿轮是塑料齿轮的一倍多。
需要根据需要选用不同类型。
舵机的PWM信号1.PWM信号的定义PWM信号为脉宽调制信号,其特点在于他的上升沿与下降沿之间的时间宽度。
具体的时间宽窄协议参考下列讲述。
我们目前使用的舵机主要依赖于模型行业的标准协议,随着机器人行业的渐渐独立,有些厂商已经推出全新的舵机协议,这些舵机只能应用于机器人行业,已经不能够应用于传统的模型上面了。
舵机的使用方法代码舵机是机器人、无人机等电子设备中常用的执行器,它能精确控制角度,实现设备的灵活转向。
本文将详细介绍如何编写舵机的使用方法代码,帮助您更好地控制舵机,实现各种功能。
一、舵机的基本原理舵机的工作原理是基于PWM(脉冲宽度调制)信号,通过改变信号的占空比来控制舵机的转动角度。
一般来说,舵机的控制信号周期为20ms,其中高电平的持续时间(即占空比)决定了舵机的转动角度。
二、硬件连接1.将舵机的棕色线(地线)连接到开发板的GND引脚;2.将舵机的红色线(电源线)连接到开发板的5V或3.3V引脚;3.将舵机的黄色线(信号线)连接到开发板的一个PWM输出引脚。
三、编写代码以下是一个简单的舵机控制代码示例,使用Arduino开发板进行控制。
```cpp#include <Servo.h>Servo myServo; // 创建Servo对象void setup() {myServo.attach(9); // 将舵机连接到开发板的PWM引脚9}void loop() {// 舵机转到90度位置myServo.write(90);delay(1000);// 舵机转到180度位置myServo.write(180);delay(1000);// 舵机转到0度位置myServo.write(0);delay(1000);}```四、代码解释1.引入Servo库:使用Arduino的Servo库可以方便地控制舵机。
2.创建Servo对象:创建一个Servo对象,用于控制舵机。
3.myServo.attach(9):将舵机连接到开发板的PWM引脚9。
4.myServo.write(角度):设置舵机转动到指定的角度。
五、注意事项1.在编写代码时,确保舵机的转动角度在0度到180度之间,超出这个范围可能导致舵机损坏。
2.如果需要控制多个舵机,可以为每个舵机创建一个Servo对象,并分别设置它们的PWM引脚。
舵机控制原理程序舵机控制原理程序第一章:引言舵机是一种用于控制机械装置位置和角度的装置,广泛应用于机器人、模型飞机、船舶等领域。
舵机的控制原理程序是通过向舵机发送特定的控制信号,使其转动到指定位置。
本论文将深入研究舵机控制的基本原理和编程方法。
第二章:舵机的工作原理舵机主要由电机、减速装置、位置反馈装置和控制电路组成。
电机通过齿轮传动将动力传递给舵盘或舵翼,位置反馈装置可以感知舵盘或舵翼的实际位置,将位置信息反馈给控制电路。
控制电路通过与位置要求进行比较,生成控制信号,控制舵盘或舵翼的位置和角度。
第三章:舵机控制的编程方法舵机控制的编程方法主要包括舵机PWM信号的生成和控制程序的编写。
PWM(脉冲宽度调制)信号是一种周期性的方波信号,通过改变方波的占空比来控制舵机的转动角度。
编程方法可分为硬件控制和软件控制两种。
硬件控制:通过外部电路将PWM信号传输给舵机,如使用单片机的IO口和计时器模块来生成PWM信号。
首先,将单片机的IO口配置为输出模式,然后设置计时器模块的工作方式和频率,最后根据要求计算占空比,并将占空比写入计时器的寄存器中,以生成PWM信号。
软件控制:通过软件方式生成PWM信号,即模拟PWM信号的工作原理。
在主程序中,设定一个周期性的计时器,然后在计时器中断中,根据要求计算舵机需要转动的角度,将舵机需要转动的位置信息转换为相应的占空比,并将占空比输出到舵机的控制引脚上,实现对舵机的控制。
第四章:实验与结果分析为了验证编程方法的正确性和稳定性,我们设计了一个舵机控制的实验。
首先,搭建好舵机控制电路,然后根据编程方法编写控制程序,通过生成PWM信号来控制舵机的转动角度。
实验结果表明,舵机能够按照设定的要求转动到指定的位置,控制精度较高。
综合以上所述,本论文主要研究了舵机控制的基本原理和编程方法,在硬件控制和软件控制两方面进行了详细的介绍和分析,并通过实验验证了编程方法的正确性和稳定性。
舵机控制的研究对于提高机械装置的控制精度和稳定性具有重要的意义。
目录一、舵机简介前言- 2 -舵机的构造......................................................................... - 2 -技术规格............................................................................. - 4 -选择舵机............................................................................. - 4 -油门........................................................................ - 5 -副翼及升降舵........................................................ - 5 -螺距........................................................................ - 5 -尾舵........................................................................ - 5 -爱惜您的舵机..................................................................... - 6 -二、舵机(百度百科)舵机概述............................................................................. - 7 -船用舵机类型..................................................................... - 8 -舵机的差别......................................................................... - 8 -遥控模型舵机..................................................................... - 8 -遥控模型舵机的构造......................................................... - 8 -遥控模型技术规格............................................................. - 9 -模型舵机故障的判断与修理........................................... - 10 -一、舵机简介前言舵机是遥控模型控制动作的动力来源,不同类型的遥控模型所需的舵机种类也随之不同。
1、概述舵机最早出现在航模运动中。
在航空模型中,飞行机的飞行姿态是通过调节发动机和各个控制舵面来实现的。
举个简单的四通飞机来说,飞机上有以下几个地方需要控制:1.发动机进气量,来控制发动机的拉力(或推力);2.副翼舵面(安装在飞机机翼后缘),用来控制飞机的横滚运动;3.水平尾舵面,用来控制飞机的俯仰角;4.垂直尾舵面,用来控制飞机的偏航角;遥控器有四个通道,分别对应四个舵机,而舵机又通过连杆等传动元件带动舵面的转动,从而改变飞机的运动状态。
舵机因此得名:控制舵面的伺服电机。
不仅在航模飞机中,在其他的模型运动中都可以看到它的应用:船模上用来控制尾舵,车模中用来转向等等。
由此可见,凡是需要操作性动作时都可以用舵机来实现。
2、结构和控制一般来讲,舵机主要由以下几个部分组成,舵盘、减速齿轮组、位置反馈电位计5k、直流电机、控制电路板等。
工作原理:控制电路板接受来自信号线的控制信号(具体信号待会再讲),控制电机转动,电机带动一系列齿轮组,减速后传动至输出舵盘。
舵机的输出轴和位置反馈电位计是相连的,舵盘转动的同时,带动位置反馈电位计,电位计将输出一个电压信号到控制电路板,进行反馈,然后控制电路板根据所在位置决定电机的转动方向和速度,从而达到目标停止。
舵机的基本结构是这样,但实现起来有很多种。
例如电机就有有刷和无刷之分,齿轮有塑料和金属之分,输出轴有滑动和滚动之分,壳体有塑料和铝合金之分,速度有快速和慢速之分,体积有大中小三种之分等等,组合不同,价格也千差万别。
例如,其中小舵机一般称作微舵,同种材料的条件下是中型的一倍多,金属齿轮是塑料齿轮的一倍多。
需要根据需要选用不同类型。
舵机的输入线共有三条,红色中间,是电源线,一边黑色的是地线,这辆根线给舵机提供最基本的能源保证,主要是电机的转动消耗。
#inclu de<re g52.h>#de fineuintunsig ned i nt#defin e uch ar un signe d cha ruin t i,t;lon g cou nter;//编码器脉冲数值u charfinis h=0;//停车标志//--------传感器变量------------s bit r i1=P0^0; //*左边传感器*//sbit ri2=P0^1;sbit ri3=P0^2;sbit mid=P0^3;//*中间传感器*//sbi t le3=P0^4;sbi t le2=P0^5;sbi t le1=P0^6;//*右边传感器*//sb it bz=P2^7;//蔽障管//-------电机舵机控制变量-----------sbit ENA=P1^0; //驱动电机pwm//sb it mo to1=P1^1;//电机控制//s bit m oto2=P1^2;sbit PWM=P1^4; //舵机pwm////---------转角变量---------uint angl e;ui nt ab solut e(int);//--------速度变量----------ui nt pr o; //驱动电机调速uin t car_driv er; //驱动力参数ui nt pu lse_s peed; //电机当前速度uintideal_spee d; //理想状态下的速度i nt sp eed_e rror; //理想速度与当前速度的差值intpre_e rror=0; //PID控制的速度差值intpre_d_erro r=0;//PID控制的速度上一次的差值int pk=0,erro r=0;//速度的PID值int s peedm ax;//----------表格值----------uintcodespeed_tabl e[]={50,40,40};uint code angl e_tab le[]={110,75,110};#defin e kp213#defin e ki7#de finekd 15//-----------函数定义-------void init();v oid d elay(uint);voi d qct yp();void duoj i();voidcarpo sitio n();voidspeed();v oid p id();//=============主函数==========voidmain(){init();while(1){q ctyp();carp ositi on();sp eed();}}//===========子函数============//-----------初始化-----------voi d ini t(){TMO D=0x11;//设定双定时器EA=1;//EX0=1;//开外部中断0// T CON=0x01;TR0=1;T R1=1;TH0=(65536-20000)/256;TL0=(65536-20000)%256;//设定定时初始值,可去下载个定时器计算软件,20m sTH1=(65536-1000)/256;TL1=(65536-1000)%256;E T0=1;ET1=1;ENA=1;pu lse_s peed=0;s peedm ax=0;}//---------延时函数----------v oid d elay(uintn){ucha r a,b,c;for(c=1;c>0;c--)f or(b=n;b>0;b--)f or(a=2;a>0;a--);}//-------光电管全无状态时(脱离轨道),读取前次状态---------voidqctyp(){ri1=P0^0;r i2=P0^1;ri3=P0^2;mid=P0^3;le3=P0^4;l e2=P0^5;le1=P0^6;}//-------循迹函数,读取光电管状态------------vo id ca rposi tion(){if(!le1&&!le2&&!le3&&mid&&!ri3&&!r i2&&!ri1){angle=0;}el se if(le3&&!mid&&!ri3&&!r i2&&!ri1){angle=1;}el se if(le2&&!mid&&!ri3&&!r i2&&!ri1){angle=1;}el se if(le1&&!mid&&!ri3&&!r i2&&!ri1){angle=1;}el se if(ri1&&!mid&&!le3&&!l e2&&!le1){angle=2;}el se if(ri2&&!mid&&!le3&&!l e2&&!le1){angle=2;}el se if(ri3&&!mid&&!le3&&!l e2&&!le1){angle=2;}}//-----------舵机控制-------------void duoj i() //舵机控制{P WM=1;del ay(an gle_t able[angle]); //可改变舵机转向角度PW M=0;}//-----------------计算车的速度-----------------voi d spe ed(){ /*if(speed max<=pulse_spee d) speed max=p ulse_speed;if(sp eedma x>=40) s peedm ax=40;pi d();pro=car_d river;//变量y是改变小车速度这里范围是0--39*/p ro=sp eed_t able[angle];m oto1=1;m oto2=0; }//------------PID控制----------------/*void pid(){signe d int d_e rror, dd_e rror; //e rror=speed_erro rid eal_s peed=speed_tabl e[ang le];erro r=ide al_sp eed-p ulse_speed;d_error=erro r-pre_erro r; //d_er ror 当前速度差与上一次速度差之差dd_er ror=d_erro r-pre_d_er ror;pre_error=erro r; //存储当前偏差pre_d_err or=d_error;pk+=kp*d_err or+ki*erro r+kd*dd_er ror;if(p k<=0)p k=0;else if(p k>=40) pk=40;car_drive r=pk;}//-----------中断---------------voi d ext er0() inte rrupt 0{coun ter++;}*/vo id ti mer0() int errup t 1//产生pwm信号控制舵机,周期20ms{TH0=(65536-20000)/256;//1011 0001 即TH O=(65536-20000)/256TL0=(65536-20000)%256; //1110 0000即TLO=(65536-20000)%256duoji();}void time r1()inter rupt3//产生pwm信号控制驱动电机速度{TH1=(65536-1000)/256;TL1=(65536-1000)%256;i++;i f(i<=pro){ ENA=1;}el se{EN A=0;}i f(i==50){E NA=~E NA;i=0;}/* t++;if(t==1000){t=0;pul se_sp eed=4*coun ter/500; //速度=编码器主动轮周长(M)*脉冲/分辨率coun ter=0;} */}。
单片机驱动舵机流程简易原理图下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!1. 电源供应:舵机通常需要一个稳定的电源供应,一般为 5V 或 6V。
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重量(Weight): 37.2 g工作速度(Operating speed):0.23 sec/60°(4.8V)0.19 sec/60°(6.0V)输出力矩(Output torque): 3.2 kg.cm (4.8V)4.1 kg.cm (6.0V)由此可见,舵机具有以下一些特点:>体积紧凑,便于安装;>输出力矩大,稳定性好;>控制简单,便于和数字系统接口;正是因为舵机有很多优点,所以,现在不仅仅应用在航模运动中,已经扩展到各种机电产品中来,在机器人控制中应用也越来越广泛。
3、用单片机来控制正是舵机的控制信号是一个脉宽调制信号,所以很方便和数字系统进行接口。
只要能产生标准的控制信号的数字设备都可以用来控制舵机,比方PLC、单片机等。
这里介绍利用51系列单片机产生舵机的控制信号来进行控制的方法,编程语言为C51。
之所以介绍这种方法只是因为笔者用2051实现过,本着负责的态度,所以敢在这里写出来。
程序用的是我的四足步行机器人,有删改。
单片机并不是控制舵机的最好的方法,希望在此能起到抛砖引玉的作用。
2051有两个16位的内部计数器,我们就用它来产生周期20 ms的脉冲信号,根据需要,改变输出脉宽。
基本思路如下(请对照下面的程序):我用的晶振频率为12M,2051一个时钟周期为12个晶振周期,正好是1/1000 ms,计数器每隔1/1000 ms计一次数。
以计数器1为例,先设定脉宽的初始值,程序中初始为1.5ms,在for循环中可以随时通过改变a值来改变,然后设定计数器计数初始值为a,并置输出p12为高位。
当计数结束时,触发计数器溢出中断函数,就是void timer0(void) interrupt 1 using1 ,在子函数中,改变输出p12为反相(此时跳为低位),在用20000(代表20ms周期)减去高位用的时间a,就是本周期中低位的时间,c=20000-a,并设定此时的计数器初值为c,直到定时器再次产生溢出中断,重复上一过程。
# include <reg51.h>#define uchar unsigned char#define uint unsigned intuint a,b,c,d;/*a为舵机1的脉冲宽度,b为舵机2的脉冲宽度,单位1/1000 ms *//*c、d为中间变量*//*以下定义输出管脚*/sbit p12=P1^2;sbit p13=p1^3;sbit p37=P3^7;/*以下两个函数为定时器中断函数*//*定时器1,控制舵机1,输出引脚为P12,可自定义*/void timer0(void) interrupt 1 using 1{p12=!p12; /*输出取反*/c=20000-c; /*20000代表20 ms,为一个周期的时间*/TH0=-(c/256); TL0=-(c%256); /*重新定义计数初值*/if(c>=500&&c<=2500)c=a;else c="20000-a"; /*判断脉宽是否在正常范围之内*/}/*定时器2,控制舵机2,输出引脚为P13,可自定义*/void timer1(void) interrupt 3 using 1{p13=!p13;d=20000-d;TH1=-(d/256); TL1=-(d%256);if(d>=500&&d<=2500)d=b;else d="20000-b";}/*主程序*/void main(void){TMOD=0x11; /*设初值*/p12=1;p13=1;a=1500;b=1500; /*数值1500即对应1.5ms,为舵机的中间90度的位置*/ c=a;d=b;TH0=-(a/256); TL0=-(a%256);TH1=-(b/256); TL1=-(b%256); /*设定定时器初始计数值*/EA=1;ET0=1; TR0=1;EX0=1;EX1=1;ET1=1; TR1=1;PX0=0;PX1=0;PT1=1;PT0=1;/*设定中断优先级*/for(;;){/*在这个for循环中,可以根据程序需要在任何时间改变a、b值来改变脉宽的输出时间,从而控制舵机*/}}因为在脉冲信号的输出是靠定时器的溢出中断函数来处理,时间很短,因此在精度要求不高的场合可以忽略。
因此如果忽略中断时间,从另一个角度来讲就是主程序和脉冲输出是并行的,因此,只需要在主程序中按你的要求改变a值,例如让a从500变化到2500,就可以让舵机从0度变化到180度。
另外要记住一点,舵机的转动需要时间的,因此,程序中a值的变化不能太快,不然舵机跟不上程序。
根据需要,选择合适的延时,用一个a递增循环,可以让舵机很流畅的转动,而不会产生像步进电机一样的脉动。
这些还需要实践中具体体会。
舵机的速度决定于你给它的信号脉宽的变化速度。
举个例子,t=0试,脉宽为0.5ms,t=1s时,脉宽为1.0ms,那么,舵机就会从0.5ms对应的位置转到1.0ms 对应的位置,那么转动速度如何呢?一般来讲,3003的最大转动速度在4.8V时为0.23s/60度,也就是说,如果你要求的速度比这个快的话,舵机就反应不过来了;如果要求速度比这个慢,可以将脉宽变化值线性到你要求的时间内,做一个循环,一点一点的增加脉宽值,就可以控制舵机的速度了。
当然,具体这一点一点到底是多少,就需要做试验了,不然的话,不合适的话,舵机就会向步进电机一样一跳一跳的转动了,尝试改变这“一点”,使你的舵机运动更平滑。
还有一点很重要,就是舵机在每一次脉宽值改变的时候总会有一个转速由零增加再减速为零的过程,这就是舵机会产生像步进电机一样运动的原因#include<reg51.h>unsigned char count; //0.5ms次数标识,可修改sbit pwm=P0^0; //PWM信号输出口sbit up=P3^2; //角度增加按键检测I/O口sbit down=P3^3; //角度减少按键检测I/O口unsigned char angle; //角度标识void delay(unsigned char z){unsigned char x,y;for(x=125;x>0;x--)for(y=z;y>0;y--);}void Time0_Init() //定时器初始化{TMOD=0x01; //定时器0工作在方式1IE=0x82;TH0=0xff;TL0=0xa3; //11.0592MHz晶振,0.5msTR0=1; //定时器开始}void Time0_Int() interrupt 1{TH0=0xff;TL0=0xa3;if(count<angle) //判断0.5ms次数是否小于角度标识pwm=1; //确实小于,pwm输出高电平elsepwm=0; //大于则输出低电平count=(count+1); //0.5ms次数加1count=count%40; //次数始终保持为40即保持周期为20ms }void keyscan() //按键扫描{if(up==0) //角度增加按键是否按下{delay(20); //按下延时,消抖if(up==0) //确实按下{angle++; //角度标识加1count=0; //按键按下则20ms周期从新开始if(angle==20)angle=19; //已经是180度,则保持// while(up==0); //等待按键放开}}if(down==0) //角度减少按键是否按下{delay(20);if(down==0){angle--; //角度标识减1count=0;if(angle==4)angle=5; //已经是0度,则保持// while(down==0);}}}void main(){angle=12;count=0;Time0_Init();while(1){keyscan(); //按键扫描} }。