加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • 简介
    • 扩展 STC8H8K 外部 32k 字节 RAM
    • 硬件调试
    • 采集实际信号
    •  
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

总线错乱

2020/04/30
202
阅读需 11 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

简介

RAM 是计算机系统中保存临时结果的器件,它的大小也决定了计算机处理数据的规模。在嵌入式计算机(单片机中),由于受到价格、功耗等原因,内部的 RAM 的容量往往比较小,比如从几百字节到十几 k 字节不等。这能够满足大部分单片机应用的需求了。

但是在一些特殊的应用情况下,有时需要大容量的 RAM 来存储采集到的数据,或者缓存通信数据。此时则需要通过外扩内存来完成。比如最近实验声音信标信号[1]相关系统测试和算法优化,则需要采集到多路音频信号。此时需要通过外扩 RAM 来解决。

通常静态 RAM 芯片接口包括有数据、地址和控制总线,与单片机对应的端口相连便可以加成数据的写入和读出。

MCU 外部 RAM

 

有的单片机在扩展外部 RAM 的时候,为了节省有限的 IO 端口,通过使用外部锁存器来复用同一八位地址端口来扩展地址总线到 16 位的目的。比如 8051 单片机。这样设计的代价就是需要增加外部锁存器芯片 74LS372。

▲ 8051 外部数据总结接口

 

虽然数据总线和地址总线按照逻辑都标有数据位的顺序:比如 16 位地址总线按照 A0~A15,8 位数据总线表明 D0-D7。但是在访问静态 RAM 的时候,数据总线,地址总线内部的这些位的顺序是可以任意调整的。

比如在下面设计的单片机系统中,为了满足能够尽量减少 PCB 布线的交叉,就是通过调整数据线和地址总线内部位的顺序来满足的。

扩展 STC8H8K 外部 32k 字节 RAM

 

1. 设计说明

STC8H8K 单片机具有 16 路 12 位的 AD 转换器,在本实验中用于采集信标发出的 Chirp 声音,并传送给计算机加以处理。

在博文“基于 STC8G8K64U 三通道高速 ADC 采集板[2]"给出了利用 STC8H8K 内部的 8kRAM 进行声音信号采集电路设计方案。但是受限于内有 8KRAM 的空间限制,所能够采集音频信号的路数和时间长度都无法满足研究的目的。所以此次通过外部扩一片 32k 字节的 SRAM 来扩展信号采集的容量。

同样通过 WiFi-UART 转换模块,实现采集数据与 PC 机之间的数据传送,这一点设计与前面博文中的设计方案是一致的。

2. 原理图

所使用的 STC8H8K 芯片的封装为 TSOP48。使用 P2 端口作为数据总结,使用 P0,P4 端口作为地址总线。不需要外部的锁存器。

使用 UART3 与 WiFi-UART 模块通信。将 ADC 中的 AD0~AD2 引到输入端口接收外部被采集的信号。

具体的电路图如下图所示:

▲ 实验板的原理图

 

外部接口设计:

(1) ISP 端口:

序号 符号 功能
1 VCC +5V 工作电源
2 GND 工作电源地
3 TXD MCU 串口输出
4 RXD MCU 串口输入

(2) ADC 端口:

序号 符号 功能
1 ADC0 ADC 通道 0
2 ADC1 ADC 通道 1
3 ADC2 ADC 通道 2,可以作为普通 IO

2. PCB 板

这里需要需要说明的是,为了能够适应快速制版的实验需要。使用了单面 PCB 板工艺。为了消除在布线中的交叉部分(因为交叉部分则需要过孔和双面布线),对数据总线和地址总线的顺序进行了调整,由此可以仅仅使用一面 PCB 便将所有的数据和地址总线完成连接。

下面给出了具体的 PCB 连接方式。前面原理图中显示了调整后(总线错乱)的地址线和数据线的逻辑设计。

▲ 使用单面覆铜板制作实验电路板

 

实际电路设计工程中,有的时候为了方便布线,需要对引线的顺序进行调整。在复杂电路设计中,优势会通过 FPGA、CPLD 等大规模可编程逻辑器件来对芯片外部引线的顺序进行调整,方便进行布线。当然这也需要付出设计的复杂度和额外增加的芯片价格。

硬件调试

1. 扩展 RAM 实验

