硬件设计
AD7046简介:ADS7046 12 位, 3 MSPS, 单端输入, 小型低功耗 SAR ADC。ADS7046 是一款 12 位 3 MSPS SAR ADC, 支持0V到 AVDD 范围内的单端输入, AVDD 的范围为2.35V至 3.6V。内部失调电压校准功能在整个 AVDD 和工作温度范围内可保持优异的失调电压规格。该器件支持由 CS 和 SCLK 信号控制的兼容 SPI 的串行接口。 输入信号通过 CS 下降沿进行采样, 而 SCLK用于转换和串行数据输出。 该器件支持宽数字电源范围(1.65V 至 3.6V) , 可直接连接到各种主机控制器。ADS7046 的标称 DVDD 范围(1.65V 至 1.95V) 符合JESD8-7A 标准。
原理图设计如下
与MCU管脚连接如下表所示
Label | ADS7046 | GD32F103RCT6 |
ADC_CSn | CS | PA4 |
ADC_SDO | SDO | PA6 |
ADC_SCLK | SCLK | PA5 |
本文使用工程代码,含使用手册,例程代码等资料,如下
ADS7046(含工程代码、使用手册、datasheet)实际工程中使用代码,正确读取电压值,长期稳定运行采样,可以直接使用资源-CSDN文库
软件设计
工程代码主要是模拟IO实现SPI读取数据,模拟过程参考如下时序图。
主函数代码
void tskmain( void *pvParameters )
{
float voltage_ads7046;
uint32_t time = 0;
uint16_t value = 0;
(void)pvParameters;
//--任务运行-------------------------------------------
while(1)
{
vTaskDelay(1000);
time++;
//printf("TIM: %d\r\n", time);
//gd_eval_led_toggle(LED1);//ALARM_LED
gd_eval_led_toggle(LED2);//RUN LED
//ADC监测
value = ads7046_read_value();
printf("ads7046 value = 0x%x\r\n", value);
voltage_ads7046 = (float) value/4096*3.3;
printf("\nADS7046电压值为:%f\n",voltage_ads7046);
}// end of while(1)
}// end of tskSysMan
管脚初始化及宏定义
//输出信号
//ADC_CSN
//ADC_SCLK
//ADC_SDO
#define ADC_CSN_L {GPIO_BC(GPIOA) = GPIO_PIN_4;}
#define ADC_CSN_H {GPIO_BOP(GPIOA) = GPIO_PIN_4;}
#define ADC_SCLK_L {GPIO_BC(GPIOA) = GPIO_PIN_5;}
#define ADC_SCLK_H {GPIO_BOP(GPIOA) = GPIO_PIN_5;}
void ads7046_init(void)
{
/* enable the led clock */
rcu_periph_clock_enable(RCU_GPIOA);
/* configure led GPIO port */
gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4);
gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5);
//gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
/* enable the key clock */
//rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_AF);
/* configure button pin as input */
gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
}
测试记录
实际项目采用该代码,换算后电压值的测试结果,如下图
本文使用工程代码,含使用手册,例程代码等资料,如下
ADS7046(含工程代码、使用手册、datasheet)实际工程中使用代码,正确读取电压值,长期稳定运行采样,可以直接使用资源-CSDN文库