166 lines
4.9 KiB
C
166 lines
4.9 KiB
C
#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 flag(EF)位,
|
||
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 |