通过设计,电路板腐蚀、焊接与安装,很快得到实验电路。下面对其进行测试。

▲ 通电之后的实验电路板

 

STC8H 单片机硬件编程选项配置如下:

▲ 单片机编程硬件选项参数

 

单片机工作的主要指标:

  • 内部工作主频:40MHzISP UART1 波特率:500000bps;WiFI-UART 波特率:460800bps

该电路板中的硬件设计和实验软件可以在 CSDN 中下载。

(1)访问外部 RAM 时间长度

使用 MCU 的端口来测量访问外部 RAM 的时间,下面是测量写入外部 RAM 的时间,为 534ns(包括对 FLAG_PIN 的操作时间。)

            ON(FLAG_PIN);            
            ExtSramWrite(0x0, 0x0);            
            OFF(FLAG_PIN);

▲ 写入外部 RAM 数据时间长度

 

使用相同的方法,测试 ExtRamRead()的时间为 490ns。

2. AD 转换实验

(1)AD 的通道设置:

使用了 P1.0, P1.1 来采集两路外部模拟信号

▲ ADC 通道设置

 

(2)AD 转换时间:

  1. AD 参数设置:STC8H 内部转换启动 AD 转换时间:通过 ADC2(P1.4)输出脉冲来测量。测量结果:两次 ADC 转换,时间为 5 微秒;

▲ P1.4 脉冲表明两次 AD 转换之间的时间

        ON(FLAG_PIN);
        ADCSetChannel(0);
        g_nADResult1 = ADCConvert();
        ADCSetChannel(1);
        g_nADResult2 = ADCConvert();
        OFF(FLAG_PIN);

采集实际信号

 

1. 采集两路测试信号

下图显示了采集两路测试信号的波形:

▲ 采集两路测试信号:正弦波以及三角波信号

 

2. 采集 Chirp 音频信号

采集两路分别来自于调频接收模块以及麦克风传感器的 Chirp 信号并求取它们的相关信号,来判断时间延迟。

下图是采集到的声音信号,长度为 0.8192 秒。包含了两个 Chirp 信号周期的数据。

▲ 采集的 Chirp 声音信号使用相关运算,获得两个信号之间的相关信号。

▲ 两个信号的相关信号

通过判断中间峰值的位置,可以获得声音传播过程中的时间延迟:

▲ 两个信号的相关信号中心位置波形

 

公众号留言

卓大大,实话实说,这次比赛实在是太太太太太赶了,学校大概六月初左右返校,然后还要准备期末考试。我们队伍参加的是直立节能组。别的组别或许还可以在没有仪器的情况下就把车做出来,但是我们是万万不可能的。充电板和车模一旦有一点问题更正周期是以周计算的,按照以往学长的进度,正常比赛留给软件调试的时间也不过就是半个月左右,现在准备时间压缩到两个月,这次规则的软件又比以往都要难一些,感觉除非开学之后每天通宵,不然实在是不能确保小车的稳定性。

求大大考虑考虑节能的兄弟们。

 

回复:现在,我只能说:兄弟们加油。

卓老师好,深夜打扰。请问这款芯片可以在信标组中使用,还是说只要涉及到控制的微处理器都要用 infineon 的呢?

电机控制单片机

 

回复:这款芯片如果只是专用于电机驱动设计,不参与其它运动控制,是可以应用到信标组别的。

卓老师,我听说了一种想法,有些同学在群里讨论用 1064 自制 openmv,事实上偷偷用 1064 跑信标,我虽然没有验证过可行性,但是不希望有这种想法伤害到比赛的公平性,也不愿意看到 openmv 因此而被禁止,所以也跟卓大提及一下这种想法。

再提出一个建议:音标比赛只允许使用成品 openmv

▲ 自制的 OpenMVP 模块

 

回复:谢谢你反映的这种情况,以及提出的建议。

参考资料

[1]声音信标信号: https://blog.csdn.net/zhuoqingjoking97298/category_9689868.html

[2]基于 STC8G8K64U 三通道高速 ADC 采集板: https://zhuoqing.blog.csdn.net/article/details/105731860

相关推荐

电子产业图谱

公众号TsinghuaJoking主笔。清华大学自动化系教师,研究兴趣范围包括自动控制、智能信息处理、嵌入式电子系统等。全国大学生智能汽车竞赛秘书处主任,技术组组长,网称“卓大大”。