【NUCLEO H533RE】ADC差分输入测试
[复制链接]
1、测试介绍
本测试使用STM32H533的ADC1通道的差分测试,配置和使用 ADC1 在差分模式下转换外部模拟输入,即 VinN 和 VinP 上的外部电压之差。测试除了NUCLEO H533RE开发板外还使用了过程校准仪生成测试信号,且使用开发板自带的串口打印输出测试电压。
2、硬件连接
H533RE与过程校准仪连接
H533RE PA1 ADC INP <===> PIN1 DC+
H533RE PA0 ADC INN <===> PIN2 DC-
3、参数配置
(1)系统时钟设置
系统时钟设置:外部晶振24MHZ,系统时钟为250MHZ,SysTick 时基设置为 1 毫秒。
ADC外设的时钟为64MHZ
(2) ADC 参数设置
使用ADC1外设通道CH1,模式为差分输入。分辨率为12bit,时钟分频为2分频,即64Mhz=32Mhz ADC1工作频率。STM32的ADC最高的工作频率为36Mhz,过高的频率对于采样精度有影响。
数据格式对其为:Rigth,输出数据16bit,但是高位4bit无效。
4、程序与工作原理
程序过程定义两个接收变量,差分输入除去数值还有正负反向。
/* Converted value declaration */
uint32_t uhADCxConvertedData;
/* Input voltage declaration */
int32_t uhADCxConvertedData_Voltage_mVolt;
采集过程采用查询模式进行,程序在HAL_ADC_PollForConversion()处阻塞。
/* USER CODE END WHILE */
if (HAL_ADC_PollForConversion(&hadc1, 10) != HAL_OK)
{
Error_Handler();
}
/* Read the converted value */
uhADCxConvertedData = HAL_ADC_GetValue(&hadc1);
/* Computation of ADC conversions raw data to physical values */
/* using helper macro. */
uhADCxConvertedData_Voltage_mVolt = __HAL_ADC_CALC_DIFF_DATA_TO_VOLTAGE(VDDA_APPLI,uhADCxConvertedData, ADC_RESOLUTION_12B);
printf("adc=%d \n\r",uhADCxConvertedData_Voltage_mVolt);
HAL_Delay(500);
/* USER CODE BEGIN 3 */
使用printf()输出测量数据。
5、测试过程
(1)使用过程校准仪输出500mV和1000mV电压,但是无论怎么改变电压输出都是一个定值。而且MCU重启重启之后数值都是随机值。
1000mV重启值。
6、总结
本次测试从过程来看好像没有成功,但是无法找到任何原因。程序参考例程:ADC_DifferentialMode
该开发板的ADC的例程,前面出现过死机现象,本次测试发现ADC读取的数值异常。对于该芯片我比较看好,但是这些测试的原因请ST公司能够给与帮助。需要的详细过程可以联系楼主本人。
|