同步指令¶
API使用说明¶
同步指令控制舵机¶
FSUS_STATUS FSUS_SyncCommand(Usart_DataTypeDef *usart, uint8_t servo_count, uint8_t ServoMode, FSUS_sync_servo servoSync[]);
usart
舵机控制对应的串口数据对象Usart_DataTypeDef
servo_count
舵机同步数量-
servomode
同步命令模式选择 -
servoSync[]
舵机控制参数结构体
使用示例
/*同步命令模式选择
* 1:设置舵机的角度
* 2:设置舵机的角度(指定周期)
* 3:设置舵机的角度(指定转速)
* 4:设置舵机的角度(多圈模式)
* 5:设置舵机的角度(多圈模式, 指定周期)
* 6:设置舵机的角度(多圈模式, 指定转速)
* 7:读取舵机的数据*/
uint8_t sync_mode=1;//同步命令模式
uint8_t sync_count=5;//舵机数量
//数组定义在#include "fashion_star_uart_servo.c"
FSUS_sync_servo SyncArray[20]; // 假设您要控制20个伺服同步
ServoData servodata[20];//假设您要读取20个伺服舵机的数据
//如需更改舵机数量在#include "fashion_star_uart_servo.h"对应修改extern
extern FSUS_sync_servo SyncArray[20]; // 假设您要控制20个伺服同步
extern ServoData servodata[20];//假设您要读取20个伺服舵机的数据
servoSyncArray[0].angle=90;/*角度*/
servoSyncArray[0].id=0;/*舵机ID号*/
servoSyncArray[0].velocity=100;/*速度*/ servoSyncArray[0].interval_single=1000;/*单圈时间*/ servoSyncArray[0].interval_multi=1000; /*多圈时间*/ servoSyncArray[0].t_acc=100;/*加速时间*/
servoSyncArray[0].t_dec=100;/*减速时间*/ servoSyncArray[0].power=100;/*功率*/
/*********************************以此类推赋值剩下舵机参数 灵活性高**************************************/
FSUS_SyncCommand(servo_usart, servo_count, servomode, servoSyncArray);
源代码¶
#include "stm32f10x.h"
#include "usart.h"
#include "sys_tick.h"
#include "fashion_star_uart_servo.h"
// 使用串口1作为舵机控制的端口
// <接线说明>
// STM32F103 PA9(Tx) <----> 总线伺服舵机转接板 Rx
// STM32F103 PA10(Rx) <----> 总线伺服舵机转接板 Tx
// STM32F103 GND <----> 总线伺服舵机转接板 GND
// STM32F103 V5 <----> 总线伺服舵机转接板 5V
// <注意事项>
// 使用前确保已设置usart.h里面的USART1_ENABLE为1
// 设置完成之后, 将下行取消注释
Usart_DataTypeDef* servoUsart = &usart1;
// 使用串口2作为日志输出的端口
// <接线说明>
// STM32F103 PA2(Tx) <----> USB转TTL Rx
// STM32F103 PA3(Rx) <----> USB转TTL Tx
// STM32F103 GND <----> USB转TTL GND
// STM32F103 V5 <----> USB转TTL 5V (可选)
Usart_DataTypeDef* logging_usart = &usart2;
// 重定向c库函数printf到串口,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{
while((logging_usart->pUSARTx->SR&0X40)==0){}
/* 发送一个字节数据到串口 */
USART_SendData(logging_usart->pUSARTx, (uint8_t) ch);
/* 等待发送完毕 */
// while (USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET);
return (ch);
}
/*同步命令模式选择
* 1:设置舵机的角度
* 2:设置舵机的角度(指定周期)
* 3:设置舵机的角度(指定转速)
* 4:设置舵机的角度(多圈模式)
* 5:设置舵机的角度(多圈模式, 指定周期)
* 6:设置舵机的角度(多圈模式, 指定转速)
* 7:读取舵机的数据*/
uint8_t servomode=1;//自行更改数值设置模式
//舵机数量,如果id不是从0开始,请把参数设置为最大舵机id号
uint8_t servo_count=5;
int main (void)
{
// 嘀嗒定时器初始化
SysTick_Init();
// 串口初始化
Usart_Init();
while (1){
SyncArray[0].angle=90;
SyncArray[0].id=0;SyncArray[0].interval_single=100;SyncArray[0].interval_multi=1000;SyncArray[0].velocity=100;SyncArray[0].t_acc=20;SyncArray[0].t_dec=20;
SyncArray[1].angle=-90;
SyncArray[1].id=1;SyncArray[1].interval_single=100;SyncArray[1].interval_multi=1000;SyncArray[1].velocity=100;SyncArray[1].t_acc=20;SyncArray[1].t_dec=20;
SyncArray[2].angle=90;
SyncArray[2].id=2;SyncArray[2].interval_single=100;SyncArray[2].interval_multi=1000;SyncArray[2].velocity=100;SyncArray[2].t_acc=20;SyncArray[2].t_dec=20;
SyncArray[3].angle=-90;
SyncArray[3].id=3;SyncArray[3].interval_single=100;SyncArray[3].interval_multi=1000;SyncArray[3].velocity=100;SyncArray[3].t_acc=20;SyncArray[3].t_dec=20;
SyncArray[4].angle=-90;
SyncArray[4].id=4;SyncArray[4].interval_single=100;SyncArray[4].interval_multi=1000;SyncArray[4].velocity=100;SyncArray[4].t_acc=20;SyncArray[4].t_dec=20;
//发送同步命令控制
FSUS_SyncCommand(servo_usart,sync_count,sync_mode,SyncArray);
SysTick_DelayMs(1000);
//发送同步命令读取
FSUS_SyncCommand(servo_usart,sync_count,7,SyncArray);
SysTick_DelayMs(200);
SyncArray[0].angle=45;SyncArray[0].interval_single=0;SyncArray[0].velocity=20;
SyncArray[1].angle=-45;SyncArray[1].interval_single=0;SyncArray[1].velocity=20;
SyncArray[2].angle=45;SyncArray[2].interval_single=0;SyncArray[2].velocity=20;
SyncArray[3].angle=-45;SyncArray[3].interval_single=0;SyncArray[3].velocity=20;
SyncArray[4].angle=-45;SyncArray[4].interval_single=0;SyncArray[4].velocity=20;
//发送同步命令控制
FSUS_SyncCommand(servo_usart,sync_count,sync_mode,SyncArray);
SysTick_DelayMs(1000);
//发送同步命令读取
FSUS_SyncCommand(servo_usart,sync_count,7,SyncArray);
SysTick_DelayMs(200);
}
}