我使用的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