国民技术
直播中

hehung

9年用户 659经验值
擅长:嵌入式技术
私信 关注
[经验]

【国民技术N32项目移植】5. ADC应用以及跳坑总结

过往分享

【国民技术N32项目移植】1. 新建工程+LED与按键跳坑总结
【国民技术N32项目移植】2. 硬件IIC驱动OLED
【国民技术N32项目移植】3. 硬件IIC驱动RT-Thread OS SSD1306软件包
【国民技术N32项目移植】4. 硬件定时器实现2ms定时

前言

本文讲解如何使用N32G45x的ADC。

在N32G45XVL-STB上使用ADC有一个坑, 这也是导致我调试ADC花费了很多时间的原因,关于这部分本文会细说。

本文基于RT-Thread studio开发,搭载RT-Thread OS。

硬件连接

N32G45x有4路ADC,没录ADC有多个通道,可以参考数据手册了解。
我的项目中只会使用到1个ADC,选取了ADC1的IN2,也就是PA1端口作为ADC输入端口。
硬件连接:
ADC1 IN2 - PA1
2.jpg

软件开发

打开配置界面,使能ADC硬件中的ADC1。
1.jpg

使用adc1,channel为2,代码如下:

/* ADC1 IN2 - PA1 */

#include <rtthread.h>
#include <rtdevice.h>

#define ADC_DEV_NAME        "adc1"      /* ADC 设备名称 */
#define ADC_DEV_CHANNEL     2           /* ADC 通道 */
#define REFER_VOLTAGE       330         /* 参考电压 3.3V,数据精度乘以100保留2位小数*/
#define CONVERT_BITS        (1 << 12)   /* 转换位数为12位 */

static int adc_vol_sample(int argc, char *argv[])
{
    rt_adc_device_t adc_dev;
    rt_uint32_t value, vol;
    rt_err_t ret = RT_EOK;

    /* 查找设备 */
    adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME);
    if (adc_dev == RT_NULL)
    {
        rt_kprintf("adc sample run failed! can't find %s device!\n", ADC_DEV_NAME);
        return RT_ERROR;
    }

    /* 使能设备 */
    ret = rt_adc_enable(adc_dev, ADC_DEV_CHANNEL);

    /* 读取采样值 */
    value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL);
    rt_kprintf("the value is :%d \n", value);

    /* 转换为对应电压值 */
    vol = value * REFER_VOLTAGE / CONVERT_BITS;
    rt_kprintf("the voltage is :%d.%02d \n", vol / 100, vol % 100);

    /* 关闭通道 */
    ret = rt_adc_disable(adc_dev, ADC_DEV_CHANNEL);

    return ret;
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(adc_vol_sample, adc voltage convert sample);

编译下载之后打开串口调试助手,输入adc_vol_sample就可以采集一次ADC1 IN2的值。
注意:adc_vol_sample后边需要跟一个回车,一起发送,不然不会被识别。

测试效果

代码编写好了之后,直接测试,但是发现不管ADC输入电压是多少,采集出来都是4095或者0。
最开始以为是RT-Thread适配的底层驱动代码初始化有问题,但是梳理了一遍之后没发现有什么问题,然后使用了官方提供的ADC驱动示例下载到板子里面去也是一样的情况。

最后查看了数据手册,发现有VERF+以及VERF-引脚,结合原理图,尝试了将VERF+(VERFP)接3.3V,VERF-(VERFN)接GND,之后才能够正常采集ADC数据了。
3.jpg

怎么说呢?这知道这样设计的目的是什么,但是对使用者而言,确实不便,而且这两个引脚也没有焊接排针,过程简直一言难尽。

下面是测试效果:
4.jpg

更多回帖

发帖
×
20
完善资料,
赚取积分