0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

N32L40XCL-STB开发板模块评测:ADC实践之虚拟示波器实现

冬至子 来源:qinyunti 作者:qinyunti 2023-09-26 15:27 次阅读

1.前言说明

1.1. 本章内容
MCU带12bit 4.5Msps ADC,这在通用MCU中采样率是比较高的,适合做模拟前端。
本文先对ADC模块进行简单介绍,然后搭建基于MDK和RT-Thread的开发环境,实现ADC信号采集,最终实现虚拟示波器的Demo。

1.2. 模块介绍
参考《CN_UM_N32L40x Series User Manual_V2.pdf》的《17 模拟数字转换( ADC)》

1 个 ADC,支持单端输入和差分输入 ,12 位逐次逼近型。
19 个通道,可测量 16 个外部和 3 个内部信号源
内部通道支持 TempSensorVREFINT(内部 1.2V BG)、 VREFBUFF(2.048V)
每个通道的 A/D 转换有四种执行模式:单次、连续、扫描或间断
带内嵌数据一致性的数据对齐。 ADC 转换值存储(左对齐/右对齐)在 16 位数据寄存器
可以通过模拟看门狗检测输入电压是否在用户定义的高/低阈值内
ADC的输入时钟的最大频率为 64MHz。
支持 12 位、 10 位、 8 位、 6 位分辨率。
12bit 分辨率下最高采样速率 4.57MSPS。
10bit 分辨率下最高采样速率 5.33MSPS。
8bit 分辨率下最高采样速率 6.4MSPS。
6bit 分辨率下最高采样速率 8MSPS。
支持触发采样,包括 EXTI/TIMER。
各通道的采样时间间隔可编程
支持自校准。
支持 DMA
中断生成:转换结束,注入转换结束,模拟看门狗事件
支持内部参考电压(2.048V)
ADC 支持转换的电压在 VREF-和 VREF+之间。
ADC 的工作电压在 1.8V 到 3.6V 之间。
可以外部触发注入转换和规则转换。
其框图如下

1.jpg

其他相关信息可以参考手册不再赘述。

1.3. 开发软件
开发环境:MDK+RT-Thread
下载工具:板载NsLink

2.步骤说明

2.1. 导入ADC测试工程
下载ftp://58.250.18.138/1-Microcontrollers/N32L40xxx_V2.1.0.zip解压

双击N32L40xxx_V2.1.06-软件开发套件(Software Development Kit)Nationstech.N32L40x_DFP.1.0.0.pack

1.jpg

打开
N32L40xxx_V2.1.06-软件开发套件(Software Development Kit)Nationstech.N32L40x_Library.1.2.1projectsn32l40x_EVALexamplesRT_ThreadRT_Thread12_ADC_DEVICE_REGISTERMDK-ARMADC_DEVICE_REGISTER.uvprojx

选择device

1.jpg

2.jpg

3.jpg

如果提示找不到文件context_rvds.S是因为工程路径中文的原因,工程路径放在英文路径即可。

选择仿真器烧录算法

1.jpg

2.jpg

3.jpg

下载程序可以看到,串口打印如下(串口参数115200-8-n-1)

1.jpg

2.2. ADC代码介绍
ADC驱动使用的是RT-Thread的设备框架。

我们从main.c的main函数入口,可以看到创建了两个线程
test0_thread_entry和test1_thread_entry其中test1_thread_entry线程用于进行ADC采集。

代码如下:

static void test1_thread_entry(void* parameter)
{
rt_adc_device_t adc_dev;
rt_uint32_t adc_converted_value = 0;
adc_dev = (rt_adc_device_t)rt_device_find("adc");
rt_adc_enable(adc_dev, ADC_CH_6_PA5);
rt_adc_enable(adc_dev, ADC_CH_7_PA6);
if(adc_dev)
{
while(1)
{
adc_converted_value = rt_adc_read(adc_dev, ADC_CH_6_PA5);
rt_kprintf("the PA5 voltage value is %drn", adc_converted_value);
rt_thread_delay(50); //delay 500ms
adc_converted_value = rt_adc_read(adc_dev, ADC_CH_7_PA6);
rt_kprintf("the PA6 voltage value is %drn", adc_converted_value);
rt_thread_delay(50); //delay 500ms
}
}
}
可以看到由于使用了驱动框架代码很简单。
rt_adc_device_t adc_dev; 定义设备变量
rt_uint32_t adc_converted_value = 0; 定义变量用于获取采样值
adc_dev = (rt_adc_device_t)rt_device_find(“adc”);查找设备
rt_adc_enable(adc_dev, ADC_CH_6_PA5);
rt_adc_enable(adc_dev, ADC_CH_7_PA6); 使能这两个通道
如果查找到了设备adc_dev则循环采样
adc_converted_value = rt_adc_read(adc_dev, ADC_CH_6_PA5); 采样
再打印延时继续ADC_CH_7_PA6通道的采样。

