找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 731|回复: 20
打印 上一主题 下一主题
收起左侧

请问有辉芒微FT61E145或类似的辉芒微单片机有用自带ADC测量供电电池电压例程吗

[复制链接]
跳转到指定楼层
楼主
ID:114301 发表于 2024-8-28 10:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1000黑币
请问有辉芒微FT61E145或类似的辉芒微单片机有用自带ADC测量供电电池电压例程吗?芯片供电是电池,如果不接外部电阻分压连电池测量(这种官网有例程,想不接分压电阻,省IO口),直接用自带的内部ADC测电池电压,之前发了一个贴,但给的分太少了,重新发一个,谢谢了

最佳答案

查看完整内容

这个官方网站上有例程啊,稍微改一下就可以了.我自己运行过的,仿真器上测试3.4V,仿真结果是3424mV,这个误差不超过1%,如果要求不高,结果还可以接受了; , POWER_INITIAL(); //初始化 ADC_INITIAL(); //ADC初始化 while(1) { adcData = GET_ADC_DATA(7); //通道7 AD值 theVoltage = (unlong)adcData*8*1000/0xFFF; //电压放大1000倍 NOP(); NOP(); ...
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:466505 发表于 2024-8-28 10:22 | 只看该作者
这个官方网站上有例程啊,稍微改一下就可以了.我自己运行过的,仿真器上测试3.4V,仿真结果是3424mV,这个误差不超过1%,如果要求不高,结果还可以接受了;
        <........省略>,
        POWER_INITIAL();                                                    //初始化
        ADC_INITIAL();                                                            //ADC初始化       
         
        while(1)
        {
                adcData = GET_ADC_DATA(7);                                         //通道7 AD值
                theVoltage = (unlong)adcData*8*1000/0xFFF;        //电压放大1000倍                       
                NOP();
                NOP();
        }

评分

参与人数 1黑币 +30 收起 理由
hack2800 + 30 我对仿真器不熟,只拿来烧程序,有心了,谢.

查看全部评分

回复

使用道具 举报

板凳
ID:404160 发表于 2024-8-28 15:18 | 只看该作者
#include <stdio.h>

// 定义 ADC 模块的基地址和寄存器偏移 (根据芯片手册修改)
#define ADC_BASE 0x40000000
#define ADC_CTRL_OFFSET 0x00
#define ADC_CH_OFFSET 0x04
#define ADC_SAMPLE_RATE_OFFSET 0x08
#define ADC_RESULT_OFFSET 0x0C

// 定义 ADC 控制寄存器中的位域
#define ADC_CTRL_ENABLE (1 << 0)
#define ADC_CTRL_START (1 << 1)
#define ADC_CTRL_INTERRUPT (1 << 2)

// 定义 ADC 通道、参考电压和分辨率
#define ADC_CHANNEL 0
#define ADC_REF_VOLTAGE 3.3
#define ADC_RESOLUTION 12

// 初始化串口 (根据您的硬件平台修改,用于显示测量值)
void UART_Init() {
    // ...
}

// 初始化 ADC 模块
void ADC_Init() {
    // 配置 ADC 时钟 (根据芯片手册修改)
    // ...

    // 配置 ADC 控制寄存器
    *(uint32_t *)(ADC_BASE + ADC_CTRL_OFFSET) |= ADC_CTRL_ENABLE;

    // 配置 ADC 通道
    *(uint32_t *)(ADC_BASE + ADC_CH_OFFSET) = ADC_CHANNEL;

    // 配置 ADC 采样率
    // ...

    // 其他配置 (根据芯片手册修改)
    // ...
}

// 读取 ADC 转换结果
uint16_t ADC_Read() {
    // 启动 ADC 转换
    *(uint32_t *)(ADC_BASE + ADC_CTRL_OFFSET) |= ADC_CTRL_START;

    // 等待转换完成 (根据芯片手册修改)
    // ...

    // 读取 ADC 转换结果
    return *(uint16_t *)(ADC_BASE + ADC_RESULT_OFFSET);
}

// 将 ADC 数字值转换为电压值
float ADC_ToVoltage(uint16_t adc_value) {
    return adc_value * ADC_REF_VOLTAGE / (1 << ADC_RESOLUTION);
}

int main() {
    UART_Init();
    ADC_Init();

    while (1) {
        uint16_t adc_value = ADC_Read();
        float battery_voltage = ADC_ToVoltage(adc_value);

        printf("Battery voltage: %.2fV\n", battery_voltage);

        // 添加延时
        delay_ms(1000); // 根据需求调整延时时间
    }

    return 0;
}

