STAGING REBORN NEW ARDUINO CORE ADD: simple FOC, AS5040 driver, commands, work with gui
This commit is contained in:
parent
bd7f049b75
commit
1d998ea45b
42 changed files with 265 additions and 5509 deletions
36
firmware/lib/AS5040/AS5040.cpp
Normal file
36
firmware/lib/AS5040/AS5040.cpp
Normal file
|
@ -0,0 +1,36 @@
|
|||
#include "AS5040.h"
|
||||
|
||||
AS5040Sensor::AS5040Sensor(uint16_t cs, uint16_t mosi, uint16_t miso, uint16_t sck) {
|
||||
cs_ = cs;
|
||||
mosi_ = mosi;
|
||||
miso_ = miso;
|
||||
sck_ = sck;
|
||||
}
|
||||
void AS5040Sensor::init(SPIClass *_spi) {
|
||||
spi = _spi;
|
||||
// 1MHz clock (AMS should be able to accept up to 10MHz)
|
||||
settings = SPISettings(1000000, MSBFIRST, SPI_MODE0);
|
||||
//setup pins
|
||||
pinMode(cs_, OUTPUT);
|
||||
pinMode(miso_, INPUT);
|
||||
pinMode(mosi_, OUTPUT);
|
||||
pinMode(sck_, OUTPUT);
|
||||
spi->setMISO(miso_);
|
||||
spi->setMOSI(mosi_);
|
||||
spi->setSCLK(sck_);
|
||||
spi->begin();
|
||||
this->Sensor::init(); // call base class init
|
||||
}
|
||||
|
||||
float AS5040Sensor::getSensorAngle() {
|
||||
//SPI - begin transaction
|
||||
spi->beginTransaction(settings);
|
||||
//Send the command
|
||||
digitalWrite(cs_, LOW);
|
||||
uint16_t data = spi->transfer16(0x3FFF);
|
||||
digitalWrite(cs_,HIGH);
|
||||
//SPI - end transaction
|
||||
spi->endTransaction();
|
||||
data = (data) >> 5;
|
||||
return (float)data * _2PI / cpr;
|
||||
}
|
26
firmware/lib/AS5040/AS5040.h
Normal file
26
firmware/lib/AS5040/AS5040.h
Normal file
|
@ -0,0 +1,26 @@
|
|||
#pragma once
|
||||
|
||||
#include "SimpleFOC.h"
|
||||
|
||||
|
||||
class AS5040Sensor : public Sensor {
|
||||
public:
|
||||
|
||||
AS5040Sensor(uint16_t cs, uint16_t mosi, uint16_t miso, uint16_t sck);
|
||||
|
||||
/** sensor initialise pins */
|
||||
void init(SPIClass *_spi = &SPI);
|
||||
|
||||
// implementation of abstract functions of the Sensor class
|
||||
/** get current angle (rad) */
|
||||
float getSensorAngle() override;
|
||||
|
||||
private:
|
||||
uint16_t cs_ = 0;
|
||||
uint16_t mosi_ = 0;
|
||||
uint16_t miso_ = 0;
|
||||
uint16_t sck_ = 0;
|
||||
float cpr = 1024;
|
||||
SPISettings settings;
|
||||
SPIClass *spi;
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue