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.
Dependencies: mbed Watchdog stm32-sensor-base2
AS5045/AS5045.cpp@4:f6e22dd39313, 2020-07-18 (annotated)
- Committer:
- nestedslk
- Date:
- Sat Jul 18 14:59:04 2020 +0000
- Revision:
- 4:f6e22dd39313
- Parent:
- 1:3c6771928b35
- Child:
- 5:97117a837d2c
testing version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ommpy | 0:d383e2dee0f7 | 1 | #include "AS5045.h" |
nestedslk | 4:f6e22dd39313 | 2 | //we have 5040 |
ommpy | 0:d383e2dee0f7 | 3 | /** Constructor |
ommpy | 0:d383e2dee0f7 | 4 | * |
ommpy | 0:d383e2dee0f7 | 5 | * @param CS Pin number for the digital output |
ommpy | 0:d383e2dee0f7 | 6 | * |
ommpy | 0:d383e2dee0f7 | 7 | * @note |
ommpy | 0:d383e2dee0f7 | 8 | * PinName CS is the digital output pin number |
ommpy | 0:d383e2dee0f7 | 9 | */ |
nestedslk | 4:f6e22dd39313 | 10 | |
nestedslk | 4:f6e22dd39313 | 11 | |
nestedslk | 4:f6e22dd39313 | 12 | Timer timer_enc; |
ommpy | 0:d383e2dee0f7 | 13 | AS5045::AS5045(PinName CS) : |
ommpy | 0:d383e2dee0f7 | 14 | _spi(NC,D12, D13), // MBED SPI init |
ommpy | 0:d383e2dee0f7 | 15 | _cs(CS) // Digital output pin init |
ommpy | 0:d383e2dee0f7 | 16 | { |
ommpy | 0:d383e2dee0f7 | 17 | // Set SPI bitwidth |
nestedslk | 4:f6e22dd39313 | 18 | _spi.format(9, 2); |
ommpy | 0:d383e2dee0f7 | 19 | |
ommpy | 0:d383e2dee0f7 | 20 | // Set SPI frequency |
nestedslk | 4:f6e22dd39313 | 21 | _spi.frequency(50000);//SPI_FREQ); |
ommpy | 0:d383e2dee0f7 | 22 | // Set the digital output high |
ommpy | 0:d383e2dee0f7 | 23 | _cs = 1; |
ommpy | 0:d383e2dee0f7 | 24 | } |
ommpy | 0:d383e2dee0f7 | 25 | |
ommpy | 0:d383e2dee0f7 | 26 | /** Read tick amount from encoder (position) |
ommpy | 0:d383e2dee0f7 | 27 | * |
ommpy | 0:d383e2dee0f7 | 28 | * @note |
ommpy | 0:d383e2dee0f7 | 29 | * Tick amount is recieved through SPI |
ommpy | 0:d383e2dee0f7 | 30 | */ |
ommpy | 0:d383e2dee0f7 | 31 | int AS5045::getPosition() |
ommpy | 0:d383e2dee0f7 | 32 | { |
nestedslk | 4:f6e22dd39313 | 33 | unsigned int upper, // Upper part of the tick amount integer |
nestedslk | 4:f6e22dd39313 | 34 | lower; // Lower part of the tick amount integer |
ommpy | 0:d383e2dee0f7 | 35 | |
ommpy | 0:d383e2dee0f7 | 36 | // Set the chip select pin low |
ommpy | 0:d383e2dee0f7 | 37 | _cs = 0; |
nestedslk | 4:f6e22dd39313 | 38 | timer_enc.reset(); |
nestedslk | 4:f6e22dd39313 | 39 | timer_enc.start(); |
nestedslk | 4:f6e22dd39313 | 40 | wait_ms(5); |
ommpy | 0:d383e2dee0f7 | 41 | // Read data from the encoder |
nestedslk | 4:f6e22dd39313 | 42 | upper = (_spi.write(0x00)) ; |
nestedslk | 4:f6e22dd39313 | 43 | lower = (_spi.write(0x00)); |
nestedslk | 4:f6e22dd39313 | 44 | |
nestedslk | 4:f6e22dd39313 | 45 | // lower = lower >> 6; |
nestedslk | 4:f6e22dd39313 | 46 | // upper = (upper >> 6)+lower; |
nestedslk | 4:f6e22dd39313 | 47 | // upper = upper & 0xffc0; |
nestedslk | 4:f6e22dd39313 | 48 | upper = upper >> 6; |
ommpy | 0:d383e2dee0f7 | 49 | |
ommpy | 0:d383e2dee0f7 | 50 | // Set the chip select pin high |
ommpy | 0:d383e2dee0f7 | 51 | _cs = 1; |
nestedslk | 4:f6e22dd39313 | 52 | wait_ms(5); |
ommpy | 0:d383e2dee0f7 | 53 | // Return full 9-bits tick amount |
nestedslk | 4:f6e22dd39313 | 54 | return upper; |
nestedslk | 4:f6e22dd39313 | 55 | //return upper ; |
ommpy | 0:d383e2dee0f7 | 56 | } |
ommpy | 0:d383e2dee0f7 | 57 | |
ommpy | 0:d383e2dee0f7 | 58 | /** Convert position of the encoder to degrees |
ommpy | 0:d383e2dee0f7 | 59 | * |
ommpy | 0:d383e2dee0f7 | 60 | * @note |
ommpy | 0:d383e2dee0f7 | 61 | * Tick amount is recieved internally |
ommpy | 0:d383e2dee0f7 | 62 | */ |
ommpy | 0:d383e2dee0f7 | 63 | float AS5045::getRotation() |
ommpy | 0:d383e2dee0f7 | 64 | { |
ommpy | 0:d383e2dee0f7 | 65 | // Get data from the encoder |
ommpy | 1:3c6771928b35 | 66 | float value = (float)getPosition(); |
ommpy | 0:d383e2dee0f7 | 67 | |
ommpy | 0:d383e2dee0f7 | 68 | // Return degrees of rotation of the encoder |
ommpy | 0:d383e2dee0f7 | 69 | return value * RESOLUTION; |
ommpy | 0:d383e2dee0f7 | 70 | } |