首页 > 其他分享 >安信可小安派【Analog to digital】 ADC 基于AI-M6x

安信可小安派【Analog to digital】 ADC 基于AI-M6x

时间:2023-10-24 19:23:59浏览次数:33  
标签:bflb struct AI param M6x adc 可小安派 device ADC

今天来分享一下我的ADC学习心得,首先说明当前的教程适用于所有的搭载AI-m61或者m62芯片的小安派。

需要的库文件如

库文件 说明
bflb_adc.h ADC功能
log.h 用来打印日志
bflb_gpio.h 初始化GPIO
bflb_mtimer.h 延时
board.h 初始化系统

重要的方法如下:



/**
* @brief 初始化GPIO端口作为analog
*
* @param [in] dev device handle
* @param [in] pin gpio pin, use @ref GPIO_PIN
* @param [in] cfgset gpio config mask
*/
void bflb_gpio_init(struct bflb_device_s *dev, uint8_t pin, uint32_t cfgset);


/**
* @brief 初始化ADC功能
*
* @param [in] ADC外设
* @param [in] ADC 配置结构体
*/
void bflb_adc_init(struct bflb_device_s *dev, const struct bflb_adc_config_s *config);



/**
* @brief ADC配置结构体
*
* @param clk_div                adc时钟频率是否分频,频率越高精度越差,相反精度越高
* @param scan_conv_mode         ADC scan mode enable, ADC扫描模式,我不清楚干什么用的
* @param continuous_conv_mode   ADC continuous conversion enable ,Adc持续转换,不清楚干嘛额
* @param differential_mode      ADC differential mode enable , adc 差异区分模式, 不清楚干嘛的
* @param resolution             ADC resolution, use @ref ADC_RESOLUTION  adc转换精度
* @param vref                   ADC reference select, use @ref ADC_VREF  adc参考电压
*/
struct bflb_adc_config_s {
    uint8_t clk_div;
    uint8_t scan_conv_mode;
    uint8_t continuous_conv_mode;
    uint8_t differential_mode;
    uint8_t resolution;
    uint8_t vref;
};



/**
* @brief 绑定ADC和对用的通道
*
* @param [in] dev device handle
* @param [in] 所有的通道
* @param [in] 你所要使用的通道
* @return Zero on success; a negated errno value on failure
*/
int bflb_adc_channel_config(struct bflb_device_s *dev, struct bflb_adc_channel_s *chan, uint8_t channels);


这里定义的是所有的ADC通道,我这里只定义了 0 通道,就是gpio20
struct bflb_adc_channel_s chan[] = {
#if TEST_ADC_CHANNEL_0
    {.pos_chan = ADC_CHANNEL_0,
     .neg_chan = ADC_CHANNEL_GND},
#endif
};



/**
* @brief 开始转换ADC
*
* @param [in] dev device handle
*/
void bflb_adc_start_conversion(struct bflb_device_s *dev);



/**
* @brief 获取ADC转换结果
*
* @param [in] dev device handle
* @return conversion value
*/
uint32_t bflb_adc_read_raw(struct bflb_device_s *dev);



/**
* @brief 结束转换ADC
*
* @param [in] dev device handle
*/
void bflb_adc_stop_conversion(struct bflb_device_s *dev);


/**
* @brief 解析raw adc转换结果到毫伏, 以数字形式展示
*
* @param [in] dev device handle
* @param [in] bflb_adc_read_raw 方法转换的结果
* @param [out] result pointer to save parse result, 转换后保存的结果,需要自己定义
* @param [in] count count to parse。 不清楚干什么用的 传递0 即可
*/
void bflb_adc_parse_result(struct bflb_device_s *dev, uint32_t *buffer, struct bflb_adc_result_s *result, uint16_t count);

#include "bflb_mtimer.h"
#include "board.h"
#include "bflb_adc.h"
#define DBG_TAG "MAIN"
#include "log.h"
#include "bflb_gpio.h"

struct bflb_device_s *adc;
struct bflb_device_s *gpio;

#define TEST_ADC_CHANNEL_0 0

// 定义所有的adc通道
struct bflb_adc_channel_s chan[] = {
#if TEST_ADC_CHANNEL_0
    {.pos_chan = ADC_CHANNEL_0,
     .neg_chan = ADC_CHANNEL_GND},
#endif
};

int main(void)
{
    board_init();

    gpio = bflb_device_get_by_name("gpio");
    // 初始化IO 20 作为 analog
    bflb_gpio_init(gpio, GPIO_PIN_20, GPIO_ANALOG | GPIO_SMT_EN | GPIO_DRV_0);
    adc = bflb_device_get_by_name("adc");
    // 原始转换数据
    volatile uint32_t raw_data;
    // adc 配置
    struct bflb_adc_config_s cfg;
    // 始终分频, 分频约低速度越快,精度越低。 当前为最高分频,速度最快精度最低
    cfg.clk_div = ADC_CLK_DIV_32;

    // 剩下这三个参数没有搞明白实际作用
    cfg.scan_conv_mode = true;
    cfg.continuous_conv_mode = false;
    cfg.differential_mode = false;
    // 设置adc精度
    cfg.resolution = ADC_RESOLUTION_16B;
    // adc参考电压
    cfg.vref = ADC_VREF_3P2V;
    // 初始化ADC
    bflb_adc_init(adc, &cfg);
    // 绑定ADC通道
    bflb_adc_channel_config(adc, chan, TEST_ADC_CHANNEL_0);

    while (1)
    {
        // 转换
        bflb_adc_start_conversion(adc);
        // 结束转换
        bflb_adc_stop_conversion(adc);
        //获取原生转换结果
        raw_data = bflb_adc_read_raw(adc);
        struct bflb_adc_result_s result;
        printf("raw data:%08x\r\n", raw_data);
        //解析raw 转换结果
        bflb_adc_parse_result(adc, (uint32_t *)&raw_data, &result, 1);
        printf("postive values is %d, negative is : %d  mv is %d \r\n", result.pos_chan, result.neg_chan, result.millivolt);
        //适当的延时
        bflb_mtimer_delay_ms(20);
    }
}

  转换结果如下:

 

