总线舵机及其驱动板学习笔记

一、总线舵机驱动板简介

在这里插入图片描述
注意:
1.microUSB接口和TTL接口只能选择其中一个使用(就是读取接口)。
2.蓝色的供电接口和DC插座只需要选择其中一个供电就可以,并且power指示灯常亮。
3.当microUSB接口发送数据到驱动板时RX指示灯闪烁。
4.两个总线舵机接口是并联的,接口顺序也是一样的。
5.TTL接口的5V为输入电压,不是输出电压。
6. DC插座座子3A。另一个6A-10A

二、总线舵机控制原理

普通舵机是接收PWM脉冲信号控制的,而总线舵机是通过串口写入数据来控制的,然而总线舵机的接口只有三根线,而普通的串口是有四根线的,所以就需要使用舵机驱动板,舵机驱动板不仅能够给总线舵机供电,还能够将串口数据转化成半双工串口数据,这样总线舵机就可以正常接收到命令了。
总线舵机的内部由几个部分组成,其中包括小型直流电机、控制电路板、位置反馈电位器、变速金属齿轮组等,控制电路板上集成了一个用于接收串口命令并输出PWM信号的单片机。总线舵机整理可理解为一个从机,可根据串口接收的命令做出反应,当主机需要从机返回数据时,也可以读取当前舵机角度返回给主机。
请添加图片描述

三、编程实战

笔者使用的是STM32F407ZGT6做主控,所以需要使用cubemx跟keil做软件部分

cube

RCC
在这里插入图片描述
USART
USART1是与上位机进行通讯的串口
在这里插入图片描述
USART3是与多级驱动板通信的串口
在这里插入图片描述
时钟树
在这里插入图片描述

Keil

在主函数初始化中需要设置舵机的ID

bus_servo_set_id(id); //将所有舵机的ID都设置成1

为什么只有将将所有舵机的ID都设置成1而没有设置每个舵机不同ID的函数呢?因为舵机的ID需要一个一个设置,设置过了以后他就一直是这个ID了。也就是说需要先用上面那个函数bus_servo_set_id(id);先一个一个设置ID,之后也不要用这个函数了

  while (1)
  {
	bus_servo_control(1, 900, 1000); //控制的代码
	bus_servo_control(2, 3100, 1000); 
	HAL_Delay(2000);
    bus_servo_read(id);//发送命令
    HAL_Delay(10);
    if (get_Rx_state())
    {
      value = bus_servo_get_value();串口读取角度
      printf("\r\nvalue1=%d\r\n", value);//发给上位机
    }
    bus_servo_control(1, 3100, 1000);//控制ID为1的舵机转动角度/时间
	bus_servo_control(2, 900, 1000); 
    HAL_Delay(2000);
    bus_servo_read(id);
    HAL_Delay(10);
    if (get_Rx_state())
    {
      value = bus_servo_get_value();
      printf("\r\nvalue2=%d\r\n", value);
    }
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
  }

补充

全双工和半双工是通信方式的两种类型。

  • 全双工通信是指通信双方可以同时发送和接收数据,就像两个人在对话一样。这种通信方式可以实现高效的数据传输,因为双方可以同时进行数据交换,不需要等待对方的回复。例如,电话通话就是全双工通信的例子。
  • 半双工通信是指通信双方不能同时发送和接收数据,只能轮流进行发送和接收。这种通信方式需要一方发送完数据后等待对方的回复才能继续发送数据,因此通信效率较低。例如,对讲机通信就是半双工通信的例子。
  • 因此,全双工通信和半双工通信的区别在于双方是否可以同时进行发送和接收数据。
  • 5
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值