评分

参与人数 1黑币 +30 收起 理由
hack2800 + 30 感谢,看了手册,里面没有3.3V参考电压,但.

查看全部评分

回复

使用道具 举报

地板
ID:466505 发表于 2024-8-28 17:23 | 只看该作者
FT61E145不是有个AD通道可以测试1/4 Vdd的电压?
回复

使用道具 举报

5#
ID:114301 发表于 2024-8-28 20:24 | 只看该作者
hcfat51h 发表于 2024-8-28 17:23
FT61E145不是有个AD通道可以测试1/4 Vdd的电压?

看手册是有个通道测1/4 VDD,但测出数据不知道处理,否则VDD是4倍ADC数值,但还是没转化成电压?
回复

使用道具 举报

6#
ID:982617 发表于 2024-8-29 09:31 | 只看该作者
你想要直接用辉芒微FT61E145或类似芯片的内部ADC测量电池电压,而不使用外部电阻分压,这是可以实现的,但需要一些额外的考虑和处理。
以下是实现方法和需要注意的事项:
1. 芯片内部ADC的参考电压:首先要确定FT61E145或类似芯片内部ADC的参考电压。通常,内部ADC的参考电压是芯片内部的固定电压,例如3.3V或2.5V。  你需要查阅芯片的datasheet,找到ADC参考电压的相关信息。
2. 电池电压范围:确定你想要测量的电池电压范围。例如,如果你使用的是3.7V的锂电池,它的工作电压范围可能是3.0V到4.2V。
3. ADC精度和分辨率:内部ADC的精度和分辨率会影响测量结果的准确性。  如果你的电池电压范围很小,或者你对精度要求不高,内部ADC可能足以满足需求。但是,如果需要更高的精度,你可能需要使用外部ADC或其他方法。
4. 直接测量电压可能超出ADC的量程:如果你的电池电压范围大于内部ADC的参考电压,你需要将电池电压进行分压。 由于你想要避免使用外部电阻,可以考虑利用内部的基准电压作为分压器的一部分。例如,你可以使用一个内部的基准电压为2.5V,并将电池电压接入一个内部的电阻网络,以得到一个低于2.5V的电压,然后将其送到ADC进行测量。
5. 电压转换公式: 你需要根据ADC参考电压、电池电压范围、分压比等因素,推导出一个公式,将ADC读取到的数字量转换成实际的电池电压。

示例代码 (伪代码):

```c
//假设内部ADC参考电压为3.3V,电池电压范围为3.0V到4.2V

//使用内部基准电压作为分压器的一部分
//将电池电压接入一个内部电阻网络,将电压降到低于3.3V
//假设分压比为1:2,则ADC读取到的电压为电池电压的1/3

//读取ADC值
adc_value = read_adc();

//计算电池电压
battery_voltage = adc_value * 3.3 * 2 / 4096; //假设ADC分辨率为12位,即4096个量化值

//输出电池电压
printf("电池电压:%fV\
", battery_voltage);
```
注意事项:
仔细阅读FT61E145或类似芯片的datasheet,了解其ADC的特性和使用方法。
确保你的程序逻辑正确,避免出现误差。
在实际应用中,你需要进行实际测量和校准,以确保测量结果的准确性。
总结:
直接使用内部ADC测量电池电压是可行的,但需要仔细考虑芯片的特性和电池电压范围,并进行必要的处理。  

希望以上信息对你有帮助!

评分

参与人数 1黑币 +30 收起 理由
hack2800 + 30 回帖助人的奖励!都感谢!

查看全部评分

回复

使用道具 举报

7#
ID:466505 发表于 2024-8-29 10:23 | 只看该作者
参考电压:0x0FFF=1/4Vdd:ADC数值,

评分

参与人数 1黑币 +30 收起 理由
hack2800 + 30 参考了网官的其它ADC测量,有想过,但不确.

查看全部评分

回复

使用道具 举报

8#
ID:114301 发表于 2024-8-29 10:51 | 只看该作者
hcfat51h 发表于 2024-8-29 10:23
参考电压:0x0FFF=1/4Vdd:ADC数值,

参考了网官的其它ADC测量,有想过,但不确定,本来想拿来主义更快,现在手头还在画张简单的板,等到手了试一下,到时候有结果了再来回复,先谢了
回复

