MW22-02A/BSP/Driver/as5047d/as5047d.h

166 lines
4.9 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef __AS5047D_H_
#define __AS5047D_H_
#include "gd32f4xx.h"
///水平AS5047D端口
///CSn
///将AS5047D_HORI的CSn引脚置为高电平
#define AS5047D_HORI_CSN_DISABLE (gpio_bit_set(GPIOA,GPIO_PIN_15))
///将AS5047D_HORI的CSn引脚置为低电平
#define AS5047D_HORI_CSN_ENABLE (gpio_bit_reset(GPIOA,GPIO_PIN_15))
///CLK
///将AS5047D_HORI的CLK引脚置为高电平
#define AS5047D_HORI_CLK_HIGH (gpio_bit_set(GPIOC,GPIO_PIN_10))
///将AS5047D_HORI的CLK引脚置为低电平
#define AS5047D_HORI_CLK_LOW (gpio_bit_reset(GPIOC,GPIO_PIN_10))
///MISO
///AS5047D_HORI的MISO引脚相连的引脚的电平值
#define AS5047D_HORI_MISO_READ (gpio_input_bit_get(GPIOC,GPIO_PIN_11))
///MOSI
///将AS5047D_HORI的MOSI引脚置为高电平
#define AS5047D_HORI_MOSI_HIGH (gpio_bit_set(GPIOC,GPIO_PIN_12))
///将AS5047D_HORI的MOSI引脚置为低电平
#define AS5047D_HORI_MOSI_LOW (gpio_bit_reset(GPIOC,GPIO_PIN_12))
///垂直AS5047D端口
///垂直AS5047D_VERT芯片引脚控制
///CSn
///将AS5047D_VERT的CSn引脚置为高电平
#define AS5047D_VERT_CSN_DISABLE (gpio_bit_set(GPIOD,GPIO_PIN_0))
///将AS5047D_VERT的CSn引脚置为低电平
#define AS5047D_VERT_CSN_ENABLE (gpio_bit_reset(GPIOD,GPIO_PIN_0))
///CLK
///将AS5047D_VERT的CLK引脚置为高电平
#define AS5047D_VERT_CLK_HIGH (gpio_bit_set(GPIOD,GPIO_PIN_1))
///将AS5047D_VERT的CLK引脚置为低电平
#define AS5047D_VERT_CLK_LOW (gpio_bit_reset(GPIOD,GPIO_PIN_1))
///MISO
///读取与AS5047D_VERT的MISO引脚相连的引脚的电平值
#define AS5047D_VERT_MISO_READ (gpio_input_bit_get(GPIOD,GPIO_PIN_2))
///MOSI
///将AS5047D_VERT的MOSI引脚置为高电平
#define AS5047D_VERT_MOSI_HIGH (gpio_bit_set(GPIOD,GPIO_PIN_3))
///将AS5047D_VERT的MOSI引脚置为低电平
#define AS5047D_VERT_MOSI_LOW (gpio_bit_reset(GPIOD,GPIO_PIN_3))
///AS5047D寄存器地址
///NOP
#define AS5047D_NOP 0x0000
///Clear Error Flag
#define AS5047D_CEF 0X0001
///Programming Control
#define AS5047D_PC 0X0003
///OTP Register Zero Position Hi
#define AS5047D_ORZPH 0X0016
///OTP Register Zero Position Low 6 LSBs
#define AS5047D_ORZPL 0X0017
///Diagnostics + Automatic Gain Control (AGC)
#define AS5047D_D_AGC 0X3FFD
///Magnitude
#define AS5047D_M 0X3FFE
///Angle
#define AS5047D_ANGLE 0X3FFF
///清除错误标记CLEAR ERROR FLAG 0100 0000 0000 0001
#define AS5047D_CLEAR_ERROR_FLAG 0X4001
///AS5047D寄存器读写类型
///读寄存器
#define AS5047D_READ_COMMAND 0X4000
///写寄存器
#define AS5047D_WRITE_COMMAND 0XBFFF
///写入数据
#define AS5047D_WRITE_DATA 0X0001
///判断接收数据
#define AS5047D_JUDGE_RECEIVE_DATA 0X4000 // 0100 0000 0000 0000
///寄存器连续读取的次数
#define AS5047D_READ_NUM 3
///寄存器连续写入的次数
#define AS5047D_WRITE_NUM 3
#define AS5047D_DIR_FWD 1 //磁编码器正向转动
#define AS5047D_DIR_REV 0 //磁编码器反向转动
///用于保存对接收数据的判断结果
///
///用于保存对接收数据的判断结果,并且详细保存出错的具体原因
///_master表示as5047d对接收到的指令判断的结果_slave表示K60对as5047d返回的数据包判断结果
typedef struct _As5047DJudgeReceivePackage_
{
///接收到的数据包
unsigned int package;
///k60对AS5047D回复的数据进行判断
///判断接收的数据包效验码是否正确,1错误0正常
unsigned char parity_error_package;
///AS5047D对接收到的K60指令进行判断,指令有错时的回复结果
///数据Error flagEF
unsigned char error_flag_command;
///校验错误1错误0正常
unsigned char parity_error_command;
///命令无效1错误0正常
unsigned char command_invalid_command;
///帧错误1错误0正常
unsigned char framing_error_command;
///数据操作是否成功0不成功1成功.即判断写入或者读取数据是否成功
unsigned char Operation_Result;
}As5047DJudgeReceivePackage;
///函数声明
void as5047d_init();
As5047DJudgeReceivePackage as5047d_hori_judge_receive_package(unsigned int package);
As5047DJudgeReceivePackage as5047d_vert_judge_receive_package(unsigned int package);
unsigned int as5047d_command_type(unsigned int package, unsigned int type);
unsigned int as5047d_hori_receive_package();
unsigned int as5047d_hori_read_command(unsigned int add);
unsigned int as5047d_hori_send_package(unsigned int package);
unsigned int as5047d_hori_write_command(unsigned int add);
unsigned int as5047d_hori_nop_command();
As5047DJudgeReceivePackage as5047d_hori_write_data(unsigned int add,unsigned int data);
unsigned int as5047d_hori_read_data(unsigned int add);
float as5047d_hori_get_angle();
unsigned int as5047d_hori_cef_command();
unsigned int as5047d_vert_receive_package();
unsigned int as5047d_vert_read_command(unsigned int add);
unsigned int as5047d_vert_send_package(unsigned int package);
unsigned int as5047d_vert_write_command(unsigned int add);
unsigned int as5047d_vert_nop_command();
As5047DJudgeReceivePackage as5047d_vert_write_data(unsigned int add,unsigned int data);
unsigned int as5047d_vert_read_data(unsigned int add);
float as5047d_vert_get_angle();
unsigned int as5047d_vert_cef_command();
float as5047d_hori_get_angle_a();
float as5047d_vert_get_angle_a();
#endif