Yuki Kimura / AS5601
Committer:
kimuraYUKI
Date:
Wed Nov 27 18:05:03 2019 +0000
Revision:
2:35dd35dc4a4a
Parent:
1:81d37343e965
adapt  to magnetic_encorder

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kimuraYUKI 1:81d37343e965 1 #include "mbed.h"
kimuraYUKI 0:f1ca084bfe47 2 #include "AS5601.h"
kimuraYUKI 0:f1ca084bfe47 3
kimuraYUKI 2:35dd35dc4a4a 4 AS5601::AS5601(PinName sda, PinName scl, int ppr_val, int offset_val) : i2c(sda,scl)
kimuraYUKI 0:f1ca084bfe47 5 {
kimuraYUKI 0:f1ca084bfe47 6 i2c.frequency(400000);
kimuraYUKI 0:f1ca084bfe47 7
kimuraYUKI 0:f1ca084bfe47 8 offset = offset_val;
kimuraYUKI 2:35dd35dc4a4a 9 ppr = ppr_val;
kimuraYUKI 1:81d37343e965 10 }
kimuraYUKI 1:81d37343e965 11
kimuraYUKI 2:35dd35dc4a4a 12 void AS5601::init(){
kimuraYUKI 0:f1ca084bfe47 13 //初期化
kimuraYUKI 0:f1ca084bfe47 14 //平均化数設定
kimuraYUKI 0:f1ca084bfe47 15 int conf1_set = read(CONF1_REG);
kimuraYUKI 0:f1ca084bfe47 16 conf1_set |= SF_16X;
kimuraYUKI 0:f1ca084bfe47 17 write(CONF1_REG ,conf1_set);
kimuraYUKI 0:f1ca084bfe47 18
kimuraYUKI 0:f1ca084bfe47 19 //PPR設定
kimuraYUKI 0:f1ca084bfe47 20 int abn_set = read(ABN);
kimuraYUKI 0:f1ca084bfe47 21 if(ppr < 0b1000)abn_set |= ppr;
kimuraYUKI 0:f1ca084bfe47 22 else abn_set |= PPR2048;
kimuraYUKI 0:f1ca084bfe47 23 write(ABN,abn_set);
kimuraYUKI 0:f1ca084bfe47 24 }
kimuraYUKI 0:f1ca084bfe47 25
kimuraYUKI 0:f1ca084bfe47 26
kimuraYUKI 0:f1ca084bfe47 27 int AS5601::getAngleAbsolute()
kimuraYUKI 0:f1ca084bfe47 28 {
kimuraYUKI 0:f1ca084bfe47 29 char cmd1=0x0E,cmd2=0x0F;
kimuraYUKI 0:f1ca084bfe47 30 int data=0;
kimuraYUKI 0:f1ca084bfe47 31
kimuraYUKI 0:f1ca084bfe47 32 data=this->read(cmd1) << 8;
kimuraYUKI 0:f1ca084bfe47 33 data=data+this->read(cmd2);
kimuraYUKI 0:f1ca084bfe47 34
kimuraYUKI 0:f1ca084bfe47 35 return data;
kimuraYUKI 0:f1ca084bfe47 36 }
kimuraYUKI 0:f1ca084bfe47 37
kimuraYUKI 0:f1ca084bfe47 38 float AS5601::getAngleDegrees()
kimuraYUKI 0:f1ca084bfe47 39 {
kimuraYUKI 0:f1ca084bfe47 40 return (((float)this->getAngleAbsolute()-offset) * 180) / 2048 ;
kimuraYUKI 0:f1ca084bfe47 41 }
kimuraYUKI 0:f1ca084bfe47 42
kimuraYUKI 0:f1ca084bfe47 43
kimuraYUKI 0:f1ca084bfe47 44 char AS5601::read(char address)
kimuraYUKI 0:f1ca084bfe47 45 {
kimuraYUKI 0:f1ca084bfe47 46 char retval;
kimuraYUKI 0:f1ca084bfe47 47 i2c.write(I2C_ADDR * 2, &address, 1);
kimuraYUKI 0:f1ca084bfe47 48 i2c.read(I2C_ADDR * 2, &retval, 1);
kimuraYUKI 0:f1ca084bfe47 49 return retval;
kimuraYUKI 0:f1ca084bfe47 50 }
kimuraYUKI 0:f1ca084bfe47 51
kimuraYUKI 0:f1ca084bfe47 52 int AS5601::write(char address, char data)
kimuraYUKI 0:f1ca084bfe47 53 {
kimuraYUKI 0:f1ca084bfe47 54 char buf[2];
kimuraYUKI 0:f1ca084bfe47 55 buf[0] = address;
kimuraYUKI 0:f1ca084bfe47 56 buf[1] = data;
kimuraYUKI 0:f1ca084bfe47 57 int val = i2c.write(I2C_ADDR * 2, buf, 2);
kimuraYUKI 0:f1ca084bfe47 58
kimuraYUKI 0:f1ca084bfe47 59 return val;
kimuraYUKI 0:f1ca084bfe47 60 }