ADC.c 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include <MyProject.h>
  2. /**
  3. @function VREF_Config_Init
  4. @brief 基准电压配置
  5. @date 2025-11-01
  6. */
  7. void VREF_Config_Init(void)
  8. {
  9. // 基准电压配置
  10. #if (HW_ADC_VREF == VREF3_0)
  11. SetReg(VREF_VHALF_CR,VRVSEL1 | VRVSEL0, VRVSEL1);
  12. #elif (HW_ADC_VREF == VREF4_0)
  13. SetBit(VREF_VHALF_CR,VRVSEL1 | VRVSEL0);
  14. #elif (HW_ADC_VREF == VREF4_5)
  15. ClrBit(VREF_VHALF_CR,VRVSEL1 | VRVSEL0);
  16. #elif (HW_ADC_VREF == VREF5_0)
  17. SetReg(VREF_VHALF_CR,VRVSEL1 | VRVSEL0, VRVSEL0);
  18. #endif
  19. // 基准电压输出滤波控制
  20. SetBit(P3_AN, PIN5);
  21. SetBit(P3_OE, PIN5);
  22. // VHALF 输出滤波配置
  23. SetBit(P3_AN, P32);
  24. // 基准电压与VHALF使能
  25. SetBit(VREF_VHALF_CR, VREFEN | VHALFEN);
  26. }
  27. /**
  28. @function ADC_Init
  29. @brief ADC端口初始化
  30. @date 2025-11-01
  31. */
  32. void ADC_Init(void)
  33. {
  34. // 母线电压 三相交流电压 模块温度 4-20mA电流采集
  35. SetBit(P2_AN, PIN4 | PIN5 | PIN6 | PIN7);
  36. // NTC1 NTC2
  37. SetBit(P3_AN, PIN3 | PIN4);
  38. // 通道使能
  39. SetBit(ADC_MASK, CH0EN | CH1EN);
  40. SetBit(ADC_MASK, CH2EN | CH3EN | CH4EN | CH6EN | CH7EN | CH11EN);
  41. // 数据左对齐 (自动左移4位)
  42. SetBit(ADC_CR, ADCALIGN);
  43. ClrBit(ADC_CR, ADCIE);
  44. SetBit(ADC_CR, ADCEN);
  45. }
  46. /**
  47. @function AMP_Init
  48. @brief 运放初始化 外部增益 配置AMP1 AMP2
  49. @date 2025-11-01
  50. */
  51. void AMP_Init(void)
  52. {
  53. // AMP1 配置
  54. SetBit(P1_AN, P16);
  55. SetBit(P1_AN, P17);
  56. SetBit(P2_AN, P20);
  57. // AMP2 配置
  58. SetBit(P2_AN, P21);
  59. SetBit(P2_AN, P22);
  60. SetBit(P2_AN, P23);
  61. // P23_OE需要强制为0,禁止DA1输出至PAD
  62. ClrBit(P2_OE, P23);
  63. // 使能AMP1 AMP2
  64. SetBit(AMP_CR0, AMP1EN | AMP2EN);
  65. // 增益为外部配置
  66. ClrBit(AMP_CR1, AMP0_GAIN2 | AMP0_GAIN1 | AMP0_GAIN0 | AMP_PH_GAIN2 | AMP_PH_GAIN1 | AMP_PH_GAIN0);
  67. }
  68. /**
  69. * @function Get_ADC_Value
  70. * @brief 读取ADC转换值
  71. * @date 2025-11-03
  72. */
  73. void Get_ADC_Value(void)
  74. {
  75. motorControl.ACBus = LPF_Zero_Update(VACBUS_ADC, motorControl.ACBus, LPF_K(1.0));
  76. motorControl.DCBus = LPF_Zero_Update(VDCBUS_ADC, motorControl.DCBus, LPF_K(5.0));
  77. motorControl.IPMTemp = LPF_Zero_Update(IGBT_NTC_ADC, motorControl.IPMTemp, LPF_K(20.0));
  78. }