servo/firmware/lib/AS5040/AS5040.cpp
vanyabeat 1d998ea45b ADD: SimpleFOC native library and port arduino core to project #15 #7
STAGING

REBORN NEW ARDUINO CORE

ADD: simple FOC, AS5040 driver, commands, work with gui
2024-02-22 16:38:48 +00:00

36 lines
966 B
C++

#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;
}