adc
ADE7912.h@2:f480200c8600, 2020-10-27 (annotated)
- Committer:
- yuliyasm
- Date:
- Tue Oct 27 13:23:41 2020 +0000
- Revision:
- 2:f480200c8600
- Parent:
- 1:5796bdddf29c
- Child:
- 3:1d62b3be52e8
compile
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yuliyasm | 0:e5d06036dd60 | 1 | #ifndef ADE7912 |
yuliyasm | 0:e5d06036dd60 | 2 | #define ADE7912 |
yuliyasm | 0:e5d06036dd60 | 3 | |
yuliyasm | 0:e5d06036dd60 | 4 | #include "stm32h7xx_hal.h" |
yuliyasm | 0:e5d06036dd60 | 5 | #include "stdlib.h" |
yuliyasm | 0:e5d06036dd60 | 6 | |
yuliyasm | 2:f480200c8600 | 7 | |
yuliyasm | 0:e5d06036dd60 | 8 | // ADE7912 registers addresses |
yuliyasm | 0:e5d06036dd60 | 9 | #define ADE7912_IWV_REG_ADDRESS 0x00 |
yuliyasm | 0:e5d06036dd60 | 10 | #define ADE7912_V1WV_REG_ADDRESS 0x08 |
yuliyasm | 0:e5d06036dd60 | 11 | #define ADE7912_V2WV_REG_ADDRESS 0x10 |
yuliyasm | 0:e5d06036dd60 | 12 | #define ADE7912_ADC_CRC_REG_ADDRESS 0x20 |
yuliyasm | 0:e5d06036dd60 | 13 | #define ADE7912_CTRL_CRC_REG_ADDRESS 0x28 |
yuliyasm | 0:e5d06036dd60 | 14 | #define ADE7912_CNT_SNAPSHOT_REG_ADDRESS 0x38 |
yuliyasm | 0:e5d06036dd60 | 15 | #define ADE7912_CONFIG_REG_ADDRESS 0x40 |
yuliyasm | 0:e5d06036dd60 | 16 | #define ADE7912_STATUS0_REG_ADDRESS 0x48 |
yuliyasm | 0:e5d06036dd60 | 17 | #define ADE7912_LOCK_REG_ADDRESS 0x50 |
yuliyasm | 0:e5d06036dd60 | 18 | #define ADE7912_SYNC_SNAP_REG_ADDRESS 0x58 |
yuliyasm | 0:e5d06036dd60 | 19 | #define ADE7912_COUNTER0_REG_ADDRESS 0x60 |
yuliyasm | 0:e5d06036dd60 | 20 | #define ADE7912_COUNTER1_REG_ADDRESS 0x68 |
yuliyasm | 0:e5d06036dd60 | 21 | #define ADE7912_EMI_CTRL_REG_ADDRESS 0x70 |
yuliyasm | 0:e5d06036dd60 | 22 | #define ADE7912_STATUS1_REG_ADDRESS 0x78 |
yuliyasm | 0:e5d06036dd60 | 23 | #define ADE7912_TEMPOS_REG_ADDRESS 0xC0 |
yuliyasm | 0:e5d06036dd60 | 24 | |
yuliyasm | 0:e5d06036dd60 | 25 | // ADE7912 bits of CONFIG register |
yuliyasm | 0:e5d06036dd60 | 26 | #define ADE7912_CONFIG_BIT_CLKOUTENB 1 << 0 |
yuliyasm | 0:e5d06036dd60 | 27 | #define ADE7912_CONFIG_BIT_PWRDWNENB 1 << 1 |
yuliyasm | 0:e5d06036dd60 | 28 | #define ADE7912_CONFIG_BIT_TEMPENB 1 << 3 |
yuliyasm | 0:e5d06036dd60 | 29 | #define ADE7912_CONFIG_ADC_FREQ_1K 0x0 << 4 |
yuliyasm | 0:e5d06036dd60 | 30 | #define ADE7912_CONFIG_ADC_FREQ_2K 0x1 << 4 |
yuliyasm | 0:e5d06036dd60 | 31 | #define ADE7912_CONFIG_ADC_FREQ_4K 0x2 << 4 |
yuliyasm | 0:e5d06036dd60 | 32 | #define ADE7912_CONFIG_ADC_FREQ_8K 0x3 << 4 |
yuliyasm | 0:e5d06036dd60 | 33 | #define ADE7912_CONFIG_ADC_FREQ ADE7912_CONFIG_ADC_FREQ_8K |
yuliyasm | 0:e5d06036dd60 | 34 | #define ADE7912_CONFIG_BIT_SWRST 1 << 6 |
yuliyasm | 0:e5d06036dd60 | 35 | #define ADE7912_CONFIG_BIT_BW 1 << 6 |
yuliyasm | 0:e5d06036dd60 | 36 | |
yuliyasm | 0:e5d06036dd60 | 37 | // ADE7912 bits of STATUS0 register |
yuliyasm | 0:e5d06036dd60 | 38 | #define ADE7912_STATUS0_BIT_RESET_ON 1 << 0 |
yuliyasm | 0:e5d06036dd60 | 39 | #define ADE7912_STATUS0_BIT_CRC_STAT 1 << 1 |
yuliyasm | 0:e5d06036dd60 | 40 | #define ADE7912_STATUS0_BIT_IC_PROT 1 << 2 |
yuliyasm | 0:e5d06036dd60 | 41 | |
yuliyasm | 0:e5d06036dd60 | 42 | // ADE7912 bits of STATUS1 register |
yuliyasm | 0:e5d06036dd60 | 43 | #define ADE7912_STATUS1_BIT_VERSION 0x7 << 0 |
yuliyasm | 0:e5d06036dd60 | 44 | #define ADE7912_STATUS1_BIT_ADC_NA 1 << 3 |
yuliyasm | 0:e5d06036dd60 | 45 | |
yuliyasm | 0:e5d06036dd60 | 46 | // ADE7912 transmite modes |
yuliyasm | 0:e5d06036dd60 | 47 | #define ADE7912_READ_MODE 0x04 |
yuliyasm | 0:e5d06036dd60 | 48 | #define ADE7912_BRUSH_READ_MODE 0x04 |
yuliyasm | 0:e5d06036dd60 | 49 | #define ADE7912_WRITE_MODE 0x00 |
yuliyasm | 0:e5d06036dd60 | 50 | |
yuliyasm | 0:e5d06036dd60 | 51 | #define ADE7912_DALAY_TIME 2 |
yuliyasm | 0:e5d06036dd60 | 52 | #define ADE7912_WAITING_TIME 5 * ADE7912_DALAY_TIME |
yuliyasm | 0:e5d06036dd60 | 53 | |
yuliyasm | 1:5796bdddf29c | 54 | #define ADE7912_TEMPGAIN_WITH_3K3_BW 8.72101e-5f |
yuliyasm | 1:5796bdddf29c | 55 | #define ADE7912_TEMPGAIN_WITH_2K_BW 8.21015e-5f |
yuliyasm | 1:5796bdddf29c | 56 | #define ADE7912_CONST_TEMPOS 306.47f |
yuliyasm | 1:5796bdddf29c | 57 | |
yuliyasm | 1:5796bdddf29c | 58 | #define ADE7912_IWV_TRANSLATE_COEF 5.87344e-9f |
yuliyasm | 1:5796bdddf29c | 59 | #define ADE7912_VWV_TRANSLATE_COEF 9.39369e-8f |
yuliyasm | 1:5796bdddf29c | 60 | |
yuliyasm | 1:5796bdddf29c | 61 | struct ADE7912_BrushRead_Data { |
yuliyasm | 1:5796bdddf29c | 62 | int32_t IWV; |
yuliyasm | 1:5796bdddf29c | 63 | int32_t V1WV; |
yuliyasm | 1:5796bdddf29c | 64 | int32_t V2WV; |
yuliyasm | 1:5796bdddf29c | 65 | uint16_t ADC_CRC; |
yuliyasm | 1:5796bdddf29c | 66 | uint8_t STATUS0; |
yuliyasm | 1:5796bdddf29c | 67 | uint16_t CNT_SNAPSHOT; |
yuliyasm | 0:e5d06036dd60 | 68 | }; |
yuliyasm | 0:e5d06036dd60 | 69 | |
yuliyasm | 1:5796bdddf29c | 70 | struct ADE7912_Inst { |
yuliyasm | 1:5796bdddf29c | 71 | SPI_HandleTypeDef *spi; |
yuliyasm | 1:5796bdddf29c | 72 | uint8_t phasesEnable[4]; |
yuliyasm | 1:5796bdddf29c | 73 | GPIO_TypeDef *CS_ports[4]; |
yuliyasm | 1:5796bdddf29c | 74 | uint16_t CS_pins[4]; |
yuliyasm | 1:5796bdddf29c | 75 | struct ADE7912_BrushRead_Data *phasesData[4]; |
yuliyasm | 1:5796bdddf29c | 76 | uint8_t version[4]; |
yuliyasm | 1:5796bdddf29c | 77 | float tempos[4]; |
yuliyasm | 1:5796bdddf29c | 78 | float tempGain[4]; |
yuliyasm | 1:5796bdddf29c | 79 | GPIO_TypeDef *DReadyPort; |
yuliyasm | 1:5796bdddf29c | 80 | uint16_t DReadyPin; |
yuliyasm | 1:5796bdddf29c | 81 | IRQn_Type EXTIinterrupt; |
yuliyasm | 0:e5d06036dd60 | 82 | }; |
yuliyasm | 0:e5d06036dd60 | 83 | |
yuliyasm | 0:e5d06036dd60 | 84 | |
yuliyasm | 0:e5d06036dd60 | 85 | |
yuliyasm | 1:5796bdddf29c | 86 | enum ADE7912_Phases { |
yuliyasm | 1:5796bdddf29c | 87 | PHASE_A = 0, |
yuliyasm | 1:5796bdddf29c | 88 | PHASE_B, |
yuliyasm | 1:5796bdddf29c | 89 | PHASE_C, |
yuliyasm | 1:5796bdddf29c | 90 | COM |
yuliyasm | 0:e5d06036dd60 | 91 | }; |
yuliyasm | 0:e5d06036dd60 | 92 | |
yuliyasm | 1:5796bdddf29c | 93 | enum ADE7912_DataUpdateFreq { |
yuliyasm | 1:5796bdddf29c | 94 | F_8KHZ, |
yuliyasm | 1:5796bdddf29c | 95 | F_4KHZ, |
yuliyasm | 1:5796bdddf29c | 96 | F_2KHZ, |
yuliyasm | 1:5796bdddf29c | 97 | F_1KHZ |
yuliyasm | 0:e5d06036dd60 | 98 | }; |
yuliyasm | 0:e5d06036dd60 | 99 | |
yuliyasm | 1:5796bdddf29c | 100 | enum ADE7912_Bandwidths { |
yuliyasm | 1:5796bdddf29c | 101 | BW_3K3HZ, |
yuliyasm | 1:5796bdddf29c | 102 | BW_2KHZ |
yuliyasm | 0:e5d06036dd60 | 103 | }; |
yuliyasm | 0:e5d06036dd60 | 104 | |
yuliyasm | 1:5796bdddf29c | 105 | enum ADE7912_CLKOUT_Functionality { |
yuliyasm | 1:5796bdddf29c | 106 | CLKOUT, |
yuliyasm | 1:5796bdddf29c | 107 | DREADY |
yuliyasm | 0:e5d06036dd60 | 108 | }; |
yuliyasm | 0:e5d06036dd60 | 109 | |
yuliyasm | 1:5796bdddf29c | 110 | struct ADE7912_Phase_Settings { |
yuliyasm | 1:5796bdddf29c | 111 | GPIO_TypeDef *CS_port; |
yuliyasm | 1:5796bdddf29c | 112 | uint16_t CS_pin; |
yuliyasm | 1:5796bdddf29c | 113 | enum ADE7912_DataUpdateFreq freq; |
yuliyasm | 1:5796bdddf29c | 114 | enum ADE7912_Bandwidths bandwidth; |
yuliyasm | 1:5796bdddf29c | 115 | enum ADE7912_CLKOUT_Functionality clkoutFunc; |
yuliyasm | 0:e5d06036dd60 | 116 | }; |
yuliyasm | 0:e5d06036dd60 | 117 | |
yuliyasm | 1:5796bdddf29c | 118 | |
yuliyasm | 0:e5d06036dd60 | 119 | |
yuliyasm | 0:e5d06036dd60 | 120 | void ADE7912_UpdateData(struct ADE7912_Inst *ade); |
yuliyasm | 0:e5d06036dd60 | 121 | |
yuliyasm | 0:e5d06036dd60 | 122 | struct ADE7912_Inst* New_ADE7912(SPI_HandleTypeDef *spi); |
yuliyasm | 1:5796bdddf29c | 123 | |
yuliyasm | 0:e5d06036dd60 | 124 | void ADE7912_PhaseInit(struct ADE7912_Inst *ade, struct ADE7912_Phase_Settings *settings, enum ADE7912_Phases phase); |
yuliyasm | 0:e5d06036dd60 | 125 | void ADE7912_EnablePhase(struct ADE7912_Inst *ade, enum ADE7912_Phases phase); |
yuliyasm | 0:e5d06036dd60 | 126 | void ADE7912_DisablePhase(struct ADE7912_Inst *ade, enum ADE7912_Phases phase); |
yuliyasm | 0:e5d06036dd60 | 127 | void ADE7912_ResetPhase(struct ADE7912_Inst *ade, enum ADE7912_Phases phase); |
yuliyasm | 0:e5d06036dd60 | 128 | |
yuliyasm | 1:5796bdddf29c | 129 | void ADE7912_SetDataUpdateFreq(struct ADE7912_Inst *ade, enum ADE7912_Phases phase, enum ADE7912_DataUpdateFreq freq); |
yuliyasm | 2:f480200c8600 | 130 | void ADE7912_SetPwrConverterEnabled(struct ADE7912_Inst *ade, enum ADE7912_Phases phase, bool enabled); |
yuliyasm | 2:f480200c8600 | 131 | void ADE7912_SetTempEnabled(struct ADE7912_Inst *ade, enum ADE7912_Phases phase, bool enabled); |
yuliyasm | 0:e5d06036dd60 | 132 | void ADE7912_SetBandwidth(struct ADE7912_Inst *ade, enum ADE7912_Phases phase, enum ADE7912_Bandwidths bandwidth); |
yuliyasm | 0:e5d06036dd60 | 133 | void ADE7912_SetCLKOUTFunctionality(struct ADE7912_Inst *ade, enum ADE7912_Phases phase, enum ADE7912_CLKOUT_Functionality functionality); |
yuliyasm | 0:e5d06036dd60 | 134 | |
yuliyasm | 0:e5d06036dd60 | 135 | void ADE7912_LockConfigurationRegisters(struct ADE7912_Inst *ade, enum ADE7912_Phases phase); |
yuliyasm | 0:e5d06036dd60 | 136 | void ADE7912_UnlockConfigurationRegisters(struct ADE7912_Inst *ade, enum ADE7912_Phases phase); |
yuliyasm | 0:e5d06036dd60 | 137 | |
yuliyasm | 1:5796bdddf29c | 138 | uint8_t ADE7912_GetADCVersion(struct ADE7912_Inst *ade, enum ADE7912_Phases phase); |
yuliyasm | 1:5796bdddf29c | 139 | float ADE7912_GetVoltage(struct ADE7912_Inst *ade, enum ADE7912_Phases phase); |
yuliyasm | 1:5796bdddf29c | 140 | float ADE7912_GetCurrent(struct ADE7912_Inst *ade, enum ADE7912_Phases phase); |
yuliyasm | 1:5796bdddf29c | 141 | float ADE7912_GetTemp(struct ADE7912_Inst *ade, enum ADE7912_Phases phase); |
yuliyasm | 1:5796bdddf29c | 142 | |
yuliyasm | 2:f480200c8600 | 143 | void ADE7912_WriteToReg(struct ADE7912_Inst *ade, enum ADE7912_Phases phase, uint8_t addr, uint8_t *buf, uint8_t length); |
yuliyasm | 2:f480200c8600 | 144 | void ADE7912_ReadFromReg(struct ADE7912_Inst *ade, enum ADE7912_Phases phase, uint8_t addr, uint8_t *buf, uint8_t length); |
yuliyasm | 2:f480200c8600 | 145 | uint8_t ADE7912_ReadADCVersionFromReg(struct ADE7912_Inst *ade, enum ADE7912_Phases phase); |
yuliyasm | 2:f480200c8600 | 146 | uint8_t ADE7912_ReadTemposFromReg(struct ADE7912_Inst *ade, enum ADE7912_Phases phase); |
yuliyasm | 2:f480200c8600 | 147 | //void ADE7912_InitEXTIForDReady(struct ADE7912_Inst *ade, GPIO_TypeDef *port, uint16_t pin); |
yuliyasm | 2:f480200c8600 | 148 | |
yuliyasm | 0:e5d06036dd60 | 149 | #endif |