跳转至

同步指令

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);
  }
}