微雪DDSM115直驱伺服电机 STM32 HAL库 RS485驱动

小伙伴买了这个电机后,发现CSDN还没有人写有相关驱动,所以打算分享一下。

本文只做工程分享,不想多讲其它的,谅解。

参考自官方文档:https://www.waveshare.net/wiki/DDSM115#.E4.BA.A7.E5.93.81.E7.89.B9.E6.80.A7


.c头文件

#include "DDSM115.h"

uint8_t DDSM115_ID[8] = 
{
	0x01,0x00,
};


/**
 * @brief  CRC8校验码
 * @param  void
 * @retval void
 */
uint8_t Crc8_MAXIM(uint8_t *data, uint8_t len)
{
  uint8_t crc, i;
  crc = 0x00;

  while(len--)
  {
    crc ^= *data++;
    for(i = 0;i < 8;i++)
    {
      if(crc & 0x01)
      {
         crc = (crc >> 1) ^ 0x8c;
      }
        else crc >>= 1;
    }
  }
    return crc;
}

/**
 * @brief  电机模式设定
 * @param  id:默认0x01  mode: 0x01 电流环  0x02 速度环  0x03 位置环(切换为位置环时电机转速需低于10rpm)
 * @retval void
 */
void DDSM_Mode_Set(uint8_t id,uint8_t mode)
{
	uint8_t data[10];
	
	data[0]=id;
	data[1]=0xA0;
	data[2]=0x00;
	data[3]=0x00;
	data[4]=0x00;
	data[5]=0x00;
	data[6]=0x00;
	data[7]=0x00;
	data[8]=0x00;
	data[9]=mode;
	
	HAL_UART_Transmit( &huart1,data,sizeof(data),0xff );
}

/**
 * @brief  电机ID设置 
 * @param  连续发五次该指令
 * @retval void
 */
void DDSM_ID_Set(uint8_t id)
{
	uint8_t data[10];
	
	data[0]=0xAA;
	data[1]=0x55;
	data[2]=0x53;
	data[3]=id;
	data[4]=0x00;
	data[5]=0x00;
	data[6]=0x00;
	data[7]=0x00;
	data[8]=0x00;
	data[9]=0x00;
	
	HAL_UART_Transmit( &huart1,data,sizeof(data),0xff );
}

/**
 * @brief  驱动电机转动
 * @param  ctrl_value:在当面模式下的控制值    speedUp_Time:加速时间    lock_Car:刹车 0xff生效 速度环模式下使用
 * @retval void
 */
uint8_t b,d,f;
void DDSM_Motor_Star(uint8_t id,int16_t ctrl_value,uint8_t speedUp_Time,uint8_t lock_Car)
{
	uint8_t data[10];
	
	data[0]=0x01;
	data[1]=0x64;
	data[2]=(uint8_t)(ctrl_value>>8);  //高八位
	d = data[2];
	data[3]=(uint8_t)(ctrl_value);  	 //低八位
	f = data[3];
	data[4]=0x00;
	data[5]=0x00;
	data[6]=0x00;  //加速时间 加速模式下使用
	data[7]=0x00; 
	data[8]=0x00;
	data[9]=Crc8_MAXIM(data, 9);
	b = data[9];
	HAL_UART_Transmit( &huart1,data,sizeof(data),0xff );
}

/**
 * @brief  电机反馈
 * @param  void
 * @retval void
 */
void DDSM_FeedBack(uint8_t id)
{
	uint8_t data[10];
	
	data[0]=id;
	data[1]=0x74;
	data[2]=0x00;
	data[3]=0x00;
	data[4]=0x00;
	data[5]=0x00;
	data[6]=0x00;
	data[7]=0x00;
	data[8]=0x00;
	data[9]=Crc8_MAXIM(data, 9);;
	
	HAL_UART_Transmit( &huart1,data,sizeof(data),0xff );
}

/**
 *@brief   电机初始化
 * @param  void
 * @retval void
 */
void DDSM_Motor_Init(uint8_t id,uint8_t mode)
{
	
	DDSM_Mode_Set(id,mode); //设定电机模式
}

.h文件

#ifndef __DDSM115_H
#define __DDSM115_H

#include "usart.h"

#define DDSM_UART_IT  &huart1

#define AngleToMotor(angle)    (uint16_t)(angle*91.01944444444444) //角度  0°~360°
#define SpeedToMotor(speed)    (int16_t) (speed)                   //速度  -330~330 rpm
#define CurrentToMotor(cur)    (int16_t) (cur*4095.875)						 //电流	 -8~8A

#define Motor_Current 	 0x01 //电流环
#define Motor_Speed   	 0x02 //速度环
#define Motor_Position   0x03 //位置环

extern uint8_t DDSM115_ID[8];

void DDSM_Motor_Star(uint8_t id,int16_t ctrl_value,uint8_t speedUp_Time,uint8_t lock_Car);

void DDSM_Motor_Init(uint8_t id,uint8_t mode);

void DDSM_FeedBack(uint8_t id);

void DDSM_ID_Set(uint8_t id);




#endif /* __DDSM115_H */

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值