相关API可以参考RT-Thread官网这里不再赘述。

3.基于ADC实现虚拟示波器

上一节我们实现了ADC的采集,基于此我们可以实现一些有意思的项目,比如将上述采集到的信号发送到PC端进行处理显示,那么就可以实现示波器的功能,这一篇就来实现该Demo。

3.1 代码实现
先将采集到的信号按照一定的格式发送到PC端
上报格式为 “/ 数据,数据 /” 的形式
修改如下,两路采集后一起上报。

static void test1_thread_entry(void* parameter)
{
rt_adc_device_t adc_dev;
rt_uint32_t adc_converted_value1 = 0;
rt_uint32_t adc_converted_value2 = 0;
adc_dev = (rt_adc_device_t)rt_device_find("adc");
rt_adc_enable(adc_dev, ADC_CH_6_PA5);
rt_adc_enable(adc_dev, ADC_CH_7_PA6);
if(adc_dev)
{
while(1)
{
adc_converted_value1 = rt_adc_read(adc_dev, ADC_CH_6_PA5);
//rt_kprintf("the PA5 voltage value is %drn", adc_converted_value);
//rt_thread_delay(50); //delay 500ms
adc_converted_value2 = rt_adc_read(adc_dev, ADC_CH_7_PA6);
//rt_kprintf("the PA6 voltage value is %drn", adc_converted_value);
//rt_thread_delay(50); //delay 500ms
rt_kprintf("/ %d,%d /rn", adc_converted_value1,adc_converted_value2);
rt_thread_delay(1); // 上报速率为约1kHz(没有考虑采样和发送时间)
}
}
}

3.2 上位机配置

我们可以使用一款比较好用的开源的串口可视化工具Serial Studio,可以从以下地址下载安装,安装过程很简单,不再赘述。

打开Serial Studio软件,按照如下过程配置

点击控制台标签,先配置串口参数,点击连接,可以看到串口打印信息

1.jpg

点击json编辑器,创建新项目,设置如下的信息
名字为osc,分割符号为,
开始介乎是符号为/和/ ,对应我们的上报格式 “/ 数据,数据 /” 的形式

1.jpg

点击拯救(翻译的问题)
保存文件

1.jpg

2.jpg

3.jpg

1.jpg

2.jpg

3.3 测试
使用变阻器分压接到PA5和PA6模拟电压变化,进行测试。
点击仪表盘可以看到曲线显示:

1.jpg

改变变阻器位置,可以看到曲线的变化。
得益于ADC的精度和采样率都比较高,可以实现具备使用价值的虚拟示波器。目前的代码仅作延时,实际上如果产品化更具备实用价值我们可以实用DMA方式采集,保存到缓存区然后通过USB高速接口发送到PC端进行解析显示,这样就可以达到ADC的最大带宽8MSPS。这个采样率已经可以比肩一般手持示波器了。

4.章节总结

以上完成了ADC的测试,并实现了一个有一定实用价值的Demo. 从以上可以看出从应用程序开发角度来说,使用RT-Thread的设备框架非常方便,几行简单的代码即可完成ADC采集。
另外Nation的文档和例程也是做的比较好和规范的,所以使用起来也比较简单。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 仿真器
    +关注

    关注

    14

    文章

    988

    浏览量

    82996
  • 数据寄存器
    +关注

    关注

    0

    文章

    32

    浏览量

    7555
  • 虚拟示波器
    +关注

    关注

    2

    文章

    67

    浏览量

    27525
  • ADC采样
    +关注

    关注

    0

    文章

    125

    浏览量

    12710
  • RT-Thread
    +关注

    关注

    31

    文章

    1149

    浏览量

    38898
