Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
AS5601.cpp@1:81d37343e965, 2019-11-27 (annotated)
- Committer:
- kimuraYUKI
- Date:
- Wed Nov 27 16:42:34 2019 +0000
- Revision:
- 1:81d37343e965
- Parent:
- 0:f1ca084bfe47
- Child:
- 2:35dd35dc4a4a
add void init()
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| kimuraYUKI | 1:81d37343e965 | 1 | #include "mbed.h" |
| kimuraYUKI | 0:f1ca084bfe47 | 2 | #include "AS5601.h" |
| kimuraYUKI | 0:f1ca084bfe47 | 3 | |
| kimuraYUKI | 0:f1ca084bfe47 | 4 | AS5601::AS5601(PinName sda, PinName scl, int ppr, 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 | 1:81d37343e965 | 9 | } |
| kimuraYUKI | 1:81d37343e965 | 10 | |
| kimuraYUKI | 1:81d37343e965 | 11 | void init(){ |
| kimuraYUKI | 0:f1ca084bfe47 | 12 | //初期化 |
| kimuraYUKI | 0:f1ca084bfe47 | 13 | //平均化数設定 |
| kimuraYUKI | 0:f1ca084bfe47 | 14 | int conf1_set = read(CONF1_REG); |
| kimuraYUKI | 0:f1ca084bfe47 | 15 | conf1_set |= SF_16X; |
| kimuraYUKI | 0:f1ca084bfe47 | 16 | write(CONF1_REG ,conf1_set); |
| kimuraYUKI | 0:f1ca084bfe47 | 17 | |
| kimuraYUKI | 0:f1ca084bfe47 | 18 | //PPR設定 |
| kimuraYUKI | 0:f1ca084bfe47 | 19 | int abn_set = read(ABN); |
| kimuraYUKI | 0:f1ca084bfe47 | 20 | if(ppr < 0b1000)abn_set |= ppr; |
| kimuraYUKI | 0:f1ca084bfe47 | 21 | else abn_set |= PPR2048; |
| kimuraYUKI | 0:f1ca084bfe47 | 22 | write(ABN,abn_set); |
| kimuraYUKI | 0:f1ca084bfe47 | 23 | } |
| kimuraYUKI | 0:f1ca084bfe47 | 24 | |
| kimuraYUKI | 0:f1ca084bfe47 | 25 | |
| kimuraYUKI | 0:f1ca084bfe47 | 26 | int AS5601::getAngleAbsolute() |
| kimuraYUKI | 0:f1ca084bfe47 | 27 | { |
| kimuraYUKI | 0:f1ca084bfe47 | 28 | char cmd1=0x0E,cmd2=0x0F; |
| kimuraYUKI | 0:f1ca084bfe47 | 29 | int data=0; |
| kimuraYUKI | 0:f1ca084bfe47 | 30 | |
| kimuraYUKI | 0:f1ca084bfe47 | 31 | data=this->read(cmd1) << 8; |
| kimuraYUKI | 0:f1ca084bfe47 | 32 | data=data+this->read(cmd2); |
| kimuraYUKI | 0:f1ca084bfe47 | 33 | |
| kimuraYUKI | 0:f1ca084bfe47 | 34 | return data; |
| kimuraYUKI | 0:f1ca084bfe47 | 35 | } |
| kimuraYUKI | 0:f1ca084bfe47 | 36 | |
| kimuraYUKI | 0:f1ca084bfe47 | 37 | float AS5601::getAngleDegrees() |
| kimuraYUKI | 0:f1ca084bfe47 | 38 | { |
| kimuraYUKI | 0:f1ca084bfe47 | 39 | return (((float)this->getAngleAbsolute()-offset) * 180) / 2048 ; |
| kimuraYUKI | 0:f1ca084bfe47 | 40 | } |
| kimuraYUKI | 0:f1ca084bfe47 | 41 | |
| kimuraYUKI | 0:f1ca084bfe47 | 42 | |
| kimuraYUKI | 0:f1ca084bfe47 | 43 | char AS5601::read(char address) |
| kimuraYUKI | 0:f1ca084bfe47 | 44 | { |
| kimuraYUKI | 0:f1ca084bfe47 | 45 | char retval; |
| kimuraYUKI | 0:f1ca084bfe47 | 46 | i2c.write(I2C_ADDR * 2, &address, 1); |
| kimuraYUKI | 0:f1ca084bfe47 | 47 | i2c.read(I2C_ADDR * 2, &retval, 1); |
| kimuraYUKI | 0:f1ca084bfe47 | 48 | return retval; |
| kimuraYUKI | 0:f1ca084bfe47 | 49 | } |
| kimuraYUKI | 0:f1ca084bfe47 | 50 | |
| kimuraYUKI | 0:f1ca084bfe47 | 51 | int AS5601::write(char address, char data) |
| kimuraYUKI | 0:f1ca084bfe47 | 52 | { |
| kimuraYUKI | 0:f1ca084bfe47 | 53 | char buf[2]; |
| kimuraYUKI | 0:f1ca084bfe47 | 54 | buf[0] = address; |
| kimuraYUKI | 0:f1ca084bfe47 | 55 | buf[1] = data; |
| kimuraYUKI | 0:f1ca084bfe47 | 56 | int val = i2c.write(I2C_ADDR * 2, buf, 2); |
| kimuraYUKI | 0:f1ca084bfe47 | 57 | |
| kimuraYUKI | 0:f1ca084bfe47 | 58 | return val; |
| kimuraYUKI | 0:f1ca084bfe47 | 59 | } |