使用道具 举报

9#
ID:114301 发表于 2024-8-29 11:00 | 只看该作者
飞云居士 发表于 2024-8-28 15:18
#include

// 定义 ADC 模块的基地址和寄存器偏移 (根据芯片手册修改)

感谢,看了手册,里面没有3.3V参考电压,但程序思路应该是相通的,后面我自己多试试
回复

使用道具 举报

10#
ID:114301 发表于 2024-8-29 11:02 | 只看该作者
参考了网官的其它ADC测量,有想过各种情况,但不确定,本来想拿来主义更快,现在手头还在画简单的板,等到手了试一下,到时候有结果了再来回复,感谢大家回复,先谢了
回复

使用道具 举报

11#
ID:114301 发表于 2024-8-29 11:41 | 只看该作者
hcfat51h 发表于 2024-8-29 11:10
这个官方网站上有例程啊,稍微改一下就可以了.我自己运行过的,仿真器上测试3.4V,仿真结果是3424mV,这个误差 ...

厉害,我都不会用仿真器看仿真结果的电压,刚接触不久,平时只拿来简单烧程序,谢谢
回复

使用道具 举报

12#
ID:114301 发表于 2024-8-29 11:45 | 只看该作者
hcfat51h 发表于 2024-8-29 11:10
这个官方网站上有例程啊,稍微改一下就可以了.我自己运行过的,仿真器上测试3.4V,仿真结果是3424mV,这个误差 ...

哎,我对仿真器不熟,所以在画板等在上面跑效果
回复

使用道具 举报

13#
ID:466505 发表于 2024-8-29 14:08 | 只看该作者
hack2800 发表于 2024-8-29 11:45
哎,我对仿真器不熟,所以在画板等在上面跑效果

是用仿真器连接目标板才能运行的,我意思是供电也是仿真器提供的
回复

使用道具 举报

14#
ID:466505 发表于 2024-8-29 14:09 | 只看该作者
hack2800 发表于 2024-8-29 11:45
哎,我对仿真器不熟,所以在画板等在上面跑效果

可以上某一个宝买个SSOP20转插件的,然合随便用万用板搭电路
回复

使用道具 举报

15#
ID:114301 发表于 2024-8-29 14:39 | 只看该作者
你这个既然都仿真了,应该是最好的答案了,我自己要等得比较久,板还没画好,还要做板及先程序,先把分给了,感谢!
回复

使用道具 举报

16#
ID:1131074 发表于 2024-8-29 15:23 | 只看该作者
1. FT61E145的ADC模块,AD值  = (AD通道电压 / 参考电压)* 4096;
2. FT61E145有内部1/4VDD通道,也就是这个AD通道是输入电压是VDD的四分之一(芯片内部用1比3电阻分压);
3. FT61E145的AD参考电压是可以选择内部固定基准电压,记得是0.5V/2V/3V三种可选;
4. 所以在1中的式子, AD值、参考电压(选择内部固定基准)、4096(12位ADC)是已知数,就可以推算出AD通道电压,这个AD通道电压乘以4,就是VDD电压了;
回复

使用道具 举报

17#
ID:110791 发表于 2024-8-29 20:13 | 只看该作者
两100K电阻分压测量AD值 3.7V/2/3V*4096
回复

使用道具 举报

18#
ID:114301 发表于 2024-8-29 23:58 | 只看该作者
hack2800 发表于 2024-8-29 11:45
哎,我对仿真器不熟,所以在画板等在上面跑效果

我还以为仿真器上什么都不用接,然后在软件里能看到仿真出来是多少电压
回复

使用道具 举报

19#
ID:114301 发表于 2024-8-29 23:58 | 只看该作者
hcfat51h 发表于 2024-8-29 14:09
可以上某一个宝买个SSOP20转插件的,然合随便用万用板搭电路

好,谢谢
回复

使用道具 举报

20#
ID:114301 发表于 2024-8-29 23:59 | 只看该作者
乐于助人 发表于 2024-8-29 15:23
1. FT61E145的ADC模块,AD值  = (AD通道电压 / 参考电压)* 4096;
2. FT61E145有内部1/4VDD通道,也就是 ...

感谢详细的讲解,谢谢大家
回复

使用道具 举报

21#
ID:114301 发表于 2024-8-29 23:59 | 只看该作者
935107368 发表于 2024-8-29 20:13
两100K电阻分压测量AD值 3.7V/2/3V*4096

恩恩,这种知道,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表