跳转到主要内容

技术

设计低功耗MCU系统 软硬兼施是关键

电子产品的低功耗问题经常让产品设计者头痛而又不得不面对。以单片机(MCU)为核心的系统,其功耗主要由单片机功耗和单片机外围电路功耗组成。要降低单片机系统的功耗,需要从硬件和软件两方面入手。
  
<strong>硬件设计考虑因素</strong>
  
要满足单片机系统的低功耗要求,选用具有低功耗特性的单片机可以很容易实现。因为具有低功耗特性的单片机可以大大降低系统功耗,这可以从单片机的供电电压、内部结构、系统时钟和低功耗模式等几方面来考察一款单片机的低功耗特性。一般来讲,用户在选择技术供应商和产品过程中,需要对下面的一些重要硬件参数进行更加深入的考量:
  
<strong>选择简单的CPU内核</strong>
  

如何做好ESD保护,让电路免受“骚扰”?

先来谈静电放电(ESD: Electrostatic Discharge)是什么?这应该是造成所有电子元器件或集成电路系统造成过度电应力破坏的主要元凶。因为静电通常瞬间电压非常高(>几千伏),所以这种损伤是毁灭性和永久性的,会造成电路直接烧毁。所以预防静电损伤是所有IC设计和制造的头号难题。

静电,通常都是人为产生的,如生产、组装、测试、存放、搬运等过程中都有可能使得静电累积在人体、仪器或设备中,甚至元器件本身也会累积静电,当人们在不知情的情况下使这些带电的物体接触就会形成放电路径,瞬间使得电子元件或系统遭到静电放电的损坏(这就是为什么以前修电脑都必须要配戴静电环托在工作桌上,防止人体的静电损伤芯片),如同云层中储存的电荷瞬间击穿云层产生剧烈的闪电,会把大地劈开一样,而且通常都是在雨天来临之际,因为空气湿度大易形成导电通到。

一块好的PCB板是怎么练成的呢?

大家都知道做PCB板就是把设计好的原理图变成一块实实在在的PCB电路板,请别小看这一过程,有很多原理上行得通的东西在工程中却难以实现,或是别人能实现的东西另一些人却实现不了,因此说做一块PCB板不难,但要做好一块PCB板却不是一件容易的事情。

微电子领域的两大难点在于高频信号和微弱信号的处理,在这方面PCB制作水平就显得尤其重要,同样的原理设计,同样的元器件,不同的人制作出来的PCB就具有不同的结果,那么如何才能做出一块好的PCB板呢?根据我们以往的经验,想就以下几方面谈谈自己的看法:

<strong>1、要明确设计目标</strong>

ARM汇编伪指令介绍

在ARM处理器汇编语言程序设计里,有一些特殊的指令助记符。这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊的指令助记符为伪指令,它们所完成的操作称为伪操作。

伪指令在源程序中的作用是为完成汇编程序做各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成了。在ARM处理器的汇编程序中,大体有如下几种伪指令:符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令及其他伪指令。

伪操作符可以分为以下几类。

<strong>1)数据定义伪操作符

数据定义伪操作符主要包括LTORG、MAP、DCB、FIELD、SPACE、DCQ、DCW等,主要用于数据表定义、文字池定义、数据空间分配等。常用的有DCB/DCQ/DCW分配一段字节/双字/字内存单元,并且将它们初始化。

在Cortex-M系列上如何准确地做us级延时?

前几天刚好同事问起在Cortex-M上延时不准的问题,在网上也没找到比较满意的答案,干脆自己对这个问题做一个总结。

根据我们的经验,最容易想到的大概通过计算指令周期来解决。该思路在Cortex上并不是很适用:一方面MCU从Flash取指是有延时的,另一方面Cortex的指令集不是固定周期的,特别从M3加入分支预测后,分支指令在Cortex-M不同型号上的结果都不相同。因此除了指令周期外,我们需要考虑的东西还有很多,才能得到正确的结果。

<strong>不带分支预测器的情况</strong>

仍然先从不带分支预测器的Cortex-M0开始,通过计算指令周期延时的实现代码如下:

单片机的片选和地址分配

一片外围芯片具有一定的地址空间。例如11根地址线的芯片,其地址空间为2KB(2048)。这2KB地址空间在微处理器的内存空间(如8位微处理器有16根地址线,能寻址64KB)中被分配在什么位置,由高位地址线A11~A15产生的片选信号来分别确定。当外围芯片多于一片时,为了避免误操作,必须利用片选信号来分别确定各芯片的地址分配。产生片选信号的方式不同,存储器的地址分配也就不同。片选方式有线选、全译码和局部译码。

线选方式

C语言精确微秒级的延时

在使用C语言编程时延时程序是非常常见的,但是实现一个精确的延时是不太容易的,在给一个朋友的公司产品做维护时,发现一段代码,可以实现微妙级的延时。看起来代码非常简单。但是我以前没有想到过。我们一起来看看这段代码。

