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@0:f1ca084bfe47, 2019-11-27 (annotated)
- Committer:
- kimuraYUKI
- Date:
- Wed Nov 27 15:10:17 2019 +0000
- Revision:
- 0:f1ca084bfe47
- Child:
- 1:81d37343e965
first commit
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| kimuraYUKI | 0:f1ca084bfe47 | 1 | #include "AS5601.h" |
| kimuraYUKI | 0:f1ca084bfe47 | 2 | |
| kimuraYUKI | 0:f1ca084bfe47 | 3 | AS5601::AS5601(PinName sda, PinName scl, int ppr, int offset_val) : i2c(sda,scl) |
| kimuraYUKI | 0:f1ca084bfe47 | 4 | { |
| kimuraYUKI | 0:f1ca084bfe47 | 5 | i2c.frequency(400000); |
| kimuraYUKI | 0:f1ca084bfe47 | 6 | |
| kimuraYUKI | 0:f1ca084bfe47 | 7 | offset = offset_val; |
| kimuraYUKI | 0:f1ca084bfe47 | 8 | |
| kimuraYUKI | 0:f1ca084bfe47 | 9 | //初期化 |
| kimuraYUKI | 0:f1ca084bfe47 | 10 | //平均化数設定 |
| kimuraYUKI | 0:f1ca084bfe47 | 11 | int conf1_set = read(CONF1_REG); |
| kimuraYUKI | 0:f1ca084bfe47 | 12 | conf1_set |= SF_16X; |
| kimuraYUKI | 0:f1ca084bfe47 | 13 | write(CONF1_REG ,conf1_set); |
| kimuraYUKI | 0:f1ca084bfe47 | 14 | |
| kimuraYUKI | 0:f1ca084bfe47 | 15 | //PPR設定 |
| kimuraYUKI | 0:f1ca084bfe47 | 16 | int abn_set = read(ABN); |
| kimuraYUKI | 0:f1ca084bfe47 | 17 | if(ppr < 0b1000)abn_set |= ppr; |
| kimuraYUKI | 0:f1ca084bfe47 | 18 | else abn_set |= PPR2048; |
| kimuraYUKI | 0:f1ca084bfe47 | 19 | write(ABN,abn_set); |
| kimuraYUKI | 0:f1ca084bfe47 | 20 | } |
| kimuraYUKI | 0:f1ca084bfe47 | 21 | |
| kimuraYUKI | 0:f1ca084bfe47 | 22 | |
| kimuraYUKI | 0:f1ca084bfe47 | 23 | int AS5601::getAngleAbsolute() |
| kimuraYUKI | 0:f1ca084bfe47 | 24 | { |
| kimuraYUKI | 0:f1ca084bfe47 | 25 | char cmd1=0x0E,cmd2=0x0F; |
| kimuraYUKI | 0:f1ca084bfe47 | 26 | int data=0; |
| kimuraYUKI | 0:f1ca084bfe47 | 27 | |
| kimuraYUKI | 0:f1ca084bfe47 | 28 | data=this->read(cmd1) << 8; |
| kimuraYUKI | 0:f1ca084bfe47 | 29 | data=data+this->read(cmd2); |
| kimuraYUKI | 0:f1ca084bfe47 | 30 | |
| kimuraYUKI | 0:f1ca084bfe47 | 31 | return data; |
| kimuraYUKI | 0:f1ca084bfe47 | 32 | } |
| kimuraYUKI | 0:f1ca084bfe47 | 33 | |
| kimuraYUKI | 0:f1ca084bfe47 | 34 | float AS5601::getAngleDegrees() |
| kimuraYUKI | 0:f1ca084bfe47 | 35 | { |
| kimuraYUKI | 0:f1ca084bfe47 | 36 | return (((float)this->getAngleAbsolute()-offset) * 180) / 2048 ; |
| kimuraYUKI | 0:f1ca084bfe47 | 37 | } |
| kimuraYUKI | 0:f1ca084bfe47 | 38 | |
| kimuraYUKI | 0:f1ca084bfe47 | 39 | |
| kimuraYUKI | 0:f1ca084bfe47 | 40 | char AS5601::read(char address) |
| kimuraYUKI | 0:f1ca084bfe47 | 41 | { |
| kimuraYUKI | 0:f1ca084bfe47 | 42 | char retval; |
| kimuraYUKI | 0:f1ca084bfe47 | 43 | i2c.write(I2C_ADDR * 2, &address, 1); |
| kimuraYUKI | 0:f1ca084bfe47 | 44 | i2c.read(I2C_ADDR * 2, &retval, 1); |
| kimuraYUKI | 0:f1ca084bfe47 | 45 | return retval; |
| kimuraYUKI | 0:f1ca084bfe47 | 46 | } |
| kimuraYUKI | 0:f1ca084bfe47 | 47 | |
| kimuraYUKI | 0:f1ca084bfe47 | 48 | int AS5601::write(char address, char data) |
| kimuraYUKI | 0:f1ca084bfe47 | 49 | { |
| kimuraYUKI | 0:f1ca084bfe47 | 50 | char buf[2]; |
| kimuraYUKI | 0:f1ca084bfe47 | 51 | buf[0] = address; |
| kimuraYUKI | 0:f1ca084bfe47 | 52 | buf[1] = data; |
| kimuraYUKI | 0:f1ca084bfe47 | 53 | int val = i2c.write(I2C_ADDR * 2, buf, 2); |
| kimuraYUKI | 0:f1ca084bfe47 | 54 | |
| kimuraYUKI | 0:f1ca084bfe47 | 55 | return val; |
| kimuraYUKI | 0:f1ca084bfe47 | 56 | } |