| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- /**
- @copyright None
- @file ADC.c
- @author Comment Vivre
- @date 2025-11-03
- @brief None
- */
- #include <MyProject.h>
- /**
- @function VREF_Config_Init
- @brief 基准电压配置
- @date 2025-11-01
- */
- void VREF_Config_Init(void)
- {
- // 基准电压配置
- #if (HW_ADC_VREF == VREF3_0)
- SetReg(VREF_VHALF_CR, VRVSEL1 | VRVSEL0, VRVSEL1);
- #elif (HW_ADC_VREF == VREF4_0)
- SetBit(VREF_VHALF_CR, VRVSEL1 | VRVSEL0);
- #elif (HW_ADC_VREF == VREF4_5)
- ClrBit(VREF_VHALF_CR, VRVSEL1 | VRVSEL0);
- #elif (HW_ADC_VREF == VREF5_0)
- SetReg(VREF_VHALF_CR, VRVSEL1 | VRVSEL0, VRVSEL0);
- #endif
- // 基准电压输出滤波控制
- SetBit(P3_AN, PIN5);
- SetBit(P3_OE, PIN5);
- // VHALF 输出滤波配置
- SetBit(P3_AN, P32);
- // 基准电压与VHALF使能
- SetBit(VREF_VHALF_CR, VREFEN | VHALFEN);
- }
- /**
- @function ADC_Init
- @brief ADC端口初始化
- @date 2025-11-01
- */
- void ADC_Init(void)
- {
- // 母线电压 三相交流电压 模块温度 4-20mA电流采集
- SetBit(P2_AN, PIN4 | PIN5 | PIN6 | PIN7);
- // NTC1 NTC2
- SetBit(P3_AN, PIN3 | PIN4);
- // 通道使能
- SetBit(ADC_MASK, CH0EN | CH1EN);
- SetBit(ADC_MASK, CH2EN | CH3EN | CH4EN | CH6EN | CH7EN | CH11EN);
- // 数据左对齐 (自动左移4位)
- SetBit(ADC_CR, ADCALIGN);
- ClrBit(ADC_CR, ADCIE);
- SetBit(ADC_CR, ADCEN);
- }
- /**
- @function AMP_Init
- @brief 运放初始化 外部增益 配置AMP1 AMP2
- @date 2025-11-01
- */
- void AMP_Init(void)
- {
- // AMP1 配置
- SetBit(P1_AN, P16);
- SetBit(P1_AN, P17);
- SetBit(P2_AN, P20);
- // AMP2 配置
- SetBit(P2_AN, P21);
- SetBit(P2_AN, P22);
- SetBit(P2_AN, P23);
- // P23_OE需要强制为0,禁止DA1输出至PAD
- ClrBit(P2_OE, P23);
- // 使能AMP1 AMP2
- SetBit(AMP_CR0, AMP1EN | AMP2EN);
- // 增益为外部配置
- ClrBit(AMP_CR1, AMP0_GAIN2 | AMP0_GAIN1 | AMP0_GAIN0 | AMP_PH_GAIN2 | AMP_PH_GAIN1 | AMP_PH_GAIN0);
- }
- int16_t uCurr, vCurr;
- /**
- @function Get_ADC_Value
- @brief 读取ADC转换值
- @date 2025-11-03
- */
- void Get_ADC_Value(void)
- {
- // 使能ADC的DCBUS采样
- SetBit(ADC_CR, ADCBSY);
-
- // 等待转换完成
- while (ReadBit(ADC_CR, ADCBSY));
-
- // 读取数据
- motorControl.DCBus = LPF_Zero_Update(VDCBUS_ADC, motorControl.DCBus, LPF_K(5.0));
- motorControl.ACBus = LPF_Zero_Update(VACBUS_ADC, motorControl.ACBus, LPF_K(1.0));
- motorControl.IGBTTemp = LPF_Zero_Update(IGBT_NTC_ADC, motorControl.IGBTTemp, LPF_K(20.0));
- // 数据处理
- #if 0
- // 测试
- uCurr = ADC0_DR;
- vCurr = ADC1_DR;
- motorControl.uPhaseCurr = uCurr - mcCurOffset.IuOffset;
- motorControl.vPhaseCurr = vCurr - mcCurOffset.IvOffset;
- #endif
- }
|