收藏 人收藏

    评论

    相关推荐

    N32L40XRQ-STB开发板硬件使用指南

    N32L40XRQ-STB开发板硬件使用指南开发板用于国民技术股份有限公司32位N32L40XRQ系列MCU的开发。本文档详细描述了
    发表于 11-01 06:47

    N32L40XRL-STB开发板硬件使用指南

    N32L40XRL-STB开发板硬件使用指南开发板用于国民技术股份有限公司32位N32L40XRL系列MCU的开发。本文档详细描述了
    发表于 11-01 06:53

    N32L40XML-STB开发板硬件使用指南

    N32L40XML-STB开发板硬件使用指南开发板用于国民技术股份有限公司32位N32L40XML系列MCU的开发。本文档详细描述了
    发表于 11-01 08:27

    N32L40XKQ-STB开发板硬件使用指南

    N32L40XKQ-STB开发板硬件使用指南开发板用于国民技术股份有限公司32位N32L40XKQ系列MCU的开发。本文档详细描述了
    发表于 11-01 08:21

    N32L40XCQ-STB开发板硬件使用指南

    N32L40XCQ-STB开发板硬件使用指南开发板用于国民技术股份有限公司32位N32L40XCQ系列MCU的开发。本文档详细描述了
    发表于 11-01 08:14

    N32G43XCL-STB开发板硬件使用手册

    N32G43XCL-STB开发板用于国民技术股份有限公司高性能32位N32G43XCL系列芯片的样片开发。本文档详细描述了N32G43XCL-STB
    发表于 11-02 06:13

    N32L43XCL-STB开发板硬件使用手册

    N32L43XCL-STB开发板用于国民技术股份有限公司高性能32位N32L43XCL系列芯片的样片开发。本文档详细描述了N32L43XCL-STB
    发表于 11-02 08:10

    N32L40XCL-STB开发板硬件使用手册

    N32L40XCL-STB开发板用于国民技术股份有限公司高性能32位N32L40XCL系列芯片的样片开发。本文档详细描述了N32L40XCL-STB
    发表于 11-02 06:35

    N32G43XCL-STB开发板硬件使用手册

    N32G43XCL-STB开发板用于国民技术股份有限公司高性能32位N32G43XCL系列芯片的样片开发。本文档详细描述了N32G43XCL-STB
    发表于 11-02 08:12

    N32L43XCL-STB (LQFP48) 开发板

    N32L43XCL-STB (LQFP48) 开发板
    发表于 11-10 19:51 1次下载
    N32L43<b class='flag-5'>XCL-STB</b> (LQFP48) <b class='flag-5'>开发板</b>

    N32L40XCL-STB (LQFP48) 开发板

    N32L40XCL-STB (LQFP48) 开发板
    发表于 11-10 19:51 1次下载
    <b class='flag-5'>N32L40XCL-STB</b> (LQFP48) <b class='flag-5'>开发板</b>

    N32G43XCL-STB (LQFP48) 开发板

    N32G43XCL-STB (LQFP48) 开发板
    发表于 11-10 19:51 0次下载
    N32G43<b class='flag-5'>XCL-STB</b> (LQFP48) <b class='flag-5'>开发板</b>

    N32L40XCL-STB 开发板模块评测任务大挑战

    评测任务挑战活动,让开发者小伙伴们互相协作,对开发板的每个模块功能进行评测(可以自己外接外设,方式不限),以及编写所需的
    的头像 发表于 03-28 03:25 635次阅读

    N32L40XCL-STB开发板模块评测任务大挑战之UART

    本文主要对通过RT-Thread Studio对国民技术开发板N32L40XCL-STB 进行UART外设配置,实现开发板串口功能。
    的头像 发表于 08-09 15:25 524次阅读
    <b class='flag-5'>N32L40XCL-STB</b><b class='flag-5'>开发板</b><b class='flag-5'>模块</b><b class='flag-5'>评测</b>任务大挑战之UART

    N32L40XCL-STB开发板评测】I2C接口测试

    32L40XCL集成了2个独立的I2C总线接口,它提供多主机功能,控制所有I2C总线特定的时序
    发表于 08-11 14:37 381次阅读
    【<b class='flag-5'>N32L40XCL-STB</b><b class='flag-5'>开发板</b><b class='flag-5'>评测</b>】I2C接口测试