Driver for AK7451 Angle Senor(SPI).

Fork of AK7451 by AKM Development Platform

Committer:
masahikofukasawa
Date:
Thu Apr 28 19:20:32 2016 +0000
Revision:
0:56b554871e05
Child:
1:536cf25b0eb4
First commit;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
masahikofukasawa 0:56b554871e05 1 #ifndef AK7451_H
masahikofukasawa 0:56b554871e05 2 #define AK7451_H
masahikofukasawa 0:56b554871e05 3
masahikofukasawa 0:56b554871e05 4 #include "mbed.h"
masahikofukasawa 0:56b554871e05 5
masahikofukasawa 0:56b554871e05 6 /**
masahikofukasawa 0:56b554871e05 7 * This is a device driver of AK7451.
masahikofukasawa 0:56b554871e05 8 *
masahikofukasawa 0:56b554871e05 9 * @note AK7451 is a high speed angle sensor IC manufactured by AKM.
masahikofukasawa 0:56b554871e05 10 *
masahikofukasawa 0:56b554871e05 11 * Example:
masahikofukasawa 0:56b554871e05 12 * @code
masahikofukasawa 0:56b554871e05 13 * #include "mbed.h"
masahikofukasawa 0:56b554871e05 14 * #include "ak7451.h"
masahikofukasawa 0:56b554871e05 15 *
masahikofukasawa 0:56b554871e05 16 *
masahikofukasawa 0:56b554871e05 17 * int main() {
masahikofukasawa 0:56b554871e05 18 * // Creates an instance of SPI
masahikofukasawa 0:56b554871e05 19 * }
masahikofukasawa 0:56b554871e05 20 * @endcode
masahikofukasawa 0:56b554871e05 21 */
masahikofukasawa 0:56b554871e05 22 class AK7451
masahikofukasawa 0:56b554871e05 23 {
masahikofukasawa 0:56b554871e05 24 public:
masahikofukasawa 0:56b554871e05 25
masahikofukasawa 0:56b554871e05 26 /**
masahikofukasawa 0:56b554871e05 27 * Available opration modes in AK7451.
masahikofukasawa 0:56b554871e05 28 */
masahikofukasawa 0:56b554871e05 29 typedef enum {
masahikofukasawa 0:56b554871e05 30 AK7451_NORMAL_MODE = 0x0000,
masahikofukasawa 0:56b554871e05 31 AK7451_USER_MODE = 0x050F,
masahikofukasawa 0:56b554871e05 32 } OperationMode;
masahikofukasawa 0:56b554871e05 33
masahikofukasawa 0:56b554871e05 34 /**
masahikofukasawa 0:56b554871e05 35 * Status of function.
masahikofukasawa 0:56b554871e05 36 */
masahikofukasawa 0:56b554871e05 37 typedef enum {
masahikofukasawa 0:56b554871e05 38 SUCCESS, /**< The function processed successfully. */
masahikofukasawa 0:56b554871e05 39 ERROR, /**< General Error */
masahikofukasawa 0:56b554871e05 40 ERROR_IN_USER_MODE,
masahikofukasawa 0:56b554871e05 41 ERROR_IN_NORMAL_MODE,
masahikofukasawa 0:56b554871e05 42 ERROR_PARITY,
masahikofukasawa 0:56b554871e05 43 ERROR_ABNORMAL_STRENGTH,
masahikofukasawa 0:56b554871e05 44 } Status;
masahikofukasawa 0:56b554871e05 45
masahikofukasawa 0:56b554871e05 46 /**
masahikofukasawa 0:56b554871e05 47 * Constructor.
masahikofukasawa 0:56b554871e05 48 *
masahikofukasawa 0:56b554871e05 49 */
masahikofukasawa 0:56b554871e05 50 AK7451();
masahikofukasawa 0:56b554871e05 51
masahikofukasawa 0:56b554871e05 52 /**
masahikofukasawa 0:56b554871e05 53 * Destructor.
masahikofukasawa 0:56b554871e05 54 *
masahikofukasawa 0:56b554871e05 55 */
masahikofukasawa 0:56b554871e05 56 ~AK7451();
masahikofukasawa 0:56b554871e05 57
masahikofukasawa 0:56b554871e05 58 /*
masahikofukasawa 0:56b554871e05 59 virtual AkmSensor::Status init();
masahikofukasawa 0:56b554871e05 60 virtual void eventCallback();
masahikofukasawa 0:56b554871e05 61 virtual bool isEvent();
masahikofukasawa 0:56b554871e05 62 virtual AkmSensor::Status startSensor();
masahikofukasawa 0:56b554871e05 63 virtual AkmSensor::Status startSensor(float sec);
masahikofukasawa 0:56b554871e05 64 virtual AkmSensor::Status stopSensor();
masahikofukasawa 0:56b554871e05 65 virtual AkmSensor::Status readSensorData(char* data);
masahikofukasawa 0:56b554871e05 66 */
masahikofukasawa 0:56b554871e05 67 /**
masahikofukasawa 0:56b554871e05 68 * begin
masahikofukasawa 0:56b554871e05 69 *
masahikofukasawa 0:56b554871e05 70 * @param *spi pointer to SPI instance
masahikofukasawa 0:56b554871e05 71 * @param *cs pointer to DigitalOut instance for CS
masahikofukasawa 0:56b554871e05 72 */
masahikofukasawa 0:56b554871e05 73 void begin(SPI *spi, DigitalOut *cs);
masahikofukasawa 0:56b554871e05 74
masahikofukasawa 0:56b554871e05 75 /**
masahikofukasawa 0:56b554871e05 76 * Check the connection.
masahikofukasawa 0:56b554871e05 77 *
masahikofukasawa 0:56b554871e05 78 * @note Connection check is performed by reading a register which has a fixed value and verify it.
masahikofukasawa 0:56b554871e05 79 *
masahikofukasawa 0:56b554871e05 80 * @return Returns SUCCESS when succeeded, otherwise returns another code.
masahikofukasawa 0:56b554871e05 81 */
masahikofukasawa 0:56b554871e05 82 Status checkConnection();
masahikofukasawa 0:56b554871e05 83
masahikofukasawa 0:56b554871e05 84 /**
masahikofukasawa 0:56b554871e05 85 * Writes data to EEPROM on the device.
masahikofukasawa 0:56b554871e05 86 * @param address EEPROM address
masahikofukasawa 0:56b554871e05 87 * @param data data to be written
masahikofukasawa 0:56b554871e05 88 * @return Returns SUCCESS when succeeded, otherwise returns another.
masahikofukasawa 0:56b554871e05 89 */
masahikofukasawa 0:56b554871e05 90 Status writeEEPROM(char address, const char *data);
masahikofukasawa 0:56b554871e05 91
masahikofukasawa 0:56b554871e05 92 /**
masahikofukasawa 0:56b554871e05 93 * Reads data from EEPROM on the device.
masahikofukasawa 0:56b554871e05 94 * @param address EEPROM address
masahikofukasawa 0:56b554871e05 95 * @param data data to read
masahikofukasawa 0:56b554871e05 96 * @return Returns SUCCESS when succeeded, otherwise returns another.
masahikofukasawa 0:56b554871e05 97 */
masahikofukasawa 0:56b554871e05 98 Status readEEPROM(char address, char *data);
masahikofukasawa 0:56b554871e05 99
masahikofukasawa 0:56b554871e05 100 /**
masahikofukasawa 0:56b554871e05 101 * Writes data to register on the device.
masahikofukasawa 0:56b554871e05 102 * @param address register address
masahikofukasawa 0:56b554871e05 103 * @param data data to be written
masahikofukasawa 0:56b554871e05 104 * @return Returns SUCCESS when succeeded, otherwise returns another.
masahikofukasawa 0:56b554871e05 105 */
masahikofukasawa 0:56b554871e05 106 Status writeRegister(char address, const char *data);
masahikofukasawa 0:56b554871e05 107
masahikofukasawa 0:56b554871e05 108 /**
masahikofukasawa 0:56b554871e05 109 * Reads data from register on the device.
masahikofukasawa 0:56b554871e05 110 * @param address register address
masahikofukasawa 0:56b554871e05 111 * @param data data to read
masahikofukasawa 0:56b554871e05 112 * @return Returns SUCCESS when succeeded, otherwise returns another.
masahikofukasawa 0:56b554871e05 113 */
masahikofukasawa 0:56b554871e05 114 Status readRegister(char address, char *data);
masahikofukasawa 0:56b554871e05 115
masahikofukasawa 0:56b554871e05 116 /**
masahikofukasawa 0:56b554871e05 117 * Sets device operation mode.
masahikofukasawa 0:56b554871e05 118 *
masahikofukasawa 0:56b554871e05 119 * @param mode device opration mode
masahikofukasawa 0:56b554871e05 120 *
masahikofukasawa 0:56b554871e05 121 * @return Returns SUCCESS when succeeded, otherwise returns another code.
masahikofukasawa 0:56b554871e05 122 */
masahikofukasawa 0:56b554871e05 123 Status setOperationMode(OperationMode mode);
masahikofukasawa 0:56b554871e05 124
masahikofukasawa 0:56b554871e05 125 /**
masahikofukasawa 0:56b554871e05 126 * Reads angle data in [deg] from the device.
masahikofukasawa 0:56b554871e05 127 *
masahikofukasawa 0:56b554871e05 128 * @param angle Pointer
masahikofukasawa 0:56b554871e05 129 *
masahikofukasawa 0:56b554871e05 130 * @return Returns SUCCESS when succeeded, otherwise returns another code.
masahikofukasawa 0:56b554871e05 131 */
masahikofukasawa 0:56b554871e05 132 Status readAngle(float *angle);
masahikofukasawa 0:56b554871e05 133
masahikofukasawa 0:56b554871e05 134 /**
masahikofukasawa 0:56b554871e05 135 * Reads angle data from the device.
masahikofukasawa 0:56b554871e05 136 *
masahikofukasawa 0:56b554871e05 137 * @param angle pointer to read angle data buffer
masahikofukasawa 0:56b554871e05 138 *
masahikofukasawa 0:56b554871e05 139 * @return Returns SUCCESS when succeeded, otherwise returns another code.
masahikofukasawa 0:56b554871e05 140 */
masahikofukasawa 0:56b554871e05 141 Status readAngle(char *angle);
masahikofukasawa 0:56b554871e05 142
masahikofukasawa 0:56b554871e05 143 /**
masahikofukasawa 0:56b554871e05 144 * Measures and reads angle, magnetic flux density and abnormal state code while in the user mode.
masahikofukasawa 0:56b554871e05 145 *
masahikofukasawa 0:56b554871e05 146 * @param angle pointer to angle data buffer
masahikofukasawa 0:56b554871e05 147 * @param density magnetic flux density
masahikofukasawa 0:56b554871e05 148 * @param abnormal_state abnormal state
masahikofukasawa 0:56b554871e05 149 *
masahikofukasawa 0:56b554871e05 150 * @return Returns SUCCESS when succeeded, otherwise returns another code.
masahikofukasawa 0:56b554871e05 151 */
masahikofukasawa 0:56b554871e05 152 Status readAngleMeasureCommand(char *angle, char *density, char *abnormal_state);
masahikofukasawa 0:56b554871e05 153
masahikofukasawa 0:56b554871e05 154 /**
masahikofukasawa 0:56b554871e05 155 * Measures current angle and sets the value to EEPROM as zero angle position.
masahikofukasawa 0:56b554871e05 156 *
masahikofukasawa 0:56b554871e05 157 * @return Returns SUCCESS when succeeded, otherwise returns another code.
masahikofukasawa 0:56b554871e05 158 */
masahikofukasawa 0:56b554871e05 159 Status setAngleZero();
masahikofukasawa 0:56b554871e05 160
masahikofukasawa 0:56b554871e05 161 /**
masahikofukasawa 0:56b554871e05 162 * Sets the value to EEPROM as zero angle position.
masahikofukasawa 0:56b554871e05 163 *
masahikofukasawa 0:56b554871e05 164 * @param angle zero angle position
masahikofukasawa 0:56b554871e05 165 *
masahikofukasawa 0:56b554871e05 166 * @return Returns SUCCESS when succeeded, otherwise returns another code.
masahikofukasawa 0:56b554871e05 167 */
masahikofukasawa 0:56b554871e05 168 Status setAngleZero(const char *angle);
masahikofukasawa 0:56b554871e05 169
masahikofukasawa 0:56b554871e05 170 /**
masahikofukasawa 0:56b554871e05 171 * Sets the value to EEPROM as zero angle position.
masahikofukasawa 0:56b554871e05 172 *
masahikofukasawa 0:56b554871e05 173 * @param angle zero angle position in degree
masahikofukasawa 0:56b554871e05 174 *
masahikofukasawa 0:56b554871e05 175 * @return Returns SUCCESS when succeeded, otherwise returns another code.
masahikofukasawa 0:56b554871e05 176 */
masahikofukasawa 0:56b554871e05 177 Status setAngleZero(const float angle);
masahikofukasawa 0:56b554871e05 178
masahikofukasawa 0:56b554871e05 179 private:
masahikofukasawa 0:56b554871e05 180 /**
masahikofukasawa 0:56b554871e05 181 * Holds a pointer to an SPI object.
masahikofukasawa 0:56b554871e05 182 */
masahikofukasawa 0:56b554871e05 183 SPI *_spi;
masahikofukasawa 0:56b554871e05 184
masahikofukasawa 0:56b554871e05 185 /**
masahikofukasawa 0:56b554871e05 186 * Holds a DigitalOut oblject for CS;
masahikofukasawa 0:56b554871e05 187 */
masahikofukasawa 0:56b554871e05 188 DigitalOut *_cs;
masahikofukasawa 0:56b554871e05 189
masahikofukasawa 0:56b554871e05 190 /**
masahikofukasawa 0:56b554871e05 191 * Holds current mode
masahikofukasawa 0:56b554871e05 192 */
masahikofukasawa 0:56b554871e05 193 OperationMode operationMode;
masahikofukasawa 0:56b554871e05 194
masahikofukasawa 0:56b554871e05 195 /**
masahikofukasawa 0:56b554871e05 196 * Reads data from device.
masahikofukasawa 0:56b554871e05 197 * @param buf buffer to store the read data
masahikofukasawa 0:56b554871e05 198 * @param length bytes to be read
masahikofukasawa 0:56b554871e05 199 * @return Returns SUCCESS when succeeded, otherwise returns another.
masahikofukasawa 0:56b554871e05 200 */
masahikofukasawa 0:56b554871e05 201 Status read(char operation_code, char address, char *data);
masahikofukasawa 0:56b554871e05 202
masahikofukasawa 0:56b554871e05 203 /**
masahikofukasawa 0:56b554871e05 204 * Writes data to the device.
masahikofukasawa 0:56b554871e05 205 * @param data data to be written
masahikofukasawa 0:56b554871e05 206 * @param length of the data
masahikofukasawa 0:56b554871e05 207 * @return Returns SUCCESS when succeeded, otherwise returns another.
masahikofukasawa 0:56b554871e05 208 */
masahikofukasawa 0:56b554871e05 209 Status write(char operation_code, char address, const char *data);
masahikofukasawa 0:56b554871e05 210
masahikofukasawa 0:56b554871e05 211 /**
masahikofukasawa 0:56b554871e05 212 * Checks parity bits sub function
masahikofukasawa 0:56b554871e05 213 * @param data data 12bit read data
masahikofukasawa 0:56b554871e05 214 * @param parity parity bit status
masahikofukasawa 0:56b554871e05 215 * @param error error bit status
masahikofukasawa 0:56b554871e05 216 * @return Returns SUCCESS when succeeded, otherwise returns another.
masahikofukasawa 0:56b554871e05 217 */
masahikofukasawa 0:56b554871e05 218 Status parityCheckSub(const char data, const char parity, const char error);
masahikofukasawa 0:56b554871e05 219
masahikofukasawa 0:56b554871e05 220 /**
masahikofukasawa 0:56b554871e05 221 * Checks parity bits
masahikofukasawa 0:56b554871e05 222 * @param data 2 byte read data to chek parity
masahikofukasawa 0:56b554871e05 223 * @return Returns SUCCESS when succeeded, otherwise returns another.
masahikofukasawa 0:56b554871e05 224 */
masahikofukasawa 0:56b554871e05 225 Status parityCheck(const char *data);
masahikofukasawa 0:56b554871e05 226 };
masahikofukasawa 0:56b554871e05 227
masahikofukasawa 0:56b554871e05 228 #endif