杰发科技AC7801——ADC之Bandgap和内部温度计算

0. 参考

电流模架构Bandgap设计与仿真

bandgap的理解(内部带隙电压基准)

虽然看不懂这些公式,但是比较重要的一句应该是这个:因为传统带隙基准的输出值为1.2V

1. 使用

参考示例代码。

40002000是falsh控制器寄存器,40002058应该也是flash相关。

flash控制寄存器到0x40002040就结束了,参考下表的地址规律,在0x40002044应该就是eflash控制寄存器结束地址。跟代码里面的40002058没有啥关系。

可以看到这个也是存在falsh中,手册中没有说明这个地址的作用,应该也是专门用来存储基校准电压的地方。

看到7801的BG输出电压是1.2V,并且出厂自带校准。

温度曲线斜率1.692,单位是mV/℃

25℃时候电压是0.72V

可以看到低5位用来存储BG校准值

高8位用来存储25℃时候的温度值

cpp 复制代码
    TsensorCali = *((uint32_t *)0x40002058);
    VbandgapRT = (uint8_t)(TsensorCali & 0x1F); // 0 1111 低5位 
    VtsensorRT = (uint8_t)((TsensorCali >> 8) & 0xFF);  // 1111 1111 高8位

最高位第5位不为0 因此可以判断第5位是符号位

最高位第8位不为0 因此可以判断第8位是符号位

经过换算之后1200的ADC值对应的就是1.2V电压值。

温度值720对应0.72V【720mV】,与后面的0.5系数就不太懂了,应该是特殊公式。

cpp 复制代码
    /* BG calibration */
    if (VbandgapRT >> 4) //最高位第5位不为0  因此可以判断第5位是符号位
    {
        bgVol = 1200 - (VbandgapRT & 0xF); 
    }
    else
    {
        bgVol = 1200 + (VbandgapRT & 0xF);
    }

    /* Vtsensor calibration */
    if (VtsensorRT >> 7)   //最高位第8位不为0  因此可以判断第8位是符号位
    {
        vt25Vol = 720 - (VtsensorRT & 0x7F) * 0.5;
    }
    else
    {
        vt25Vol = 720 + (VtsensorRT & 0x7F) * 0.5;
    }

进行ADC采样

测出来的数据

使用BG的校准值和测出来的BG值对温度ADC值进行校准

ADC值即mV单位的电压值,进行温度曲线斜率换算,得到目前的温度值。

相关推荐
串口哑火达人13 小时前
(六)RT-Thread网络通信--AT组件与ESP8266
c语言·单片机·嵌入式硬件·mcu·物联网
wsoz18 小时前
MCU中部署TinyMaix
单片机·mcu·神经网络·嵌入式·tinymaix
香水5只用六神1 天前
【TIM】基本定时器定时实验(2)
c语言·开发语言·stm32·单片机·嵌入式硬件·mcu·学习
学嵌入式的小杨同学1 天前
STM32 进阶封神之路(八):外部中断 EXTI 实战 —— 按键检测从轮询到中断(库函数 + 寄存器双版本)
linux·stm32·单片机·嵌入式硬件·mcu·架构·硬件架构
xu_wenming2 天前
跨文件数据共享模式:通过静态全局变量与访问函数结合
嵌入式硬件·mcu·物联网·设计规范
学嵌入式的小杨同学2 天前
STM32 进阶封神之路(七):中断核心原理 + NVIC 深度解析 —— 从概念到寄存器配置(面试重点)
stm32·单片机·嵌入式硬件·mcu·硬件架构·pcb·嵌入式实时数据库
qq_402995752 天前
RS485通信设计
stm32·单片机·mcu
串口哑火达人2 天前
(七)RT-Thread物联网实战--MQTT-cJSON-OneNET
c语言·单片机·嵌入式硬件·mcu·物联网
猫猫的小茶馆3 天前
【Linux 驱动开发】Linux 内核启动过程详解
linux·c语言·arm开发·驱动开发·stm32·单片机·mcu
猫猫的小茶馆3 天前
【Linux 驱动开发】STM32MP1 + GT911 触摸显示系统开发笔记
linux·arm开发·驱动开发·stm32·单片机·嵌入式硬件·mcu