MotorControlModuleSDFM_TMS3.../Projects/EFC_Communication/UMLibrary/driver/chipset/AD5421.hh
2024-06-07 11:12:56 +03:00

188 lines
4.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* AD5421.h
*
* Created on: 7 авг. 2019 г.
* Author: user
*/
#ifndef SOURCE_DRIVER_CHIPSET_AD5421_H_
#define SOURCE_DRIVER_CHIPSET_AD5421_H_
#include "PackagerAD5421.hh"
#include "../SerialPortAdapter.hpp"
#include "../../systemic/RegisterEncoder.hpp"
namespace driver { namespace chipset { namespace AD5421 {
typedef PackagerAD5421 Packager;
typedef uint16_t Latency;
typedef SerialPortAdapter<Packager::Frame, Latency, true> SerialPortRegister;
//Адреса регистров и команды.
struct ControlRegistersPairedAcronims {
enum Acronims {
DAC = 0x01, //Регистр DAC.
CONTROL = 0x02, //Управляющий регистр.
OFFSET_ADJ = 0x03, //Регистр управления смещением.
GAIN_ADJ = 0x04, //Регистр управления коэффициента усиления.
LOAD_DAC = 0x05, //Команда установить ток на выходе в соответствии с содержимым регистра DAC.
ALARM = 0x06, //Команда установить значение тока ALARM VALUE.
RESET = 0x07, //Команда сброса микросхемы.
ADC_START = 0x08, //Команда запустить измерение Vloop/температуры.
READ_FAULT = 0x05 //Регистра FAULT, только для чтения. Чтение регистра сбрасывает отказ по SPI.
};
};
//Возможные периоды срабатывания сторожевого таймера.
enum WdTimeouts {
wd_50_ms,
wd_100_ms,
wd_500_ms,
wd_1_sec,
wd_2_sec,
wd_3_sec,
wd_4_sec,
wd_5_sec
};
enum WdControl {
wd_enable = 0,
wd_disable
};
enum FaultReadback {
readback_enable = 0,
readback_disable,
};
enum AlarmOnSpi {
spi_alarm_enable = 0,
spi_alarm_disable,
};
enum LoopCurrent {
loop_normal = 0,
loop_minimal,
};
enum AdcInput {
adc_vloop = 0,
adc_temp,
};
enum AdcPower {
adc_disable = 0,
adc_enable,
};
enum RefPower {
ref_power_on = 0,
ref_power_off,
};
enum VloopFault {
vloop_fault_disable = 0,
vloop_fault_enable,
};
union ControlReg {
uint16_t all;
struct {
uint16_t : 5;
VloopFault vloop_fault : 1;
RefPower ref_power : 1;
AdcPower adc_power : 1;
AdcInput adc_input : 1;
LoopCurrent loop_current : 1;
AlarmOnSpi alarm_on_spi : 1;
FaultReadback fault_readback : 1;
WdControl wd_control : 1;
WdTimeouts wd_timeout : 3;
} bit;
ControlReg() : all(0) {}
};
enum Vloop12 {
vloop12_ok = 0,
vloop12_error
};
enum Vloop6 {
vloop6_ok = 0,
vloop6_error
};
enum Temp100 {
temp100_ok = 0,
temp100_error
};
enum Temp140 {
temp140_ok = 0,
temp140_error
};
enum IloopUnder {
i_loop_under_ok = 0,
i_loop_under_error
};
enum IloopOver {
i_loop_over_ok = 0,
i_loop_over_error
};
enum Pec {
pec_ok = 0,
pec_error
};
enum SpiConnection {
connection_ok = 0,
connection_loss
};
union FaultReg {
uint16_t all;
struct {
uint16_t adc_value : 8;
Vloop12 vloop12 : 1;
Vloop6 vloop6 : 1;
Temp100 temp100 : 1;
Temp140 temp140 : 1;
IloopUnder i_loop_under : 1;
IloopOver i_loop_over : 1;
Pec pec : 1;
SpiConnection spi_connection : 1;
} bit;
};
//! Структура настраеваемых параметров микросхемы AD5421
struct Parameters {
typedef uint16_t OptionRegister;
static const unsigned int allowed_options = 3;
enum AllowedRegisters {
CONTROL_REGISTER,
OFFSET_ADJ_REGISTER,
GAIN_ADJ_REGISTER,
};
OptionRegister option[allowed_options];
};
} }}
#endif /* SOURCE_DRIVER_CHIPSET_AD5421_H_ */