IAR更改代码字体及快速模板的设置

<strong>1、是用软件提供的字体</strong>

如果只想简单的设置,可进行如下设置
Tools->IDE Options->Editor->Colors and Fonts->Editor Font->Font
但是这里边似乎也没有什么舒服的字体,在网上找了找,还真找到了一个比较不错的字体,现呈现给大家

<strong>2、使用系统提供的字体</strong>

浅谈工程师的调试法宝(五):JScope的应用

摘要

J-Scope是SEGGER公司推出的,可以在目标MCU运行时,实时分析数据并图形化显示的软件。我们一起来了解一下J-Scope吧。

我们在前四篇的文档中介绍了MCU向调试终端输出信息的方法。今天就介绍一个更炫更酷、可以图形化显示数据的调试法宝—JScope。

J-Scope是SEGGER公司推出的,可以在目标MCU运行时,实时分析数据并图形化显示的软件。它不需要像SWO那样需要MCU上面额外的引脚,而是使用标准的调试接口。J-Link驱动4.90之后的版本都有这个软件哦。

J-Scope可以像示波器一样显示多个变量的值,通过读取一个ELF文件,允许选择一定数量的变量可视化,如图 1所示。你可以简单的将目标MCU连接到J-Link,并启动J-Scope软件。

几幅草图教你区分数字地、模拟地、电源地,单点接地

我们在进行pcb布线时总会面临一块板上有两种、三种地的情况,傻瓜式的做法当然是不管三七二十一,只要是地,就整块敷铜了。这种对于低速板或者对干扰不敏感的板子来讲还是没问题的,否则可能导致板子就没法正常工作了。当然若碰到一块板子上有多种地时,即使板子没什么要求,但从做事严谨认真的角度来讲,咱们也还是有必要采用本文即将讲到的方法去布线,以将整个系统最优化,使其性能发挥到极致!当然关于这些地的一些基础概念、为什么要将它们分开,本文就不讲了,不懂的同学自己查哈!

浅谈工程师的调试法宝(四):RTT的应用

我们前三篇的文档中介绍的调试方法,都因为各种原因而不能在所有的MCU上做到通用,而今天这一切将发生改变。现在就一起来看一下这个神奇的调试工具-RTT。

RTT( Real Time Terminal)是SEGGER公司新出的可以在嵌入式应用中与用户进行交互的实时终端。J-Link驱动4.90之后的版本都有这个软件哦。

用RTT可以从目标MCU上输出信息的同时也可以非常高速的向应用程序发送信息,并且不影响MCU的实时性。其实现原理就是J-link与MCU共享内存,具体实现细节感兴趣的读者可以自己去查阅下资料,本文以应用为主。RTT的工作框图如图 1所示。MCU通过J-link与电脑连接并将打印信息输出到电脑上,电脑同时可以通过键盘等向MCU发送数据。

从PCB设计到软件处理,谈单片机系统的电磁兼容性设计

本文中所提到的对电磁干扰的设计我们主要从硬件和软件方面进行设计处理,下面就是从单片机的PCB设计到软件处理方面来介绍对电磁兼容性的处理。

<strong>一、影响EMC的因数

1、电压:电源电压越高,意味着电压振幅越大,发射就更多,而低电源电压影响敏感度。

2、频率:高频产生更多的发射,周期性信号产生更多的发射。在高频单片机系统中,当器件开关时产生电流尖峰信号;在模拟系统中,当负载电流变化时产生电流尖峰信号。

3、接地:在所有EMC题目中,主要题目是不适当的接地引起的。有三种信号接地方法:单点、多点和混合。在频率低于1MHz时,可采用单点接地方法,但不适宜高频;在高频应用中,最好采用多点接地。混合接地是低频用单点接地,而高频用多点接地的方法。地线布局是关键,高频数字电路和低电平模拟电路的接地电路尽不能混合。

我们为什么要学RTOS?为什么要选用FreeRTOS?

作为基于ARM7、Cortex-M3硬件开发的嵌入式工程师,本人一直反对使用RTOS。不仅因为不恰当的使用RTOS会给项目带来额外的稳定性风险,更重要的是个人认为绝大多数基于ARM7、Cortex-M3硬件的项目,还没复杂到使用RTOS的地步,使用状态机就足够了。

对于现代的微处理器,特别是资源相对丰富ARM7、Cortex-M3硬件来说,RTOS占用的硬件资源已经越来越可以忽略。所以在当今环境下,我们无需担心RTOS会拖累性能。相反,RTOS提供的事件驱动型设计方式,使得RTOS只是在处理实际任务时才会运行,这能够更合理的利用CPU。

ARM的异常处理过程分析

