我在上面提到过。 我在 ADC 的输入端施加了不同的电压、 只检测到输入端提供的输入电压的一半。
如需更多信息、请查看随附的原理图、并尽快告知我您的宝贵意见。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
对于给定通道、在两个输入引脚上测量的相对于接地的电压是多少?
1.25伏
该通道的 ADC 输出是什么?
在 ADC 引脚上获得适当的电压但检测到一半的电压
请提供 以十六进制格式在表9中编程的寄存器设置、以便我们也可以查看这些设置。
/*用户代码开始标头*/
/**
*
*@文件 : main.c
*@简介 :主要节目主体
*
*@注意事项
*
*版权所有(c) 2023 STMicroelectronics。
保留所有权利。
*
*本软件的许可条款可在许可证文件中找到
*位于该软件组件的根目录中。
*如果本软件没有许可证文件,它将按原样提供。
*
*
*/
/*用户代码结束标头*/
/*包括------------------------------------------------------- */
#包含 "main.h"
/*私有包括------------------------------------------------------- */
/*用户代码开始包括*/
/*用户代码结束包括*/
/* Private typedef ------------------------------------------------------- */
/*用户代码开始 PTD */
/*用户代码 end PTD */
/*私有定义------------------------------------------------------- */
/*用户代码开始 PD */
/*用户代码 end PD */
/*私有宏------------------------------------------------------- */
/*用户代码开始 PM */
/*用户代码结束 PM */
/*私有变量------------------------------------------------------- */
SPI_HandleTypeDef hspi1;
/*用户代码开始 PV */
浮点 电压;
浮点 温度电压;
浮点 温度电压1;
uint16_t ITER;
uint16_t count = 0;
uint8_t data1[10];
uint8_t data[5];
uint8_t DATA2[3];
/*用户代码 end pv */
/*私有函数原型------------------------------------------------------- */
空 Clock_Config ( 空 );
静态 空 MX_GPIO_Init ( 空 );
静态 空 MX_SPI1_Init ( 空 );
/*用户代码开始 PFP */
/*用户代码结束 PFP */
/*私人用户代码------------------------------------------------------- */
/*用户代码开始0 */
/*用户代码结束0 */
/**
*@简要介绍 应用程序入口点。
*@retval int
*/
内部 主 ( 空 )
{
/*用户代码开始1 */
uint8_t cmd1[]={0x85、0x00、0x00、0x00、0x00};
uint8_t cmd2[]={0x82、0x00、0x00、0x00、0x00};
uint8_t cmd3[]={0xCC、0x00、0x00、0x00、0x00};
uint8_t cmdwr5[]={0x11、0x02、0x00};
uint8_t cmdrd6[]={0x10、0x00、0x00};
/*用户代码结束1 */
/* MCU 配置--------------------------------------------------------------- */
/*所有外设的复位、初始化闪存接口和 SysTick。 */
HAL_Init ();
/*用户代码开始初始化*/
/*用户代码 End Init */
/*配置系统时钟*/
Clock_Config ();
/*用户代码开始 sysinit */
/*用户代码 end sysinit */
/*初始化所有配置的外设*/
MX_GPIO_Init ();
MX_SPI1_Init ();
/*用户代码开始2 */
/*用户代码结束2 */
/*无限循环*/
/*用户代码开始时*/
HAL_GPIO_WritePin (CS_GPIO_Port、CS_Pin、SET);
HAL_DELAY (100);
HAL_GPIO_WritePin (CS_GPIO_Port、CS_Pin、RESET);
HAL_SPI_TRANSMIT (&hspi1、cmd1、5100);
HAL_GPIO_WritePin (CS_GPIO_Port、CS_Pin、SET);
HAL_GPIO_WritePin (CS_GPIO_Port、CS_Pin、RESET);
HAL_SPI_TRANSMIT (&hspi1、cmd2、5100);
HAL_GPIO_WritePin (CS_GPIO_Port、CS_Pin、SET);
HAL_GPIO_WritePin (CS_GPIO_Port、CS_Pin、RESET);
HAL_SPI_TRANSMIT (&hspi1、cmdwr5、3100);
HAL_GPIO_WritePin (CS_GPIO_Port、CS_Pin、SET);
HAL_GPIO_WritePin (CS_GPIO_Port、CS_Pin、RESET);
HAL_SPI_TransmitReceive (&hspi1、cmdrd6、Data1、5100);
HAL_GPIO_WritePin (CS_GPIO_Port、CS_Pin、SET);
同时 (1)
{
实现 (ITER = 0;ITER <1000;ITER ++)
{
HAL_GPIO_WritePin (CS_GPIO_Port、CS_Pin、RESET);
HAL_SPI_TransmitReceive (&hspi1、cmd3、data、5100);
HAL_GPIO_WritePin (CS_GPIO_Port、CS_Pin、SET);
tempVoltage =(((data[2]<<16)|(data[3]<<8)|(data[4])>>6)/262144;
如果 ((tempVoltage!= 0)&&(tempVoltage <= 5))
{
tempVoltage1 += tempVoltage;
计数++;
}
}
电压= tempVoltage1/计数;
tempVoltage1 = 0;
计数= 0;
/*用户代码结束时间*/
/*用户代码开始3 */
}
/*用户代码结束3 */
}
/**
*@简短系统时钟配置
*@retval 无
*/
空 Clock_Config ( 空 )
{
RCC_OscInitTypeDef RCC_OscInitStructure={0};
RCC_ClkInitTypeDef RCC_ClkInitStruct1 ={0};
/**配置主内部稳压器输出电压
*/
__HAL_RCC_PWR_CLK_ENABLE ();
__HAL_PWR_VOLTAGESCALING_CONFIG (PWR_RECONVERR_VOLTAGE_SCALE1);
/**根据指定的参数初始化 RCC 振荡器
*在 RCC_OscInitTypeDef 结构中。
*/
RCC_OscInitStruct.OscatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_on;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 4;
RCC_OscInitStruct.PLL.PLLN = 168;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 7;
如果 (HAL_RCC_OscConfig (&RCC_OscInitStruct)!= HAL_OK)
{
Error_Handler ();
}
/**初始化 CPU、AHB 和 APB 总线时钟。
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
如果 (HAL_RCC_ClockConfig (&RCC_ClkInitStructuret、FLASH_LATENCY_5)!= HAL_OK)
{
Error_Handler ();
}
}
/**
*@SPI1初始化函数简介
*@参数无
*@retval 无
*/
静态 空 MX_SPI1_Init ( 空 )
{
/*用户代码开始 SPI1_Init 0 */
/*用户代码结束 SPI1_Init 0 */
/*用户代码开始 SPI1_Init 1 */
/*用户代码 end SPI1_Init 1 */
/* SPI1参数配置*/
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLICY_LOW;
hspi1.Init.clkPhase = SPI_PHASE_2EDGE;
hspi1.Init.nss = SPI_NSS_soft;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalrup = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 10;
如果 (HAL_SPI_Init (&hspi1)!= HAL_OK)
{
Error_Handler ();
}
/*用户代码开始 SPI1_Init 2 */
/*用户代码结束 SPI1_Init 2 */
}
/**
*@简短 GPIO 初始化函数
*@参数无
*@retval 无
*/
静态 空 MX_GPIO_Init ( 空 )
{
GPIO_InitTypeDef GPIO_InitStruct ={0};
/*用户代码开始 MX_GPIO_Init_1 */
/*用户代码 end MX_GPIO_Init_1 */
/* GPIO 端口时钟使能*/
__ HAL_RCC_GPIOH_CLK_ENABLE ();
__ HAL_RCC_GPIOA_CLK_ENABLE ();
__HAL_RCC_GPIO_CLK_ENABLE ();
/*配置 GPIO 引脚输出电平*/
HAL_GPIO_WritePin (CS_GPIO_Port、CS_Pin、GPIO_PIN_RESET);
/*配置 GPIO 引脚: CS_Pin */
GPIO_InitStruct.Pin = CS_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init (CS_GPIO_Port、&GPIO_InitStruct);
/*用户代码开始 MX_GPIO_Init_2 */
/*用户代码 end MX_GPIO_Init_2 */
}
/*用户代码开始4 */
/*用户代码结束4 */
/**
*@简短 发生错误时执行此函数。
*@retval 无
*/
空 Error_Handler ( 空 )
{
/*用户代码开始 Error_Handler_Debug */
/*用户可以添加自己的实现来报告 HAL 错误返回状态*/
_disable_irq ();
同时 (1)
{
}
/*用户代码 end Error_Handler_Debug */
}
#ifdef 使用_满_断言
/**
*@简要 报告源文件的名称和源行号
* 发生 assert_param 错误的位置。
*@param file :指向源文件名的指针
*@param 行:assert_param 错误行源编号
*@retval 无
*/
空 assert_failed (uint8_t *文件、uint32_t 线路)
{
/*用户代码开始6 */
/*用户可以添加自己的实现来报告文件名和行号,
例如:printf ("错误的参数值:第%d\r\n 行上的文件%s、文件、行)*/
/*用户代码结束6 */
}
#endif /* use_full_assert */
您好、Aswin、
您的 CPU 中的 SPI 总线是否具有推挽或开漏输出? 使用示波器捕获的 SDO、SCLK、SDI 和/CS 时序图对于解决该问题非常有帮助。
是否 安装了这些电阻器(R173/R237/R171/R234)? ADS8698只能 接受单端输入信号、因此负输入引脚(AIN_xGDN)应连接至 GND。
您正在使用一个120k 欧姆的串联电阻、它将创建具有1m Ω ADC 输入阻抗的增益误差、因此您将看到(1-1m/(1m+120k))* Vin 小于您的输入电压。
将代码转换为电压时、可以使用 数据表中显示的传递函数(图69)、代码的中间位置是满量程输入范围的中心。 以双极输入范围为例、对于+/-2.5Vref 输入范围、LSB=2.Vref/2^18=2*2.5Vref/2^18、因此电压=(CODE-(2^18)/2)* FSR。
此致、
戴尔