您的位置 首页 嵌入式

总线舵机是什么?根据STM32的单线串口通讯

总线舵机是什么?基于STM32的单线串口通信-总线伺服舵机即串行总线智能舵机,实际上可以理解为数字舵机的衍生品,数字舵机与模拟舵机相比而言是控制系统设计上的颠覆,而总线伺服舵机对于舵机而言则是在功能和运用上的颠覆。舵机的运用方式实际上只能发挥出总线伺服舵机非常小的一部分功能。

1 总线舵机的介绍

总线伺服舵机即串行总线智能舵机,实践上能够理解为数字舵机的衍生品,数字舵机与模仿舵机比较而言是操控系统规划上的推翻,而总线伺服舵机关于舵机而言则是在功用和运用上的推翻。舵机的运用方法实践上只能发挥出总线伺服舵机十分小的一部分功用。这款TS-315是经过单线的串口通讯对旋转进行操控的,操控字符串协议如下:

字符串协议:

#1P1500T100 操控舵机旋转,无回来

(1P是ID为1的舵机,中心的1500是参数,规模是500-2500,操控舵机规模,后边的参数100,表明舵机旋转的时刻参数,也便是速度,意思是舵机从当时视点到达指令中的1500的方位,所需求的时刻为100ms,时刻的规模是1-50000,时刻越大速度越慢,可是舵机的最快速度以实践舵机的参数而定)

#1PRAD  读取视点,回来格局 #001P1467  

#1PULK 开释扭力,无回来

#1PID002  改动ID (将1改成2,后边的参数有必要为3位数,不行补0),回来格局 #002P

#1PBD1  回来 #OK!

改动波特率(9600,19200,38400,115200,128000)  (舵机重启之后才会收效)

//1:9600 , 2:19200 , 3:38400 , 4:57600 , 5:115200 , 6:128000

#1PCSD  将当时方位设置舵机的初始方位,回来 #OK!  (设置之后舵机上电之后会旋转到设置的方位)

#1PCLE  (康复出厂设置)(舵机重启之后才会收效),回来 #OK!

#1PMOD1   ,回来 #OK!

(最终的参数1表明作业形式,0:270度逆向,1:270度顺向,2:180度逆向,3:180度顺向,4:接连旋转)

逆向和顺向表明舵机的旋转方向。逆向:脉冲信号从500到2500,舵机逆时针旋转。顺向:脉冲信号从500到2500,舵机顺时针旋转。

接连旋转形式便是一般的360度舵机,接连旋转的,无法操控视点,这个形式下操控舵机的指令#1P1500T100这样的指令的效果就改动了,这个指令在这个形式下面的效果是:

中心的参数1500,规模为500-2500,其间500-1500操控舵机的正转,1500-2500操控舵机的回转。越挨近1500速度越慢,越远离1500速度越快(即500和2500速度都是最快的,1500是中止)

最终的参数100,表明舵机旋转的圈数,100便是100圈(存在一两圈的差错,正常!),假如这个参数改成50000,那便是无限旋转。假如参数是49999,那就只会转49999圈

上面的1P 表明编号为1的舵机,上面一切的指令最终都要带回车换行符(0x0d 和 0x0a)

舵机的ID默许是1,ID为255是播送,播送指令对一切舵机都有用。默许波特率128000

2 STM32单线串口通讯

参阅手册里边是这样描绘的,十分简略单线半两边形式经过设置USART_CR3寄存器的HDSEL位挑选。在这个形式里,下面的位有必要坚持清零状况:
● USART_CR2寄存器的LINEN和CLKEN位
● USART_CR3寄存器的SCEN和IREN位
USART能够装备成遵从单线半双工协议。在单线半双工形式下,TX和RX引脚在芯片内部互连。运用操控位”HALF DUPLEX SEL”(USART_CR3中的HDSEL位)挑选半双工和全双工通讯。
当HDSEL为’1’时
● RX不再被运用

