总线舵机是什么?基于STM32的单线串口通信

发布时间:2024-04-30  

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不再被使用
● 当没有数据传输时,TX总是被释放。因此,它在空闲状态的或接收状态时表现为一个标准I/O口。这就意味该I/O在不被USART驱动时,必须配置成悬空输入(或开漏的输出高)。
除此以外,通信与正常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的单线串口通信


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>