机器人经验 舵机控制程序
- 格式:pdf
- 大小:670.24 KB
- 文档页数:5
舵机控制板程序一、引言舵机控制板是一种可用于控制机械臂、机器人、车辆等设备的电子模块。
它通过接收来自主控制器的指令,将指令转化为对舵机的控制信号,在实现设备的运动控制和精确定位方面起到关键的作用。
本论文将介绍舵机控制板的设计原理、硬件电路、软件程序设计以及实验验证。
二、设计原理舵机控制板的设计原理基于脉宽调制(PWM)的原理。
通过调节控制信号的脉宽,可以控制舵机的转角。
通常情况下,舵机的控制信号周期为20ms,其中脉宽的范围为0.5ms至2.5ms,对应于舵机的转角范围。
通过改变控制信号的脉宽,可以实现舵机的旋转和定位。
三、硬件电路设计舵机控制板的硬件电路主要由舵机驱动芯片、微控制器、电源管理电路和通信接口组成。
舵机驱动芯片负责将控制信号转化为舵机的驱动电流,从而控制舵机的转动。
微控制器负责接收来自主控制器的指令,并生成对应的舵机控制信号。
电源管理电路负责为舵机提供稳定的电源电压。
通信接口可以是UART、SPI或I2C,用于与主控制器进行数据交互。
四、软件程序设计舵机控制板的软件程序主要包括舵机驱动程序和舵机控制算法。
舵机驱动程序负责生成控制信号,并将其通过舵机驱动芯片发送给舵机。
舵机控制算法可以根据具体应用需求进行设计,常见的算法包括位置控制、速度控制和力控制等。
在控制算法中,通常会使用PID控制器进行反馈控制,以实现舵机的精确定位和运动控制。
五、实验验证为了验证舵机控制板的性能,我们设计了一组实验。
首先,我们使用主控制器发送控制指令给舵机控制板,观察舵机是否能正确响应并转动到预定的位置。
然后,我们对舵机进行速度控制和力控制实验,通过改变控制参数,观察舵机运动的速度和受力情况。
最后,我们将舵机控制板与机械臂进行联合控制实验,验证其在复杂工作环境下的性能。
六、结论本论文介绍了舵机控制板的设计原理、硬件电路、软件程序设计以及实验验证。
通过对舵机控制板的开发,我们可以实现对机械臂、机器人、车辆等设备的运动控制和精确定位。
常规舵机控制流程图1.5ms脉宽)舵机电路方框图0.5—2.5ms舵机说明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度)参考电路图:34Nu mb erRev isio 7-Ju n -2012Sh eet ofE:\TCH WORK\PCB 板\舵机.DDBDrawn By :o u t1o u t2o u t3o u t4mo ter正转1010101反转10101111STOP STOP 0000STOP舵机角度及脉冲宽度关系:不良舵机现象:1,堵转保护人为堵转电机时,约3秒后电机进入低电流(即低压,占空比少)供电方式,用以降低电机损耗而保护舵机.堵转一旦去除,电机需立即进入正常供电方式.不良现象:A,无保护功能B,堵转去除后电机不能马上进入正常状态2,马达抖动轻微外力作用舵臂时,因电位器角度有此而有细微变化(如:0.02度)下,马达转动以校正角度差.不良现象:A,马达校正时力度过大在,是出现抖动现象.(如角度差与电机供电时间或PWM没有建立关系;全压供电方式)堵转保护流程图无刷舵机控制流程图。
#include <reg52.h> //宏定义头文件#include<math.h>#define uchar unsigned char //数据类型的宏定义#define uint unsigned int //数据类型的宏定义//sbit K1 = P3^2; //定义独立按键K1//sbit K2 = P3^3; //定义独立按键K2//sbit K3 = P3^4; //定义独立按键K3//sbit K4 = P3^5; //定义独立按键K4//sbit K5 = P1^4; //定义独立按键K5//sbit K6 = P1^5; //定义独立按键K6//sbit K7 = P1^6; //定义独立按键K7//sbit K8 = P1^7; //定义独立按键K8//sbit BEEP = P3^6; //蜂鸣器控制端口P36sbitdj = P1 ^ 0;sbit K = P1^4; //(K5)char code reserve[3]_at_ 0x3b; //保留0x3b开始的3个字节//#include<reg51.h>void delay(unsigned int t)//50ms{unsigned char j;for(;t>0;t--)for(j=19;j>0;j--);}void delay1(unsigned int t)//50ms{unsigned char j;for(;t>0;t--) ;// for(j=19;j>0;j--);}void Degree0_90()//0{unsigned char i,k,step;step=0;for(k=0;k<100; k++){for(i=0;i<6;i++){dj=1;delay1(40+k);//0.5msdj=0;delay1(3900-k);//19.5ms}// step++;// step+=5;}}void Degree0()//0度{unsigned char i,k;for(i=0;i<30;i++){dj=1;delay(10);//0.5msdj=0;delay(390);//19.5ms}}void Degree45()//45度{unsigned char i;for(i=0;i<50;i++){dj=1;delay(20);//1msdj=0;delay(380);//19ms}}void Degree90()//90度{unsigned char i;for(i=0;i<200;i++){dj=1;delay(30);//1.5msdj=0;delay(370);//18.5ms}}void Degree135()//135度{unsigned char i;for(i=0;i<200;i++){dj=1;delay(40);//2msdj=0;delay(360);//18ms}}void Degree180()//180度{unsigned char i;for(i=0;i<50;i++){dj=1;delay(50);//2.5msdj=0;delay(350);//17.5ms}}voidmain(void){unsigned char ID;while(1){Degree0();Degree0_90();Degree0();}}。
在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。
舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。
舵机是一种位置伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。
其工作原理是:控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。
它内部有一个基准电路,产生周期为20ms,宽度为1.5ms 的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。
最后,电压差的正负输出到电机驱动芯片决定电机的正反转.当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动.舵机的控制信号是PWM信号,利用占空比的变化改变舵机的位置。
一般舵机的控制要求如图1所示。
图1 舵机的控制要求单片机实现舵机转角控制可以使用FPGA、模拟电路、单片机来产生舵机的控制信号,但FPGA成本高且电路复杂。
对于脉宽调制信号的脉宽变换,常用的一种方法是采用调制信号获取有源滤波后的直流电压,但是需要50Hz(周期是20ms)的信号,这对运放器件的选择有较高要求,从电路体积和功耗考以上的控制电压的变化虑也不易采用.5mV就会引起舵机的抖动,对于机载的测控系统而言,电源和其他器件的信号噪声都远大于5mV,所以滤波电路的精度难以达到舵机的控制精度要求。
也可以用单片机作为舵机的控制单元,使PWM信号的脉冲宽度实现微秒级的变化,从而提高舵机的转角精度。
单片机完成控制算法,再将计算结果转化为 PWM信号输出到舵机,由于单片机系统是一个数字系统,其控制信号的变化完全依靠硬件计数,所以受外界干扰较小,整个系统工作可靠。
单片机系统实现对舵机输出转角的控制,必须首先完成两个任务:首先是产生基本的PWM 周期信号,本设计是产生20ms的周期信号;其次是脉宽的调整,即单片机模拟PWM信号的输出,并且调整占空比。
当系统中只需要实现一个舵机的控制,采用的控制方式是改变单片机的一个定时器中断的初值,将20ms分为两次中断执行,一次短定时中断和一次长定时中断.这样既节省了硬件电路,也减少了软件开销,控制系统工作效率和控制精度都很高。
//*************************************************************** **********//* *//* *************************舵机控制************************ * //* *//*************************************************************** **********#include "main.h"UINT8 Far_Line;UINT8 Near_Line;UINT8 Far_Value;UINT8 Near_Value;UINT16 OUT;UINT8 Angle_Far;UINT8 Angle_Start;//*************************************************************** **********//* *//* **********************图像滤波处理函数********************* * //* 函数:void ImageFilterII(UINT8 f_line)//* 函数功能:至多连续4行0可以做处理*//* 输入参数:无//*************************************************************** **********UINT8 IsStraight(UINT8 start_ln,UINT8 end_ln){UINT8 i;UINT8 flg = 0;for(i=start_ln;i<end_ln;i++){if(((GuideLine[i] - GuideLine[i+1] > 7)||(GuideLine[i] - GuideLine[i+1] < (-7)))||(GuideLine[i] == 0)){flg = 1;break;}}if(flg == 0) //是否为直线判定{return 1;}else{return 0;}}//*************************************************************** **********//* *//* **********************图像滤波处理函数********************* * //* 函数:void ImageFilterII(UINT8 f_line)//* 函数功能:至多连续4行0可以做处理*//* 输入参数:无//*************************************************************** **********void ImageFilterII(UINT8 f_line){UINT8 i,j;INT8 div;UINT8 start_ln,end_ln;j=0;Angle_Far = 22;for(i=1;i<f_line;i++){if((GuideLine[i]==0)&&(GuideLine[i-1]!=0)){j=i; //由有数据到无数据}if((GuideLine[i]==0)&&(GuideLine[i+1]!=0)) //由无数据到有数据{if((i-j < 4) //一般的滤波,最多滤除4行&&(GuideLine[j-1] - GuideLine[i+1] < 16)&&(GuideLine[j-1] - GuideLine[i+1] > (-16))){for(;j<i+1;j++){GuideLine[j]=(GuideLine[j-1]>>1)+(GuideLine[i+1]>>1);}}else if(i-j < 12) // 出现黑三角的判定{Angle_Far = j;// far_ln = 8 则要到18行才出现黑线// far_ln = 10 则要到19行才出现黑线// far_ln = 13 则要到21行才出现黑线// far_ln = 15 则要到23行才出现黑线// far_ln = 19 则要到25行才出现黑线start_ln = i + 1;if(f_line - i >= 4){end_ln = i + 4;}else{break;}if((IsStraight(start_ln,end_ln))&&(j > 7)){Angle_Start = 1; //出现了黑三角for(;j<=i;j++){GuideLine[j] = (GuideLine[j-1]>>1)+(GuideLine[i+1]>>1);}}else{for(;j<f_line;j++){GuideLine[j+1] = 0;}break; //跳出整个程序}}else{for(;j<f_line;j++){GuideLine[j+1] = 0;}break; //跳出整个程序}}}UINT8 TEST_CTL_FLG;UINT8 Last_far_ln;UINT8 p1=0;UINT8 p2=0;UINT8 p3=0;UINT8 p4=0;UINT8 d1=0;UINT8 d2=0;UINT8 d3=0;UINT8 d4=0;UINT8 Lv1=0;UINT8 Lv2=0;UINT8 Lv3=0;UINT8 Lv4=0;UINT8 sL=0;UINT8 rL=0;//*************************************************************** **********//* *//* **********************图像滤波处理函数********************* * //* 函数:void ImageFilterII(UINT8 f_line)//* 函数功能:至多连续4行0可以做处理*//* 输入参数:无//*************************************************************** **********void PID_NEW(UINT8 near_ln,UINT8 far_ln,UINT8 filter_line){struct _Car *temp1;UINT8 i;UINT8 p,d;temp1 = &Car;ImageFilterII(filter_line);while(GuideLine[far_ln]==0) //处理行没有提取黑线{far_ln--;if(far_ln==0)break;}TEST_CTL_FLG = 0;Far_Line = far_ln;Far_Value = GuideLine[far_ln];Near_Value = GuideLine[near_ln];//黑三角检测和控制if(Angle_Start == 1) //进入三角{TEST_CTL_FLG = 1;if((Angle_Far >= 22)&&(far_ln >= 22)){Angle_Start = 0;}if(far_ln < 20){goto loop;}}temp1->CtrlPar.Lst_Erro = GuideLine[near_ln] - VIDEO_CENTER; //近线偏差temp1->CtrlPar.Erro = GuideLine[far_ln] - VIDEO_CENTER; //远线偏差temp1->CtrlPar.Dif_Erro = temp1->CtrlPar.Erro - temp1->CtrlPar.Lst_Erro; //远线偏差减近线偏差if(far_ln>Lv1){TEST_CTL_FLG = 2;temp1->CtrlPar.Dty_Erro = ((p1*(temp1->CtrlPar.Erro))>>4)+ ((d1*(temp1->CtrlPar.Dif_Erro))>>4); }else if(far_ln>Lv2) //弯道上的转角{//分段控制,增大弯道转角????TEST_CTL_FLG = 3;//远线偏差加远线偏差减近线偏差(弯道时起加大偏转作用)p=p2;d=d2;if(far_ln>Lv3){TEST_CTL_FLG = 4;p=p3; //大S弯交接入口d=d3;}if(far_ln>Lv4){ TEST_CTL_FLG = 5; //大S弯交接处p=p4;d=d4;}temp1->CtrlPar.Dty_Erro = ((p*(temp1->CtrlPar.Erro))>>4)+ ((d*(temp1->CtrlPar.Dif_Erro))>>4);}temp1->CtrlPar.Dty_Out =STEER_DTY_CENTER + temp1->CtrlPar.Dty_Erro;if(Straight_Cnt>12) //直道刚进入弯道;值越大,越提前入弯{if(far_ln<sL) //判断是否最远行太近{TEST_CTL_FLG = 6;if(temp1->CtrlPar.Dty_Out > STEER_DTY_CENTER){temp1->CtrlPar.Dty_Out = STEER_DTY_MAX ;}else if(temp1->CtrlPar.Dty_Out < STEER_DTY_CENTER){temp1->CtrlPar.Dty_Out = STEER_DTY_MIN ;}}}else if(Straight_Cnt<=12) //已经在弯道{if(far_ln <= rL){TEST_CTL_FLG = 7;if(temp1->CtrlPar.Dty_Out > STEER_DTY_CENTER) //如果太近判断之前舵机转向直接偏到最大{temp1->CtrlPar.Dty_Out = STEER_DTY_MAX;}else if(temp1->CtrlPar.Dty_Out < STEER_DTY_CENTER){temp1->CtrlPar.Dty_Out = STEER_DTY_MIN;}}}loop:if(temp1->CtrlPar.Dty_Out > STEER_DTY_MAX){temp1->CtrlPar.Dty_Out = STEER_DTY_MAX;}else if(temp1->CtrlPar.Dty_Out < STEER_DTY_MIN){temp1->CtrlPar.Dty_Out = STEER_DTY_MIN;}SetDirection(temp1->CtrlPar.Dty_Out);OUT = temp1->CtrlPar.Dty_Out;}//*************************************************************** **********//* *//* **********************S道处理函数********************* *//* 函数:void PID_S()//* 函数功能:S道处理*//* 输入参数:无//*************************************************************** **********UINT8 S_C=30;UINT8 S_C1=0;UINT8 S_P=12;UINT8 S_D=0;void PID_S(){struct _Car *temp1;temp1 = &Car;if(S_C1==1) S_C=StartNum;//方案选择temp1->CtrlPar.Lst_Erro = GuideLine[0] - VIDEO_CENTER; //近线偏差temp1->CtrlPar.Erro = VIDEO_CENTER-GuideLine[S_C]; //远线偏差temp1->CtrlPar.Dif_Erro = temp1->CtrlPar.Erro - temp1->CtrlPar.Lst_Erro; //远线偏差减近线偏差temp1->CtrlPar.Dty_Erro = ((S_P*(temp1->CtrlPar.Erro))>>4) +((S_D*(temp1->CtrlPar.Dif_Erro))>>4);temp1->CtrlPar.Dty_Out = STEER_DTY_CENTER +temp1->CtrlPar.Dty_Erro;if(Straight_Cnt>12){if(StartNum<20) //判断是否最远行太近{TEST_CTL_FLG = 8;if(temp1->CtrlPar.Dty_Out > STEER_DTY_CENTER){temp1->CtrlPar.Dty_Out = STEER_DTY_MAX ;}else if(temp1->CtrlPar.Dty_Out < STEER_DTY_CENTER){temp1->CtrlPar.Dty_Out = STEER_DTY_MIN ;}}}if(temp1->CtrlPar.Dty_Out > STEER_DTY_MAX) {temp1->CtrlPar.Dty_Out = STEER_DTY_MAX;}else if(temp1->CtrlPar.Dty_Out < STEER_DTY_MIN) {temp1->CtrlPar.Dty_Out = STEER_DTY_MIN;}SetDirection(temp1->CtrlPar.Dty_Out);}。
stm32舵机控制程序章节一:引言引言部分首先介绍了舵机控制在工业和机器人领域的应用,以及其在实际生活中的普遍应用。
接着介绍了目前市场上使用最广泛的舵机控制器——STM32,以及对其进行控制的优势和挑战。
最后对本论文的研究目的和结构进行了概述。
章节二:背景知识与理论基础本章节主要介绍了舵机的基本原理和工作方式。
首先介绍了舵机的定义和分类,包括模拟舵机和数字舵机。
然后详细讲解了舵机的内部结构,包括电机、减速器、编码器等组成部分。
接着介绍了舵机控制的基本原理,包括PWM信号的生成和控制以及位置反馈的原理。
最后讲解了STM32的基本硬件结构和特点,为后续章节的程序设计做准备。
章节三:STM32舵机控制程序设计本章节详细介绍了STM32舵机控制程序的设计过程。
首先介绍了程序设计前的准备工作,包括硬件连接和配置,以及软件开发环境的搭建。
然后详细介绍了程序的主要模块,包括PWM输出模块、位置反馈模块和控制算法模块。
其中,PWM 输出模块负责生成合适的PWM信号以控制舵机的转向和角度;位置反馈模块负责读取舵机位置信息,以实现闭环控制;控制算法模块负责根据预设的目标角度和当前位置信息进行控制计算。
最后介绍了程序的测试和调试方法,并给出了一些实验结果。
章节四:实验结果和讨论本章节主要介绍了实验结果和对实验结果的讨论。
首先给出了实验中所使用的舵机的基本参数和实验条件。
然后给出了实验结果的定量数据和图表,并对实验结果进行了详细的分析和解读。
最后总结了本论文研究的主要成果和不足之处,并对未来可能的研究方向进行了展望。
总结:本论文通过对STM32舵机控制程序的设计和实验研究,初步实现了对舵机的准确控制。
实验结果表明,所设计的控制程序能够有效地控制舵机的转向和角度,并具有较好的控制精度和稳定性。
然而,由于实验条件的限制,本论文的研究结果还存在一定的局限性,需要进一步完善和扩展。
未来的研究可以考虑使用更高精度和更稳定的舵机进行控制,进一步提高控制精度和稳定性;同时还可以考虑将该控制程序应用于机器人等领域,以实现更丰富的运动控制功能。
舵机工作流程舵机是一种广泛应用于机器人、无人机、遥控车等设备的伺服控制系统中的重要组成部分。
它的主要作用是根据接收到的指令,驱动电机转动,并实时反馈位置信息,以便对电机进行精确控制。
以下是舵机的工作流程:1. 接收指令舵机首先接收来自控制系统的指令,这些指令通常包括需要转动的角度、速度以及运动轨迹等参数。
指令可以通过数字信号或者模拟信号的形式传输给舵机。
2. 解析指令一旦接收到指令,舵机内部的微处理器会对指令进行解析,将其转化为适合电机运动的控制信号。
这个过程中,舵机会根据指令中的参数设置内部的计数器、比较器等元件,以便对电机进行精确控制。
3. 驱动电机在解析完指令后,微处理器会通过驱动电路驱动电机转动。
电机的转动速度和角度取决于控制信号的强度和频率。
在驱动电机的过程中,舵机会实时监测电机的状态,以便对电机进行精确控制。
4. 位置反馈为了实现精确控制,舵机需要实时获取电机的位置信息。
这可以通过在电机轴上安装编码器或者霍尔传感器来实现。
编码器或霍尔传感器会根据电机的转动角度发出相应的信号,这些信号被微处理器接收并解码后,就可以得到电机的实时位置信息。
5. 调整控制在获得电机的实时位置信息后,微处理器会将这些信息与指令中的目标位置进行比较,根据比较结果调整控制信号的强度和频率,以便使电机向目标位置靠近。
这个过程会不断循环进行,直到电机达到目标位置或者接收到新的指令为止。
6. 故障处理在舵机工作的过程中,可能会遇到各种故障,如电机过热、电源故障、位置偏差等。
为了保障系统的稳定性和安全性,舵机内部通常会设有故障检测和处理的机制。
一旦检测到故障,微处理器会立即切断电机驱动电路,停止电机转动,并发出相应的故障信号,以便工作人员及时发现和处理故障。
舵机控制流程图常规舵机控制流程图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没有建立关系;全压供电方式)堵转保护流程图无刷舵机控制流程图。
实训项目二舵机的调试与控制一、实验目的1. 学习舵机控制原理2. 学习R/C舵机控制原理3. 学习CSD55XX舵机控制原理4. 学习舵机调试系统的使用5. 学习使用NorthStar编程控制舵机的运动二、实验要求(一)舵机的调试1. 通过舵机调试系统对单个舵机及多个串联舵机的ID进行设置。
2. 检验电机模式工作是否正常。
3. 检验舵机模式工作是否正常。
4. 将舵机转轴调整到中位。
5. 了解舵机的其他信息。
(二)舵机的控制1. 使用6个舵机,编号1~6。
2. 控制1号舵机快速正转3秒,然后慢速反转3秒后停止。
3. 同时控制1号2号舵机快速正转和3号4号舵机快速反转5秒,停止1秒后,1号2号舵机慢速反转和3号4号舵机慢速正转5秒,如此反复进行。
4. 同时控制1~4号舵机快速正转5秒,然后5号和6号舵机分别正向和反向转动90度,3秒钟后回复中位,1~4号舵机再慢速反转10秒,停止。
三、实验设备1. CSD55XX舵机,6个2. 多功能调试器,1个3. MultiFLEX 2-AVR控制器,1块4. 电源线、USB数据线,1套5. 舵机线,6根四、实验原理(一)CSD55XX舵机1. 引脚定义proMOTIOCDS 系列机器人舵机电气接口如下图,两组引脚定义一致的接线端子可将舵机逐个串联起来。
2. 舵机通讯方式CDS55xx采用异步串行总线通讯方式,理论多至254个机器人舵机可以通过总线组成链型,通过UART异步串行接口统一控制。
每个舵机可以设定不同的节点地址,多个舵机可以统一运动也可以单个独立控制。
CDS55xx的通讯指令集开放,通过异步串行接口与用户的上位机(控制器或PC机)通讯,您可对其进行参数设置、功能控制。
通过异步串行接口发送指令,CDS55xx可以设置为电机控制模式或位置控制模式。
在电机控制模式下,CDS55xx可以作为直流减速电机使用,速度可调;在位置控制模式下,CDS55xx拥有0-300°的转动范围,在此范围内具备精确位置控制性能,速度可调。
舵机工作原理与控制方法舵机是一种常见的机电一体化设备,用于控制终端设备的角度或位置,广泛应用于遥控模型、机器人、自动化设备等领域。
下面将详细介绍舵机的工作原理和控制方法。
一、舵机工作原理:舵机的工作原理可以简单归纳为:接收控制信号-》信号解码-》电机驱动-》位置反馈。
1.接收控制信号舵机通过接收外部的控制信号来控制位置或角度。
常用的控制信号有脉宽调制(PWM)信号,其脉宽范围一般为1-2毫秒,周期为20毫秒。
脉宽与控制的位置或角度呈线性关系。
2.信号解码接收到控制信号后,舵机内部的电路会对信号进行解析和处理。
主要包括解码脉宽、信号滤波和信号放大等步骤。
解码脉宽:舵机会将输入信号的脉宽转换为对应的位置或角度。
信号滤波:舵机通过滤波电路来消除控制信号中的噪声,使得控制稳定。
信号放大:舵机将解码后的信号放大,以提供足够的电流和功率来驱动舵机转动。
3.电机驱动舵机的核心部件是电机。
接收到解码后的信号后,舵机会驱动电机转动。
电机通常是直流电机或无刷电机,通过供电电压和电流的变化控制转动速度和力矩。
4.位置反馈舵机内部通常搭载一个位置传感器,称为反馈装置。
该传感器能够感知电机的转动角度或位置,并反馈给控制电路。
控制电路通过与目标位置或角度进行比较,调整电机的驱动信号,使得电机逐渐趋近于目标位置。
二、舵机的控制方法:舵机的控制方法有脉宽控制方法和位置控制方法两种。
1.脉宽控制方法脉宽控制方法是根据控制信号的脉宽来控制舵机的位置或角度。
控制信号的脉宽和位置或角度之间存在一定的线性关系。
一般来说,舵机收到脉宽为1毫秒的信号时会转动到最左位置,收到脉宽为2毫秒的信号时会转动到最右位置,而脉宽为1.5毫秒的信号舵机则会停止转动。
2.位置控制方法位置控制方法是根据控制信号的数值来控制舵机的位置或角度。
与脉宽控制方法不同,位置控制方法需要对控制信号进行数字信号处理。
数值范围一般为0-1023或0-4095,对应着舵机的最左和最右位置。
机器人交流群:187095505
从学习单片机,制作双足机器人到现在半年多了。
机械部分入门比较简单,只要耐心,细心完全可以搞定。
控制部分一开始自己做不了,买了32路舵机板。
后来参加了一个大赛,当时自己用32位的LPC1114编写了一个,但编写动作很不方便。
一直想把它完善,但总是有事,最近,上周刚考完试,终于要时间搞一搞了。
现在,这个机器人终于完全都是自己的东西了。
下面和大家分享一下一些经验
分控制部分和上位机
材料购买
1.舵机。
做机器人最重要的就是舵机了,它是机器人的主要部分,也是最耗资的东西。
本人对舵机也没做过深入的研究,不敢给大家推荐。
说一下我用过的几款吧。
1.MG995.扭矩13KG.M这款舵机是市场上最常用的,价位在40~60之间吧。
我买的第一批价格
是35元/个,但性能不怎么样,是山寨的,后来买过45一个的也不是原厂的,店主说是副厂的,
比第一批要好很多。
其实这款舵机山寨的比较多。
2.春天SR403。
现在用的就是这个,淘宝价80,和别人团购的61一个。
这款性能不错,没有出
现抖动,也没有虚位,(用一段时间后就有了,正常)。
2.电源。
很多新手一开始会碰到一些莫名其妙的问题,这里面有不少是因为电源问题,因为很多人一开始都用普通干电池或者手机电池供电。
那是绝对不行的。
舵机电流是很大的,一个0.6A左右吧,启动电流则更大,这样普通电源根本不行。
最好是用动力锂电池。
选择的时候有个计算电流的方法:放电电流=容量*放电倍率。
电池中有个参数叫放电倍率,“15C”、“20C”等,这个C就是,比如某电池容量是1800mah,标有20C,则他允许的工作电流为1.8*30=36A。
用锂电池有一个电压问题,舵机一般额定电压是6V,而锂电池是7.2A,充满电能达到8.4A。
这个问题不好解决,稳压芯片我知道的最大的也就3A,远远不够,到目前我也没有好的办法,我是串联两个大功率二极管来降压的。
3.铝板,螺丝,等可以到当地五金店购买,如果没有,这些东西都可以在淘宝买。
1.
机械部分:
首先是设计图纸。
三维设计很重要,第一个机器人完全是凭想象加工的,中间出现了很多差错,各个部分装备不上,尤其是螺孔的位置,经常对不上。
所以,最好先用三维软件设计,然后再去加工。
三维图纸要考虑到舵机与钣金零件之间的连接,钣金各部分之间的连接,电池,控制电路板的安放位置及固定方法,还有开关的位置及固定。
上一些三维图片
2.加工
加工常用的工具有钢锯,钻,钢锉,钳子,台钳,尺子,钢钉等。
机械加工的步骤
1.将三维图生成二位图纸,然后按照铝材尺寸排版,标注好切割线和圆孔中心位置。
注意留出切割和折弯余量。
按照1:1打印出来(一般的打印并不是1:1的,可以去专门CAD出图的店里出图)
2.将1:1的图纸用胶水粘贴到铝板上,注意贴平,贴牢固,同时不要起皱。
铝板
用纯铝板比较好加工,还便宜。
3.按照切割线将铝板裁开。
最简单易的的工具是钢锯。
4.打磨。
将余量用钢锉等抹去,不平整的地方磨平。
5.预钻定位孔。
直接用钻钻孔容易钻偏。
可以用钢钉等在标注的圆孔中心位置上砸
一个小坑,这样在用钻孔时就比较准确了。
孔径较大时要先用小径钻头钻,在用大的扩。
6.折弯。
台钳是必不可少的。
台钳,锤子,钳子相互配合就可完成。
加工过程中容
易使表面变得不平整,留下划痕,影响美观。
铝板表面的图纸这时可以起一定的保护作用,不过作用有限,最好在台钳夹紧铝板时在铝板表面放上薄但结实的硬纸片,用锤子砸时,也要垫上。
折弯完成后要修正。
7.除去表面的图纸。
各种方法。
8.装配。
装配时螺栓最好要加垫片,不然机器人活动久了,很容易松动,松动后影
响机器人运动稳定性,还会影响舵机的位置精度。
下面上一些装配图
控制部分
首先看一下舵机的控制原理
舵机为PWM控制,PWM周期为20ms,高电平时间为0.5ms~2.5ms。
0.5时对应0度,2.5时对应180度。
我做的机器人为18个自由度,主控板也留了18个舵机接口,可以输出18路pwm.
主控芯片用的是入门级的arm。
32位的LPC1114.
近期程序中加上了与上位机通信的部分,可以在PC端实时调整每一个舵机的当前角度,将其保存。
利用查补的方法控制舵机的转速。
这样空过编辑每一个舵机在特定时间转过的角度及其转动速度来编辑机器人的动作。
舵机与电脑之间是通过蓝牙通信的,代替串口线,这样比较方便。
/item.htm?id=14216644136。