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@5:97117a837d2c, 2020-07-21 (annotated)
- Committer:
- nestedslk
- Date:
- Tue Jul 21 12:18:14 2020 +0000
- Revision:
- 5:97117a837d2c
- Parent:
- 4:f6e22dd39313
- Child:
- 12:406f75196a12
ultrasonics working
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 | 5:97117a837d2c | 10 | |
nestedslk | 5:97117a837d2c | 11 | |
nestedslk | 5:97117a837d2c | 12 | Timer timer_enc; |
ommpy | 0:d383e2dee0f7 | 13 | AS5045::AS5045(PinName CS) : |
nestedslk | 5:97117a837d2c | 14 | _spi(NC,D12, D13), // MBED SPI init |
nestedslk | 5:97117a837d2c | 15 | _cs(CS) // Digital output pin init |
ommpy | 0:d383e2dee0f7 | 16 | { |
nestedslk | 5:97117a837d2c | 17 | // Set SPI bitwidth9 |
nestedslk | 5:97117a837d2c | 18 | _spi.format(9, 2); |
ommpy | 0:d383e2dee0f7 | 19 | |
nestedslk | 5:97117a837d2c | 20 | // Set SPI frequency |
nestedslk | 5:97117a837d2c | 21 | _spi.frequency(500000);//SPI_FREQ); |
nestedslk | 5:97117a837d2c | 22 | // Set the digital output high |
nestedslk | 5:97117a837d2c | 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 | 5:97117a837d2c | 33 | unsigned int upper, // Upper part of the tick amount integer |
nestedslk | 5:97117a837d2c | 34 | lower; // Lower part of the tick amount integer |
nestedslk | 5:97117a837d2c | 35 | // |
nestedslk | 5:97117a837d2c | 36 | // // Set the chip select pin low |
nestedslk | 5:97117a837d2c | 37 | // //timer_enc.reset(); |
nestedslk | 5:97117a837d2c | 38 | // timer_enc.start(); |
nestedslk | 5:97117a837d2c | 39 | // _cs = 0; |
nestedslk | 5:97117a837d2c | 40 | // |
nestedslk | 5:97117a837d2c | 41 | // wait_ms(1); |
nestedslk | 5:97117a837d2c | 42 | // // Read data from the encoder |
nestedslk | 5:97117a837d2c | 43 | // upper = (_spi.write(0x00)) ; |
nestedslk | 5:97117a837d2c | 44 | //// lower = (_spi.write(0x00)); |
nestedslk | 5:97117a837d2c | 45 | // |
nestedslk | 5:97117a837d2c | 46 | //// lower = lower >> 6; |
nestedslk | 5:97117a837d2c | 47 | //// upper = (upper >> 6)+lower; |
nestedslk | 5:97117a837d2c | 48 | //// upper = upper & 0xffc0; |
nestedslk | 5:97117a837d2c | 49 | //// upper = upper >> 6; |
nestedslk | 5:97117a837d2c | 50 | // |
nestedslk | 5:97117a837d2c | 51 | // // Set the chip select pin high |
nestedslk | 5:97117a837d2c | 52 | // _cs = 1; |
nestedslk | 5:97117a837d2c | 53 | // //wait_ms(5); |
nestedslk | 5:97117a837d2c | 54 | // Return full 9-bits tick amount |
nestedslk | 5:97117a837d2c | 55 | // return (upper>>5); |
nestedslk | 5:97117a837d2c | 56 | //return upper ; |
nestedslk | 5:97117a837d2c | 57 | |
nestedslk | 5:97117a837d2c | 58 | _cs = 0; |
nestedslk | 5:97117a837d2c | 59 | upper = _spi.write(0x00); |
nestedslk | 5:97117a837d2c | 60 | lower = _spi.write(0x00); |
nestedslk | 5:97117a837d2c | 61 | _cs = 1; |
nestedslk | 5:97117a837d2c | 62 | |
nestedslk | 5:97117a837d2c | 63 | |
nestedslk | 5:97117a837d2c | 64 | //upper &=~ 0xF0;//mask out the first 4 bits |
nestedslk | 5:97117a837d2c | 65 | // EncoderByteData = upper << 8; //shift MSB to correct EncoderByteData in EncoderByteData message |
nestedslk | 5:97117a837d2c | 66 | // EncoderByteData += lower; // add LSB to EncoderByteData message to complete message |
nestedslk | 5:97117a837d2c | 67 | return ((upper << 3)+(lower >> 6)); |
nestedslk | 5:97117a837d2c | 68 | //return EncoderByteData; |
ommpy | 0:d383e2dee0f7 | 69 | } |
ommpy | 0:d383e2dee0f7 | 70 | |
ommpy | 0:d383e2dee0f7 | 71 | /** Convert position of the encoder to degrees |
ommpy | 0:d383e2dee0f7 | 72 | * |
ommpy | 0:d383e2dee0f7 | 73 | * @note |
ommpy | 0:d383e2dee0f7 | 74 | * Tick amount is recieved internally |
ommpy | 0:d383e2dee0f7 | 75 | */ |
ommpy | 0:d383e2dee0f7 | 76 | float AS5045::getRotation() |
ommpy | 0:d383e2dee0f7 | 77 | { |
nestedslk | 5:97117a837d2c | 78 | // Get data from the encoder |
nestedslk | 5:97117a837d2c | 79 | float value = (float)getPosition(); |
ommpy | 0:d383e2dee0f7 | 80 | |
nestedslk | 5:97117a837d2c | 81 | // Return degrees of rotation of the encoder |
nestedslk | 5:97117a837d2c | 82 | return value * RESOLUTION; |
ommpy | 0:d383e2dee0f7 | 83 | } |