近来翻了翻uC/OS-II官网给出来的ARM7-ARM9移植手册(AN-104),分析了在ARM中移植的问题,想想从来没有认真的学习过ARM的汇编,趁着这个机会复习复习吧。其实底层的东西才是创造力的心脏。

其中的移植代码中存在的很多问题比如中断的关闭和开启,任务级别的情景切换,中断到任务的情景切换都是我们在平时移植中讲到,我也不在此强调了。在官网中提供的移植过程中存在异常处理机制,这个本不是在移植过程中考虑的,但是文档中确实提供了一个比较好的处理方式。我在此对这一段时间的学习做一个总结。

BLE 4.2:更高的安全性

By Sachin Gupta & Richa Dham, Cypress Semiconductor

对于任何一个无线设备,无论是健康监测器还是付款系统,保护用户的隐私信息都是非常重要的。隐私机制可防止设备受到不可信的设备追踪。安全的通信保证了数据安全,防止未经授权的设备侵入数据导致触发系统意外操作。BLE 4.2的新功能加强了隐私和安全,解决了早期BLE的缺陷并且提高了能效。

<strong> 隐私</strong>

浅谈工程师的调试法宝(三):SWO引脚的巧妙应用

在上一篇文档中,我们向大家分享了如何使用IAR本身自带半主机(semihost)模式来调试程序,但是每10ms输出一个字符的速度实在让人难以接受。今天就向大家介绍一个输出速率更快的,使用同样方便的调试方法-SWO引脚的使用。

在Cortex-M3\M4系列MCU中,内核的调试组件都有一个仪器化跟踪单元(ITM)。ITM的一个主要的用途,就是支持调试信息的输出(例如,printf格式输出)。ITM包含了32个刺激端口,允许不同的软件把数据输出到不同的端口,从而让调试主机可以把它们的信息分离开。每个端口都可以独立的使能/除能,还可以允许或禁止用户进程对它执行写操作。那么这些与MCU的SWO引脚有什么关系呢?刚才我们有说ITM包含了32个端口,其中SWO引脚,就是ITM模块的端口0,我们可以直接用它来输出一些调试信息。那么现在就看看如何使用它吧。

嵌入式系统应用中的USB主设备功能分析

USB已经成为设备和PC之间通信的标准方式,从通用设备(如闪存设备和鼠标)到专用设备,该标准几乎完全替代了其他的串行通信协议。

USB外围设备彼此之间不能相互通信,它们只能与具有控制总线能力的USB主设备通信。直到最近,也只有PC具有主设备能力。但目前,许多微控制器也具有了嵌入式USB主设备的功能,这使得嵌入式应用可以连接更加广泛的USB外围设备。

USB闪存驱动器是一种使用非常广泛的USB外围设备,它已经成为传递或存储大量数据的廉价介质,许多数据记录设备正是得益于它才得以发展。对于远程的长期数据记录,可以先采集,并存储在闪存驱动器中,然后带回到方便分析处理的地方。

如何让MCU更多功能、更少功耗?

摘要:近年来,便携式电池供电应用的日益普及促使设计人员致力于将更多功能集成至更小的产品中。这些增添的功能,尤其是无线通信功能,对系统电源提出了更高要求。如何在实现所需系统功能的同时延长电池的寿命成为设计人员需要解决的一大挑战。单片机特性近年来的发展,包括各种集成特性和外设,嵌入式设计电源管理的实施变得更加简单灵活。同时,这些 MCU 也推进了设计技术的进步。

<strong>更多功能、更少功耗</strong>

嵌入式ARM学习总结之LCD显示屏

<strong>1、常用显示类型</strong>

1)数码管:0.7—1元 成本低,只能显示数字和字母

2)字符型液晶屏:LCD1602 15—25,显示数字和字母

3)点阵型黑白屏:LCD12864 50—90之间 可以显示汉字和图片

4)STN-LCD 彩屏 成本低 响应速度慢(刷新频率低),播放视频有拖尾现象

5)TFT—LCD 彩屏,主流

6)0LED 功耗低,无需背光 日本技术 今后主流

7)LED广告屏(一个一个LED组成)--成本高,耐用

<strong>2、点像素</strong>

1个点有多少种状态,多少种颜色

基于ARM处理器的吸尘机器人硬件设计

摘要:设计一款具有自主吸尘功能并且结构简单、成本低的小型家用吸尘机器人,实现了室内半自动或者全自动的清洁工作,从一定程度上代替人们做繁杂的家务。在硬件选型上,以ARM Cortex™⁃M3处理器为核心,设计了专门的电机驱动板,通过光电编码反馈电路实现行走模块的闭环控制。主要对传感器模块进行开发,通过合理布置传感器,采用多种传感器融合,使超声波和红外光电传感器协调工作实现对远近距离障碍物的精确检测,提高了对障碍物的准确识别,能够实现自主避障吸尘。