基于NXP i.MX RT1021跨界MCU实现一个简单的波形采集
基于NXP i.MX RT1021跨界MCU实现一个简单的波形采集,使用了RT1021设计了一个简单的核心板,然后使用信号发生器产生波形,使用ADC采集,把数据通过串口输出给PC端的串口调试助手,然后在PC端的串口调试助手中显示波形。
标签
嵌入式系统
显示
开发板
NXP
WeDesign活动
RT1021
WeDesign第3期
ZHAO
更新2023-08-09
南京邮电大学
1132

一、项目介绍

基于NXP i.MX RT1021跨界MCU实现一个简单的波形采集,使用了RT1021设计了一个简单的核心板,然后使用信号发生器产生波形,使用ADC采集,把数据通过串口输出给PC端的串口调试助手,然后在PC端的串口调试助手中显示波形。

二、项目设计思路(含设计框图)

(在介绍之前,我原先是想参照官方给的设计文件,设计一个核心板,再去外接一个屏幕去设使用LVGL,但是因为调试和设计等问题,还有经验不充分,导致最后只有一个核心板,没有时间进行编程和学习,只能使用一个adc去实现一个简单的显示。

Fvi3matkKetIabkWkS_hr-btdvl6

硬件部分:

  1. 单片机选用规定的RT1021芯片,100引脚且LQFP封装,焊接时,先往一个引脚上锡,然后固定位置,接下来四个方位全部上锡,然后拖一下把多余的划掉。
  2. 参考了官方的手册,有一些设计需要注意,比如32k的晶振,电源设计也参考了官方套件。
  3. 基于核心板有两个按键,reset按键和BOOT按键,同时添加了四个led灯,以及一个电源灯和一个状态灯。
  4. 核心板实物测试过程比较简单,拿到板子后,从芯片开始焊接,使用手机开微距看引脚情况,然后优先芯片等器件,再焊接其他的阻容元件,最后连接typec简单看一下情况,然后进行各个电路的测试。

 

软件部分:

在项目中,由于功能较为简单,使用的资源并不多,只使用了一个adc和一个串口,基本上就没有其他的配置了,需要考虑的只有adc的采样率和最后串口如何在软件上显示数据,大致思路及操作如下。

  1. 环境配置:这个有两个方法,第一种是官方的环境,官网上有,SDK,MCUXpresso IDE ,我使用的是第二种,使用keil来配置,这个也比较简单,只需要去官方下一个RT1021的pack包,然后按照正常的导入方法即可。这个跟其他的配置差不多FkKEL0BHSdstMbmmkcTD1deNGao1
  2. 准备:首先去找例程,官方有一些例子,然后也可去找别人的资源,找到之后就照着例子进行移植,然后配置自己的文件夹,最后调用一些函数去实现功能就可以了。
  3. 运行流程:首先由ADC去采集信号发生器产生的信号,这一部分需要配置ADC的采样率,然后将采样的值,存进一个数组里面,然后驱动串口,做一个循环,把这个数组的数据发送给串口端并打印出来,这一部分需要对adc的值进行电压转换,最后PC的VOFA+成功接收到数据并且显示波形即可。
  4. 单独部分代码解析和总体调试解析(见下面)。

代码和注释;

#include "headfile.h"

uint16_t adc_value;
uint8_t uart_data_out;

void example_uart_callback(LPUART_Type *base, lpuart_handle_t *handle, status_t status, void *userData)
{
    if (kStatus_LPUART_RxIdle == status)
    {
        // 接收到数据后处理操作(此处暂时不处理)
    }

    handle->rxDataSize = 1;
    handle->rxData = &uart_data_out;
}

int main(void)
{
    DisableGlobalIRQ();
    board_init();
    
    // 初始化ADC_1通道0,采样精度为12位
    adc_init(ADC_1, ADC1_CH0_B12, ADC_12BIT);
    
    // 初始化UART_2,波特率为115200,TX引脚为B24,RX引脚为B25,并使能UART的接收中断
    uart_init(USART_2, 115200, UART2_TX_B24, UART2_RX_B25);
    uart_rx_irq(USART_2, 1);
    
    // 配置接收缓冲区,用于接收一个字节的数据
    uint8_t example_rx_buffer;
    lpuart_transfer_t example_receivexfer;
    example_receivexfer.dataSize = 1;
    example_receivexfer.data = &example_rx_buffer;
    
    // 注册UART的中断回调函数
    lpuart_handle_t example_g_lpuartHandle;
    uart_set_handle(USART_2, &example_g_lpuartHandle, example_uart_callback, NULL, 0, example_receivexfer.data, 1);
    
    EnableGlobalIRQ(0);
    
    while (1)
    {
        // 采集ADC数据
        adc_value = adc_convert(ADC_1, ADC1_CH0_B12);
        
        // 将ADC值通过串口发送
        uart_putchar(USART_2, (uint8_t)(adc_value >> 8)); // 高8位
        uart_putchar(USART_2, (uint8_t)adc_value);        // 低8位
        
        // 延时一段时间(可根据需要调整)
        systick_delay_ms(10);
    }
}

 

三、搜集素材的思路

首先本人没接触过恩智浦的,再加上没画过这种复杂一点的,所以学习的时间比较多,再加上调试花时间,所以最后没什么时间做程序,首先找资源,最先用的肯定是官方,官方的看完之后,因为那个套件很完善,我不需要这么多外设(暂时),所以又去找了别的核心板,然后我找到了前几年某个比赛的一个案例,接下来就是借鉴这些设计思路,然后因为我设计的时候布局没办法实现小尺寸,所以最后选择了大一点的布局,这样子方便布线。

四、画原理图、PCB制板过程中遇到的问题,以及解决方法

本次由于这个开发板相对麻烦,所以我很大情况下都是按照官方手册做的设计,再加上本人平时全做的软件编程,极少接触pcb设计,虽然上一次活动已经稍微熟悉kicad,但是设计经验不足还是有很多问题,设计和版本兼容问题等等。

  1. 还是7.0新版本的问题KICAD要使用pwr——flag连接
  2. 连接标签的时候没有对准拉出来的引脚,这个要求比较严格,所以DRC检查会报错。
  3. 个人经验问题,一开始不打算做标签化设计,但是最后因为元件数量多,还是改了标签,这个设计挺奇怪的。
  4. 错误四,原理图更新PCB的时候,有一些外部导入的库没有给引脚编号。
  5. 所有的封装库和符号库都是自建的,本次因为一些引脚封装不一样,还自己画了一些封装,还有硬禾官方的那个libirary也有很多,除此之外有很多资料来源于SnapEDA(我的库大多从这下载),

 

五、实现结果展示(调试过程中遇到什么问题)

核心板的正反两面

FilUxZ5EunZPmU123JVO35jimIDVFhe8DAGwFM33Sr1b1Bn_6mctJF9S

 

展示部分:

   板卡ADC采集信号,分别是三种波形,正弦波,三角波和方波,三角波还改变了一下幅值。

下面四张图按照顺序就是,正弦波,方波,三角波2v,三角波2.5V

FpYj_lO6qeWvG6YYjMUEwAOrmq6dFjxiMTekUJNJuP3nGVvuqXGVLFIYFtLlunBNLuNafeEyi8bq8wMMb_j2FkiM8dXAwZEooGm7k_WpAXOH7K7w

硬件调试问题:

目前有以下几个:

1、上电发现LED没亮,然后发现稳压二极管很烫,去查了芯片手册,发现不行,然后1N5819换成了1N4007,再测试,二极管引脚电压正常

2、点亮led的时候没有反应,然后发现焊接焊反了(不应该)

3、因为这次没有风枪,晶振没焊接好,然后导致测试的时候没反应,然后老样子,用示波器看晶振是否起振,发现焊接问题后重新焊接

 

软件调试问题:

本次软件调试较为简单,代码也非常容易,没有什么明显的问题,除了配置环境的时候麻烦一些,但是有教程,还算轻松。

 

六、在芯片设计过程中,遇到什么难题以及解决方法,或未来针对这个芯片的扩展项目

  1. 布局布线,总之,我学习的板子,其尺寸要小的很多,但是我自己设计的时候,我没办法做到这种程度,最终还是自己去改布局布线。
  2. 这次我本来想做LVGL的,就是个核心板,加上个屏幕,简单点就是实现一个UI交互,但是没办法,理想和现实不是一个东西,最终也只是简单完成了核心板,没有太多时间去做LVGL的编程,后续有时间学习一下LVGL再实现吧。

七、芯片的优势与局限

优势:

  1. 高性能:RT1021搭载了Cortex-M7内核,运行频率高达500MHz,拥有强大的计算和处理能力,适用于需要高性能的应用场景。

  2. 强大的外设:RT1021配备了丰富的外设,包括多个UART、SPI、I2C、USB等接口,以及多个定时器和PWM模块,满足了各种应用的需求。

  3. 强大的多媒体支持:RT1021集成了2D图形加速器和LCD控制器,支持多媒体应用,适合嵌入式图形界面和显示控制应用。

  4. 丰富的存储器:RT1021具备大容量的Flash存储器和RAM,可满足复杂应用程序和数据存储需求。

  5. 低功耗特性:虽然性能强大,但RT1021仍能在低功耗模式下运行,支持多种低功耗模式,有助于节能延长电池寿命。

  6. 完善的开发支持:NXP提供了完善的开发工具和支持,包括MCUExpresso IDE和SDK,方便开发人员快速开发应用。

局限性:

  1. 价格较高:由于其高性能和丰富的外设,RT1021的价格相对较高,可能不适合一些低成本的应用场景。
  2. 复杂性:RT1021是一款高性能MCU,其复杂性相对较高,对于初学者可能需要较长的学习和开发时间。

八、原理图/PCB图(放在项目附件)

这是大概的截图,原理图和PCB:

FrDvJKCu1VPqQsa_6I9rrjUhPrdWFmnpv9DAUemPAxlkZHdwMFN6MMA3

九、可编译下载的代码(放在项目的附件,用于验证)

代码注释都有解释了

全部完整资源见百度网盘链接:

链接:https://pan.baidu.com/s/1j9ZlGCRMLyUdoiHH7h34ig?pwd=6666 
提取码:6666

我不确定压缩完后的放在附件里面的文件是否可以正常使用

附件下载
RT1021_nxp.zip
文件大,见文档的百度网盘链接:链接:https://pan.baidu.com/s/1j9ZlGCRMLyUdoiHH7h34ig?pwd=6666 提取码:6666
团队介绍
逸!误!
团队成员
ZHAO
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号