整理的AX-12资料控制原理程序:时间仓促。弄的不是很整齐,有什么问题,请直接联系我!~~概述:Dynamixel系列机器人驱动器是一个很流行模块化的驱动器,其由齿轮减速器、精密直流电机和具有串联功能的电路板分别单一封装组成。尽管它体积小巧紧凑,但它可以产生很大扭矩,加上高品质材料制造并具有一定的强度,可以抵御一定外部冲击。它具有检测内部温度功能,例如改变内部温度和供电电压。AX-12+数字伺服电机不像一般的R/C微伺服电机(舵机)使用PWM(脉冲宽度调制)控制,其需要使用CM-5DynamixelAX12+伺服电机专用控制器控制。当用做关节电机时,可以旋转0~300°;当用作轮子驱动时,可以选择360°连续旋转模式。更重要的是AX-12+提供了高达16kg·cm的扭矩,是一般数字舵机的2倍。下面是AX-12舵机的主要技术参数:AX-12+规格参数:1.重量:55g2.齿轮减速比:1/2543.扭矩:12kg·cm(7V);16.5kg·cm(10V)4.速度:0.269秒/60度(7V);0.196秒/60度(10V)5.最小分辨率:0.35°6.最大运行角度:300°(有位置控制);360°连续旋转(无位置控制)7.电压:7V~10V(推荐供电:9.6V)8.最大电流:900mA9.工作温度:-5~+85℃10.控制信号:数字信号11.通讯协议:半双工异步串行通信12.通讯设置:(数据位8、停止位1、无奇偶效验)13.Link方式:TTL-Daisy总线14.ID数:254ID(0~253)15.通讯速率:7343bps~1Mbps16.反馈:位置、温度、负载、电压17.材质:工业塑料18.报警功能:当内部温度、扭矩、供电电压超过额定范围时,电机主动反馈实时情况。此种紧急状况,电机会闪动LED指示灯或停止输出扭矩。二.工作原理:(1)硬件电路:要使舵机运行,主控制器必须具备合适TTL电平的半双工异步串行通道。推荐使用Dynamixel(就是舵机生产商的名字)控制器CM-5.在这里,我们不使用CM-5,而用ARM处理器直接控制AX-12。所以我们需要知道它的内部协议。(2)软件:从DATASHEET中得知:AX-12的指令总表如下翻译下:指令功能代码参数个数PING获取舵机状态数据包0x010READDATA读取舵机RAM的信息0x022WRITEDATA写ROM或RAM的一个字节0x032~REGWRITEACTION激活下同上0x042~ACTION引起REGWRITE触发命令0x050RESET复位0x060SYNCWRITE控制舵机舵机同时转动0x834~在这里,我们只用RESET和SYNCWRITE这2个指令!下面分别介绍着2个指令:(1)复位(RESET)FunctionChangesthecontroltablevaluesoftheDynamixelactuatortotheFactoryDefaultValuesettingsLength0X02Instruction0X06ParameterNONEExample4ResettingtheDynamixelactuatorwithanIDof0InstructionPacket:0XFF0XFF0X000X020X060XF7`函数功能:将所有舵机RAM,ROM的内容恢复到出厂状态长度:0x02指令值:0x06参数:无处理器发送指令:0XFF0XFF0X000X020X060XF70XFF0XFF为起始标志0x00为ID号0x02为指令长度0x06为指令代码0xF7为校验码(Check_Sum=~(ID+2+6))(2)控制舵机移动FunctionUsedforcontrollingmanyDynamixelactuatorsatthesametime.ThecommunicationtimedecreasesbytheSynchWriteinstructionsincemanyinstructionscanbetransmittedbyasingleinstruction.However,youcanusethisinstructiononlywhenthelengthsandaddressesofthecontroltabletobewrittentoarethesame.Also,thebroadcastingIDneedstobeusedfortransmitting.ID0XFELength(L+1)*N+4(L:DatalengthforeachDynamixelactuator,N:ThenumberofDynamixelactuators)Instruction0X83Parameter1StartingaddressofthelocationwherethedataistobewrittenParameter2Thelengthofthedatatobewritten(L)Parameter3TheIDofthe1stDynamixelactuatorParameter4The1stdataforthe1stDynamixelactuatorParameter5The2nddataforthe1stDynamixelactuator…ParameterL+3TheLthdataforthe1stDynamixelactuatorParameterL+Dataforthe1stDynamixelactuatorParameterL+4TheIDofthe2ndDynamixelactuatorParameterL+5The1stdataforthe2ndDynamixelactuatorParameterL+6The2nddataforthe2ndDynamixelactuator…Parameter2L+4TheLthdataforthe2ndDynamixelactuator….Example5Settingthefollowingpositionsandvelocitiesfor4DynamixelactuatorsDynamixelactuatorwithanIDof0:toposition0X010withaspeedof0X150DynamixelactuatorwithanIDof1:toposition0X220withaspeedof0X360Dataforthe2ndDynamixelactuator函数功能:主要功能是控制所有AX-12舵机同时移动,当然,这条指令也可以控制一个舵机移动。我们用就是用这条指令来使舵机动作!长度:(L+1)*N+4(L:每个舵机的控制信息长度,N:控制舵机数)指令值:0xFE下面我们用这条指令编写一个控制一个舵机的子程序:voidMove_One(unsignedintPostion,unsignedintSpeed,unsignedcharID){unsignedintCheck_Sum;if(Postion=0x3ff)Postion=0x3ff;//位置值不能超过0x3ffif(Speed=0x3ff)Speed=0x3ff;//位置值不能超过0x3ff//Check_Sum=~(0xfe+0x09+0x83+0x1e+0x04+ID+Postion%256+Postion/256+Speed%256+Speed/256);//校验码计算Check_Sum=~(0xac+ID+Postion%256+Postion/256+Speed%256+Speed/256);if(Check_Sum0xff)Check_Sum=Check_Sum%256;uart_t(0xff);uart_t(0xff);//发送起始码uart_t(0xfe);//指令代码uart_t(0x09);//移动一个舵机的参数长度uart_t(0x83);//指令:SYNC_WRITEuart_t(0x1e);//目标位置在舵机RAM的地址uart_t(0x04);//控制信息的长度:两个字节速度,两个字节位置uart_t(ID);//舵机ID号uart_t(Postion%256);//目标位置低字节uart_t(Postion/256);//目标位置高字节uart_t(Speed%256);//目标速度低字节uart_t(Speed/256);//目标速度高字节uart_t(Check_Sum);//发送校验码程序流程图:程序开始程序初始化设串口波特率:1Mbps所有舵机ID是否正确?N复位重设ID发送舵机转动命令程序结束Y