标签:bflb,struct,AI,param,M6x,adc,可小安派,device,ADC
From: https://www.cnblogs.com/Mzcc/p/17785565.html

相关文章

  • 安信可开发环境构建-基于Ai-WB2系列 和 Ai-M61 或 Ai-M62 (环境上下文切换)
    首先,对于Ai-WB2系列环境的构建官方文档已经讲的非常明白了,这里不做阐述如下链接所示https://blog.csdn.net/Boantong_/article/details/128480919 本人亲自测试可行,请严格follow官方的steps。另外需要注意的是,为了避免错误,尽量不要自己从GIT或者Gitee拉取项目。使用上述链接内,官......
  • 安信可小安派【IO中断】基于AI-M6X MCU
    最近在研究小安派的中断。昨晚写了一个Demo来进行测试。关于什么是中断这里已经讲的很清楚了。首先贴上引用参考。第一个是泽哥写的中断:http://ai-thinker.com/forum.php?mod=viewthread&tid=562&highlight=%E4%B8%AD%E6%96%AD&_dsign=fe47e0a0复制代码这个是我自己写......
  • 第 73 届前端早早聊大会 - 前端搞 AI - 本周六 AI 之夜
    一、前端早早聊大会前端早早聊大会,前端成长新起点,帮你提前三星期,站在新的起跑线。目标:单主题、多讲师、用得上、听得懂、抄得走主办方:前端早早聊大会已经举办86期,86个周末,86个话题,600位讲师,600场技术分享,600个小时直播。查看历届大会行程:https://www.zaozao.run/course历届......
  • Containerd命令行
    版本:containerd最新版本V1.5.5一、管理工具:ctr名字:ctr (containerdCLI)用法:CTR[globaloptions]command[commandoptions][arguments…]描述:CTR是一个不受支持的用于交互的调试和管理客户机使用容器守护进程。因为它不受支持,选项和操作不能保证向后兼容或容器项目从一个......
  • python selenium 利用pyautogui+ActionChains 完美解决我的滑块验证登录问题
    在解决滑块验证的时候不知道什么原因明明是滑块已经对上了,代码执行就是会校验不通过,手动时就可以,中间也做利用ActionChains模块减速滑动轨迹的操作,但仍然不行,后面在执行代码中添加了pyautogui模块使鼠标悬停在屏幕中的某个点而不改变ActionChains鼠标的定位后终于每次都能通过了fro......
  • 安防监控视频汇聚平台EasyCVR增加AI算法列表接口的实现方法
    安防监控视频汇聚平台EasyCVR基于云边端一体化架构,具有强大的数据接入、处理及分发能力,可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能分析等功能。平台既具备传统安防监控的能力,也支持提供AI算力算法接入的能力。今天我们......
  • 智慧垃圾站:AI视频智能识别技术助力智慧环保项目,以“智”替人强监管
    一、背景分析建设“技术先进、架构合理、开放智能、安全可靠”的智慧环保平台,整合环境相关的数据,对接已建业务系统,将环境相关数据进行统一管理,结合GIS技术进行监测、监控信息的展现和挖掘分析,实现业务数据的快速收集、全面整合、深度挖掘、智能分析、按需共享,发挥数据资源价值,构建......
  • 智慧垃圾站:AI视频智能识别技术助力智慧环保项目,以“智”替人强监管
    一、背景分析建设“技术先进、架构合理、开放智能、安全可靠”的智慧环保平台,整合环境相关的数据,对接已建业务系统,将环境相关数据进行统一管理,结合GIS技术进行监测、监控信息的展现和挖掘分析,实现业务数据的快速收集、全面整合、深度挖掘、智能分析、按需共享,发挥数据资源价值,构......
  • 安防监控视频汇聚平台EasyCVR增加AI算法列表接口的实现方法
    安防监控视频汇聚平台EasyCVR基于云边端一体化架构,具有强大的数据接入、处理及分发能力,可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能分析等功能。平台既具备传统安防监控的能力,也支持提供AI算力算法接入的能力。今天......
  • GPT-GNN: Generative Pre-Training of Graph Neural Networks
    目录概符号说明GPT-GNN代码HuZ.,DongY.,WangK.,ChangK.andSunY.GPT-GNN:Generativepre-trainingofgraphneuralnetworks.KDD,2020.概比较早的一篇图预训练模型.符号说明\(G=(\mathcal{V},\mathcal{E},\mathcal{X})\),某个图,其中\(\mathcal{X}\)......