除此以外,通讯与正常USART形式相似。由软件来办理线上的抵触(例如经过运用一个中心裁定器)。特别的是,发送从不会被硬件所阻止。当TE位被设置时,只需数据一写到数据寄存器上,发送就持续。

  参阅初始化源码如下

  //初始化IO 串口2

  //pclk2CLK2时钟频率(Mhz)

  //bound:波特率

  void uart2_init(u32 pclk2,u32 bound)

  {

  u32 temp;

  temp=(pclk2*1000000+bound/2)/bound; //得到USARTDIV@OVER8=0,选用四舍五入核算

  RCC-》AHB1ENR|=1《《0; //使能PORTA口时钟

  RCC-》APB1ENR|=1《《17; //使能串口2时钟

  GPIO_Set(GPIOA,PIN2|PIN3,GPIO_MODE_AF,GPIO_OTYPE_OD,GPIO_SPEED_50M,GPIO_PUPD_PU);//PA2,PA3,复用功用,上拉输出

  GPIO_AF_Set(GPIOA,2,7); //PA2,AF7

  GPIO_AF_Set(GPIOA,3,7);//PA3,AF7

  USART2-》CR1=0; //清零CR1寄存器

  USART2-》BRR=temp/2; //波特率设置@OVER8=0

  //下面5行代码是依据参阅手册设置寄存器,留意使能HDSEL放到最终

  USART2-》CR3&=0《《5; //清SCEN

  USART2-》CR3&=0《《1; //清IREN

  USART2-》CR2&=0《《11; //清CLKEN

  USART2-》CR2&=0《《14; //清LINEN

  USART2-》CR3|=1《《3; //使能HDSEL

  USART2-》CR1|=0《《28; //设置M1=0

  USART2-》CR1|=0《《12; //设置M0=0&M1=0,挑选8位字长

  USART2-》CR1|=0《《15; //设置OVER8=0,16倍过采样

  USART2-》CR1|=1《《3; //串口发送使能

  #if EN_USART2_RX //假如使能了接纳

  //使能接纳中止

  USART2-》CR1|=1《《2; //串口接纳使能

  USART2-》CR1|=1《《5; //接纳缓冲区非空中止使能

  MY_NVIC_Init(0,0,USART2_IRQn,2);//组2,最低优先级

  #endif

  USART2-》CR1|=1《《0; //串口使能

  }

  3数据读取时的留意点

  

  经过逻辑剖析仪剖析,指令传送至舵机后,舵机给出了正确的反应,可是因为舵机回馈数据的速度十分快,造成了丢包问题,数据总是无法正确传送至单片机,因为在单线形式,RXD一向接纳TXD发送的数据,致使真实需求的数据丢包,因此只需求批改程序即可批改,更改的程序仅仅判别下是否是自己发送的指令即可,若是,则不在接纳,最终验证,现已能够正确读取舵机反应值

  u16 USART2_RX_STA=0; //接纳状况符号

  void USART2_IRQHandler(void)

  {

  u8 res;

  #if SYSTEM_SUPPORT_OS //假如SYSTEM_SUPPORT_OS为真,则需求支撑OS.

  OSIntEnter();

  #endif

  if(USART2-》ISR&(1《《5))//接纳到数据

  {

  res=USART2-》RDR;

  //if(USART2-》RDR!=USART2-》TDR)

  {

  if((USART2_RX_STA&0x8000)==0)//接纳未完成

  {

  if(USART2_RX_STA&0x4000)//接纳到了0x0d

  {

  if(res!=0x0a)USART2_RX_STA=0;//接纳过错,重新开始

  else if (USART2_RX_BUF[5]==0x44)USART2_RX_STA=0; //避免丢包,制止接纳自己发送出去的命名

  else

  {

  USART2_RX_STA|=0x8000; //接纳完成了

  }

  }

  else //还没收到0X0D

  {

  if(res==0x0d)USART2_RX_STA|=0x4000;

  else

  {

  USART2_RX_BUF[USART2_RX_STA&0X3FFF]=res;

  USART2_RX_STA++;

  if(USART2_RX_STA》(USART2_REC_LEN-1))USART2_RX_STA=0;//接纳数据过错,重新开始接纳

  }

  }

  }

  }

  }

  逻辑剖析仪数据抓取

  

  总线舵机是什么?根据STM32的单线串口通讯

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/347541.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部