| 我使用的STM32G070RBT6TR采样一个LDO稳压后两个30K分压电阻的电压值1.65V采集的数据偏差满足不了设计要求,看看有没有其他的优化方案,另外采集了Vref值也差不多。 
| 1656.76 |  
| 1656.76 |  
| 1655.54 |  
| 1632.97 |  
| 1612.84 |  
| 1592.71 |  
| 1566.48 |  
| 1547.57 |  
| 1532.32 |  
| 1533.54 |  
| 1537.81 |  
| 1539.03 |  
| 1542.08 |  
| 1545.13 |  
| 1548.18 |  
| 1551.84 |  
| 1554.89 |  
| 1557.94 |  
| 1561.6 |  
| 1565.26 |  
| 1567.09 |  
| 1570.14 |  
| 1576.85 |  
| 1580.51 |  
| 1585.39 |  
| 1589.66 |  
| 1593.93 |  
| 1598.81 |  
| 1603.08 |  
| 1607.35 |  
| 1612.23 |  
| 1616.5 |  
| 1620.16 |  
| 1626.87 |  
| 1630.53 |  
| 1634.8 |  
| 1639.07 |  
| 1645.17 |  
| 1648.83 |  
| 1653.1 |  
| 1655.54 |  
| 1639.68 |  
| 1621.99 |  
| 1597.59 |  
| 1577.46 |  
| 1557.94 |  
| 1542.08 |  
| 1529.88 |  
| 1532.93 |  
| 1536.59 |  
| 1539.64 |  
| 1542.08 |  
| 1545.13 |  
| 1548.18 |  
| 1552.45 |  
| 1555.5 |  
| 1559.16 |  
| 1562.82 |  
| 1568.31 |  
| 1571.97 |  
| 1575.63 |  
| 1578.68 |  
| 1582.95 |  
| 1588.44 |  
| 1592.1 |  
| 1598.2 |  
| 1603.08 |  
| 1607.35 |  
| 1611.01 |  
| 1615.28 |  
| 1618.33 |  
| 1626.26 |  
| 1631.14 |  
| 1634.8 |  
| 1640.29 |  
| 1643.34 |  
| 1648.83 |  
| 1654.32 |  
| 1653.71 |  
| 1634.19 |  
| 1612.84 |  
| 1595.15 |  
| 1575.02 |  
| 1548.79 |  
| 1531.1 |  
| 1532.32 |  
| 1535.37 |  
| 1540.86 |  
| 1542.08 |  
| 1546.35 |  
| 1548.79 |  
| 1551.84 |  
| 1555.5 |  
| 1558.55 |  
| 1563.43 |  
| 1565.87 |  
| 1570.14 |  
| 1575.02 |  
| 1578.68 |  
| 1581.73 |  
| 1586.61 |  
| 1591.49 |  
| 1594.54 |  
| 1597.59 |  
| 1601.25 |  
| 1606.13 |  
| 1609.18 |  
| 1614.67 |  
| 1618.94 |  
| 1623.21 |  
| 1626.26 |  
| 1631.14 |  
| 1637.24 |  
| 1640.9 |  
| 1645.17 |  
| 1648.83 |  
| 1653.1 |  
| 1654.93 |  
| 1628.7 |  
| 1611.01 |  
| 1582.34 |  
| 1563.43 |  
| 1543.91 |  
| 1529.88 |  
| 1533.54 |  
| 1536.59 |  
| 1538.42 |  
| 1541.47 |  
| 1545.13 |  
| 1548.18 |  
| 1551.84 |  
| 1554.89 |  
| 1558.55 |  
| 1562.21 |  
| 1565.26 |  
| 1569.53 |  
| 1573.8 |  
| 1577.46 |  
| 1581.73 |  
| 1585.39 |  
| 1589.66 |  
| 1593.93 |  
| 1598.2 |  
| 1602.47 |  
| 1604.3 |  
| 1610.4 |  
| 1613.45 |  
| 1618.94 |  
| 1623.21 |  
| 1627.48 |  
| 1629.31 |  
| 1634.8 |  
| 1639.68 |  
| 1643.34 |  
| 1647.61 |  
| 1651.27 |  
| 1656.15 |  
| 1659.81 |  
| 1653.71 |  
| 1633.58 |  
| 1614.67 |  
| 1597.59 |  
| 1559.77 |  
| 1540.86 |  
| 1530.49 |  
| 1534.15 |  
| 1537.81 |  
| 1540.25 |  
| 1543.3 |  
| 1546.35 |  
| 1550.01 |  
| 1553.67 |  
| 1556.72 |  
| 1560.38 |  
| 1564.04 |  
| 1568.31 |  
| 1572.58 |  
| 1576.24 |  
| 1580.51 |  
| 1585.39 |  
| 1589.66 |  
| 1593.93 |  
| 1598.2 |  
| 1602.47 |  
| 1606.74 |  
| 1611.01 |  
| 1613.45 |  
| 1618.33 |  
| 1622.6 |  
| 1625.04 |  
| 1628.09 |  
| 1633.58 |  
| 1637.24 |  
| 1641.51 |  
| 1647 |  
| 1649.44 |  
| 1654.32 |  
| 1658.59 |  
| 1662.25 |  
| 1640.29 |  
| 1617.72 |  
| 1596.98 |  
| 1579.29 |  
| 1557.33 |  
| 1536.59 |  
| 1534.76 |  
| 1537.2 |  
| 1540.25 |  
| 1542.69 |  
| 1546.96 |  
| 1547.57 |  
| 1550.62 |  
| 1554.89 |  
| 1557.94 |  
| 1560.99 |  
| 1565.87 |  
| 1569.53 |  
| 1573.8 |  
| 1578.07 |  
| 1582.95 |  
| 1585.39 |  
| 1589.66 |  
| 1593.93 |  
| 1598.2 |  
| 1603.08 |  
| 1606.13 |  
| 1610.4 |  
| 1613.45 |  
| 1618.33 |  
| 1622.6 |  
| 1626.87 |  
| 1631.75 |  
| 1637.24 |  
| 1641.51 |  
| 1645.17 |  
| 1648.83 |  
| 1651.88 |  
| 1656.76 |  
| 1659.81 |  
| 1647.61 |  
| 1629.92 |  
| 1611.01 |  
| 1589.66 |  
| 1568.31 |  
| 1548.79 |  
| 1533.54 |  
| 1535.98 |  
| 1539.64 |  
| 1542.08 |  
| 1544.52 |  
| 1547.57 |  
| 1550.62 |  
| 1554.89 |  
| 1557.33 |  
| 1560.99 |  
| 1565.26 |  
| 1269.41 |  
| 1272.46 |  
| 1275.51 |  
| 1279.17 |  
| 1283.44 |  
| 1286.49 |  
| 1290.76 |  
| 1293.2 |  
| 1293.81 |  
| 1282.22 |  
| 1264.53 |  
| 1252.33 |  
| 1234.03 |  
| 1219.39 |  
| 1202.31 |  
| 1195.6 |  
| 1198.65 |  
| 1200.48 |  
| 1202.92 |  
| 1204.75 |  
| 1210.24 |  
| 1213.29 |  
| 1216.34 |  
| 1218.78 |  
| 1222.44 |  
| 1226.71 |  
| 1228.54 |  
| 1231.59 |  
| 1234.03 |  
| 1237.69 |  
| 1241.35 |  
| 1244.4 |  
| 1247.45 |  
| 1250.5 |  
| 1254.16 |  
| 1257.21 |  
| 1259.65 |  
| 1264.53 |  
| 1267.58 |  
| 1270.63 |  
| 1273.68 |  
| 1277.95 |  
| 1281.61 |  
| 1284.05 |  
| 1288.32 |  
| 1290.76 |  
| 1293.2 |  
| 1290.15 |  
| 1272.46 |  
| 1259.04 |  
| 1238.91 |  
| 1227.32 |  
| 1208.41 |  
| 1194.99 |  
| 1197.43 |  
| 1200.48 |  
| 1202.92 |  
| 1205.36 |  
| 1208.41 |  
| 1212.07 |  
| 1215.12 |  
| 1217.56 |  
| 1220 |  
| 1222.44 |  
| 1225.49 |  
| 1229.76 |  
| 1232.81 |  
| 1237.69 |  
| 1241.35 |  
| 1244.4 |  
| 1247.45 |  
| 1251.72 |  
| 1255.38 |  
| 1258.43 |  
| 1262.09 |  
| 1264.53 |  
| 1268.8 |  
| 1271.24 |  
| 1275.51 |  
| 1279.17 |  
| 1281.61 |  
| 1285.27 |  
| 1289.54 |  
| 1293.2 |  
| 1294.42 |  
| 1277.34 |  
| 1264.53 |  
| 1246.84 |  
| 1226.1 |  
| 1213.29 |  
| 1199.26 |  
| 1195.6 |  
| 1198.65 |  
| 1200.48 |  
| 1202.31 |  
| 1205.36 |  
| 1209.02 |  
| 1212.07 |  
| 1213.9 |  
| 1216.34 |  
| 1220 |  
| 1223.05 |  
| 1224.88 |  
| 1227.93 |  
| 1229.15 |  
| 1232.2 |  
| 1235.25 |  
| 1238.91 |  
| 1242.57 |  
| 1245.62 |  
| 1248.06 |  
| 1251.72 |  
| 1254.16 |  
| 1257.82 |  
| 1262.09 |  
| 1267.58 |  
| 1271.24 |  
| 1275.51 |  
| 1278.56 |  
| 1283.44 |  
| 1287.71 |  
| 1290.76 |  
| 1293.2 |  
| 1294.42 |  
| 1276.73 |  
| 1262.09 |  
| 1249.89 |  
| 1233.42 |  
| 1219.39 |  
| 1201.09 |  
| 1194.99 |  
| 1198.04 |  
| 1200.48 |  
| 1202.31 |  
| 1205.97 |  
| 1208.41 |  
| 1210.24 |  
| 1213.9 |  
| 1216.95 |  
| 1218.78 |  
| 1222.44 |  
| 1224.27 |  
| 1227.32 |  
| 1230.37 |  
| 1232.2 |  
| 1235.86 |  
| 1238.3 |  
| 1241.35 |  
| 1245.62 |  
| 1247.45 |  
| 1250.5 |  
| 1253.55 |  
| 1257.21 |  
| 1259.65 |  
| 1262.7 |  
| 1266.36 |  
| 1268.8 |  
| 1272.46 |  
| 1276.12 |  
| 1279.78 |  
| 1282.83 |  
| 1286.49 |  
| 1290.76 |  
| 1295.64 |  
| 1285.27 |  
| 1270.02 |  
| 1252.33 |  
| 1240.13 |  
| 1222.44 |  
| 1205.97 |  
| 1194.99 |  
| 1196.21 |  
| 1199.26 |  
| 1201.7 |  
| 1204.14 |  
| 1206.58 |  
| 1209.63 |  
| 1212.68 |  
| 1215.73 |  
| 1218.17 |  
| 1221.22 |  
| 1224.27 |  
| 1227.32 |  
| 1229.15 |  
| 1232.2 |  
| 1235.86 |  
| 1238.3 |  
| 1240.74 |  
| 1243.18 |  
| 1246.23 |  
| 1249.28 |  
| 1252.33 |  
| 1255.99 |  
| 1258.43 |  
| 1261.48 |  
| 1263.92 |  
| 1267.58 |  
| 1271.24 |  
| 1275.51 |  
| 1278.56 |  
| 1282.22 |  
| 1285.88 |  
| 1289.54 |  
| 1291.98 |  
| 1294.42 |  
| 1287.1 |  
| 1270.63 |  
| 1256.6 |  
| 1238.91 |  
| 1213.29 |  
| 1196.82 |  
| 1195.6 |  
| 1198.65 |  
| 1200.48 |  
| 1203.53 |  
| 1206.58 |  
| 1209.02 |  
| 1211.46 |  
| 1215.12 |  
| 1217.56 |  
| 1220.61 |  
| 1221.83 |  
| 1224.88 |  
| 1228.54 |  
| 1230.37 |  
| 1234.03 |  
| 1236.47 |  
| 1238.3 |  
| 1241.35 |  
| 1244.4 |  
| 1247.45 |  
| 1251.11 |  
| 1254.77 |  
| 1258.43 |  
| 1260.87 |  
| 1263.31 |  
| 1266.36 |  
| 1270.02 |  
| 1273.68 |  
| 1276.12 |  
| 1279.78 |  
| 1282.83 |  
| 1287.1 |  
| 1290.15 |  
| 1293.81 |  
| 1293.81 |  
| 1277.34 |  
| 1264.53 |  
| 1247.45 |  
| 1233.42 |  
| 1218.17 |  
| 1201.7 |  
| 1196.21 |  
| 1199.26 |  
| 1201.09 |  
| 1202.92 |  | 
ADC 配置
void MX_ADC1_Init(void) {
/ USER CODE BEGIN ADC1_Init 0 /
/ USER CODE END ADC1_Init 0 /
ADC_ChannelConfTypeDef sConfig = {0};
/ USER CODE BEGIN ADC1_Init 1 /
/ USER CODE END ADC1_Init 1 /
/* Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) / hadc1.Instance = ADC1; hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; hadc1.Init.Resolution = ADC_RESOLUTION_12B; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; hadc1.Init.LowPowerAutoWait = DISABLE; hadc1.Init.LowPowerAutoPowerOff = DISABLE; hadc1.Init.ContinuousConvMode = DISABLE; hadc1.Init.NbrOfConversion = 5; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIG_T6_TRGO; hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING; hadc1.Init.DMAContinuousRequests = ENABLE; hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED; hadc1.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_12CYCLES_5; hadc1.Init.SamplingTimeCommon2 = ADC_SAMPLETIME_12CYCLES_5; hadc1.Init.OversamplingMode = ENABLE; hadc1.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_8; hadc1.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_3; hadc1.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER; hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH; if (HAL_ADC_Init(&hadc1) != HAL_OK) { Error_Handler(); }
/* Configure Regular Channel / sConfig.Channel = ADC_CHANNEL_0; sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_1; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); }
/* Configure Regular Channel / sConfig.Channel = ADC_CHANNEL_1; sConfig.Rank = ADC_REGULAR_RANK_2; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); }
/* Configure Regular Channel / sConfig.Channel = ADC_CHANNEL_2; sConfig.Rank = ADC_REGULAR_RANK_3; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); }
/* Configure Regular Channel / sConfig.Channel = ADC_CHANNEL_3; sConfig.Rank = ADC_REGULAR_RANK_4; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); }
/* Configure Regular Channel / sConfig.Channel = ADC_CHANNEL_VREFINT; sConfig.Rank = ADC_REGULAR_RANK_5; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } / USER CODE BEGIN ADC1_Init 2 / HAL_ADCEx_Calibration_Start(&hadc1);
HAL_ADC_Start_DMA(&hadc1, (uint32_t )ADC_Buf,5); / USER CODE END ADC1_Init 2 */
}
void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle) {
GPIO_InitTypeDef GPIO_InitStruct = {0}; if(adcHandle->Instance==ADC1) { / USER CODE BEGIN ADC1_MspInit 0 /
/ USER CODE END ADC1_MspInit 0 / / ADC1 clock enable / __HAL_RCC_ADC_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE(); /*ADC1 GPIO Configuration PA0 ------> ADC1_IN0 PA1 ------> ADC1_IN1 PA2 ------> ADC1_IN2 PA3 ------> ADC1_IN3 / GPIO_InitStruct.Pin = CUR_C_Pin|CUR_B_Pin|CUR_A_Pin|LK_CUR_Pin; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/ ADC1 DMA Init / / ADC1 Init / hdma_adc1.Instance = DMA1_Channel1; hdma_adc1.Init.Request = DMA_REQUEST_ADC1; hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY; hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE; hdma_adc1.Init.MemInc = DMA_MINC_ENABLE; hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; hdma_adc1.Init.Mode = DMA_CIRCULAR; hdma_adc1.Init.Priority = DMA_PRIORITY_VERY_HIGH; if (HAL_DMA_Init(&hdma_adc1) != HAL_OK) { Error_Handler(); }
__HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc1); / USER CODE BEGIN ADC1_MspInit 1 /
/ USER CODE END ADC1_MspInit 1 / } }
void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle) {
if(adcHandle->Instance==ADC1) { / USER CODE BEGIN ADC1_MspDeInit 0 /
/ USER CODE END ADC1_MspDeInit 0 / / Peripheral clock disable / __HAL_RCC_ADC_CLK_DISABLE();
/*ADC1 GPIO Configuration PA0 ------> ADC1_IN0 PA1 ------> ADC1_IN1 PA2 ------> ADC1_IN2 PA3 ------> ADC1_IN3 / HAL_GPIO_DeInit(GPIOA, CUR_C_Pin|CUR_B_Pin|CUR_A_Pin|LK_CUR_Pin);
/ ADC1 DMA DeInit / HAL_DMA_DeInit(adcHandle->DMA_Handle); / USER CODE BEGIN ADC1_MspDeInit 1 /
/ USER CODE END ADC1_MspDeInit 1 / } }
其次 电阻分压型电路通常阻抗很大,也就意味着电流很小,任何接入的电路都会引起很大电压波动。所以ADC的采样时间一定要足够大。
再次 如果充电时间增加还不能满足,那就需要外部增加一个小电容。具体原理可以参考原厂应用笔记 AN2834
电源方面,所有电源脚都接对、接好。
注意ADC使用前做下校准, 采样时间适当设置长点。
重点确认下ADC的参考电压,到底是来自外部参考电压还是来自内部VREFBUF的输出。如果选择内部VREFBUF
的话,其输出选择要结合VDD,这些都要确认好。
比方:
– VREF+ around 2.048 V (requiring VDDA equal to or higher than 2.4 V)
– VREF+ around 2.5 V (requiring VDDA equal to or higher than 2.8 V)