一、总线舵机驱动板简介
注意:
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 */
}
补充
全双工和半双工是通信方式的两种类型。
- 全双工通信是指通信双方可以同时发送和接收数据,就像两个人在对话一样。这种通信方式可以实现高效的数据传输,因为双方可以同时进行数据交换,不需要等待对方的回复。例如,电话通话就是全双工通信的例子。
- 半双工通信是指通信双方不能同时发送和接收数据,只能轮流进行发送和接收。这种通信方式需要一方发送完数据后等待对方的回复才能继续发送数据,因此通信效率较低。例如,对讲机通信就是半双工通信的例子。
- 因此,全双工通信和半双工通信的区别在于双方是否可以同时进行发送和接收数据。