• 跳至主要导航
  • 跳到主要内容
  • 跳到主要侧边栏
  • 跳到页脚

单片机技巧

微控制器工程资源,微控制器新产品和电子工程新闻

  • 产品展示
    • 8-bit
    • 16-bit
    • 32-bit
    • 64-bit
  • 应用领域
    • 汽车行业
    • 连接性
    • 消费类电子产品
    • 产业
    • 医疗类
    • 安全
  • EE论坛
    • EDABoard.com
    • Electro-Tech-Online.com
  • 影片
    • TI单片机视频
  • EE资源
    • 快速设计
    • 电子书/技术提示
    • 常见问题
    • LEAP奖
    • 播客
    • 网络研讨会
    • 白皮书
  • EE学习中心

常问问题

您的MCU上需要更多的GPIO吗?尝试串行外围设备接口(SPI)

一月27,2017 通过 斯科特·桑顿 1条评论

SPI是一个简单的串行通信接口,最初由摩托罗拉在1980年代开发,可在几英尺的短距离内使用。 [一世] SPI可以提高到几Mbps,具有足够的灵活性以很少的开销在全双工中流传输原始数据,并且使用起来也非常灵活。 SPI支持标准同步协议,但未指定特定协议。 SPI用于同步数据。 (“异步”数据不使用时钟来同步发送和接收的消息;它以不同的方法进行同步。)SPI可以与许多设备接口,包括未指定为支持SPI的外设。一个缺点是,由于SPI不使用寻址,因此SPI往往比其他通信接口需要更多的引脚(和电线)。

SPI使用主从设置。 SPI主设备通常作为功能集成在微控制器(MCU)中。 SPI主设备控制时钟(CLK),该时钟用于与从SPI设备同步通信。所有数据移动均由时钟协调。

与单个从设备通信的基本SPI主设备只能使用3条线工作:一条时钟,一条通信线和一条从选择线。如果有3线,则一条通信线正在发送或接收。也就是说,它是半双工的。可以在那条(双向)通信线上进行通信的任何方向,但不能同时进行(您要在这条汽车宽度桥上来回行驶)。但是,最少具有4条线的SPI接口可以支持全双工(两条车道的高速公路),这将需要一条时钟线,两条单向通信线和一条从选择线。

从站选择线如何工作? SPI主机具有一个或多个从机的引脚。如果有多个,则所有从站都在监听相同的时钟信号和相同的通信线路。需要一个额外的引脚,称为从选择(SS_n)引脚 每 奴隶;这样主机可以选择要与之通信的从机。 SPI从设备不会轮询总线。主机启动数据传输。 (市场上的某些SPI是“多主设备”,其中每个主SPI在启动数据传输之前必须侦听SS线以查看其是否空闲,但这会变得很复杂。)尤其是在多个从设备中,SS线路应具有上拉电阻。主机在进行通信时会将SS线拉低,否则,浮动引脚可能会导致未选择的设备“听到”不适合它们的通信。

图1:为减少在多个从器件设置中出现混乱的机会,请在所有片选(SS_n)上放置上拉电阻。否则那里’SPI从设备可能会“hear”用于另一个奴隶的通信。上面的母版中的文本是Arduino的代码,它通过开始和结束所有SPI事务来保护总线访问。图片来源:根据知识共享署名4.0国际许可,在dorkbotpdx.org上的保罗。)

基本的4线SPI主机中的另外两条线用于发送和接收数据:MOSI(主机输出从机输入)线用于主机与从机进行通信,另一条线是MISO(主机输入从机输出),从从机向主机传送消息。两条线路同时工作,从而允许双向同时通信(全双工)。

SPI没有寻址方案(例如使用I2C)。 SPI有多种变体,有些SPI芯片具有多条MISO和MOSI(I / O)线,所有这些线都由一个时钟控制,但允许更大的吞吐量。操作相当简单。当主机要讲话或收听Slave_1时,SPI主机将SS_1引脚拉为低电平(称为“低电平有效”),并且Slave_1开始与共享时钟线同步向主机发送或接收。所有其他奴隶被忽略。

如果有一个主机和一个从机,则SPI高效且易于设置。 SPI具有3个寄存器:控制寄存器(SPCR),状态寄存器(SPSR)和数据寄存器(SPDR)。 SPDR是读/写寄存器;要将数据发送到MOSI,请写入SPDR。要接收在最后一个时钟周期中作为MISO放入SPDR中的数据,请读取SPDR。在仅执行单向通信的设置中,可能需要读取某些垃圾数据或将其写入SPDR以启动时钟。

其他提示:未选择SS时,测试SPI以确保MISO引脚正确断开连接。如图2所示,通过连接两个10K欧姆电阻来检查MISO。要测试一个良好的三态MISO,请禁用所有SPI芯片选择,如图2所示,在面包板上安装两个10Kohm电阻,然后用电压表测量MISO。如果选择确实关闭,则MISO信号应读取Vcc的一半。如果您看到逻辑高电平(通常取决于板子,通常为3.3V或5V),或者看到接近零伏的电压,则需要三态缓冲器(例如, 74AHC1G125),就像打开/关闭电流的阀门一样。三态缓冲器是具有三态输出的总线缓冲器门。

图2:要测试一个良好的三态MISO,请禁用所有SPI芯片选择,如图所示面包板2个10Kohm电阻,然后测量MISO。 MISO应该读取Vcc的一半。如果看到逻辑电平高(3.3V或5V,具体取决于电路板),或者接近零,则需要三态缓冲器。 (信贷:根据知识共享署名4.0国际许可在dorkbotpdx.org上的保罗。)

到目前为止,讨论主要是关于SPI的硬件陷阱。回想一下SPI没有设置协议。 SPI不会自动进行自我设置并开始与从设备通信。 SPI应用程序代码相当明确,许多开发板都以库的形式提供了SPI代码(例如Arduino。)图3展示了一段注释非常清楚的代码,用于使用Maxim Integrated公司David的SPI进行简单的单字节传输。炒。

图3:使用SPI进行单字节写入的示例代码 Maxim Integrated应用笔记4184。 (来源:Maxim Integrated)

[一世] Wikipedia//en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus

提起下: 常问问题, 精选, 微控制器 标签: 基本, 常问问题

消除硬件和软件中的开关

一月19,2017 通过 斯科特·桑顿 2条留言

开关可以连接到微控制器(MCU)上的数字输入,但是开关触点可以在最终闭合之前的几毫秒内机械弹起并分开几次。这在继电器和螺线管上也很常见,它们所消耗的电流要比安装在PCB上的电子设备大得多,有时也称为“颤振”,因为您可以在例如控制柜进入稳定状态之前迅速听到触点的闭合和断开。

当MCU每秒轮询一次数字输入几次时,它可以很容易地记录开关或按钮在几毫秒内几次在0和1之间快速改变状态的次数。这可能会导致开关注册一个开/关状态,对于该状态而言,状态更改的总数将完全不正确。在任何开关之间,甚至在同一开关之间,弹跳动作都不一致,并且一天反弹的开关可能会在另一天反弹一次。另一个问题是,按下按钮的动作可能与按钮应激活的动作不同步。除了机械开关,数字输入还可以读取尖峰作为开关闭合。因此,按顺序去抖按钮或开关。

图1:弹跳开关。 (来源:github / thomasfredricks / Bounce2)

要消除硬件中的机械触点的抖动,您可以做一些事情。您可以制造或购买通常称为去抖电路的闩锁电路,也可以在软件中进行去抖处理。由于反跳非常普遍,因此机械硬件开关可能内置了反跳逻辑和锁存器。某些MCU具有用于消除反跳的软件库功能。

图2:使用两个NAND门和一些上拉电阻的SR锁存电路可以使开关去抖动。 (来源:作者,使用Fritzing.org免费工具)

另一种选择是购买一个独立的IC,它可以为您进行反跳动,例如 MAX16054,这是一个具有单个开关去抖器和闩锁的开/关控制器。 MAX16054可接受噪声或反弹信号输入,并提供干净的锁存输出。

图3:MAX16054是独立的去抖动

要处理软件中的反跳操作,请先检查您的特定MCU是否没有库。 Arduino具有防弹跳软件的“ Bounce”和“ Bounce2”版本,可作为免费库使用。对一群MCU使用者使用软件延迟可能会不利于您,因为一群幼儿园的人可以轻松地按下按钮,以至于MCU花费了所有时间来运行延迟循环(因为大多数MCU不运行多个线程)。延迟循环在等待软件中的跳动开关时非常普遍。开关无法永远反弹。但是,等待的时间越长,整个过程的速度就越慢,这在毫秒级的情况下是一个问题。加性延迟不是一个好主意。

图4:RC去抖电路,该电路产生具有RC时间常数的延迟。 (来源:ganssle.com:

代替NAND门锁存器的另一种硬件解决方案是RC去抖电路。尽管有弹跳开关,电容器两端的电压仍会缓慢上升,而增加元件值会使其达到逻辑高电平的速度甚至更慢。可以更改组件值,直到理想的充电和放电速率导致延迟超过反弹时间并经过稳定的间隔为止。根据杰克·甘斯尔(Jack Ganssle,见图5)的另一种选择是通过施密特触发器使开关运行,该触发器旨在消除信号中的噪声。施密特触发器的作用与比较器的作用相当,可以使弹跳平滑。

如果您有一个按钮或某种开关不会注册按动按钮,或者您的设计中有一个开关且事情发生异常,请考虑防抖。

 

提起下: 常问问题, 精选, 微控制器 标签: 阿杜伊诺, 基本, 常问问题, 格言

我是什么2简称“I-squared-C”?

一月10,2017 通过 斯科特·桑顿 3条留言

I2C代表“集成电路间”或“ IC间”,是一种简单的8位串行通信总线协议,仅使用两条总线。串行数据线(SDA)和串行时钟线(SCL)。一世2C被集成到许多IC中,并允许设备彼此直接通信,从而避免了CPU周期。一世2C以主从方式运行,所有设备都以I2C总线具有唯一的地址。一世2C既可以在集成芯片内部使用,也可以在基于芯片的电路的各个区域之间进行通信,也可以在芯片之间进行外部使用。

图1:I2C是一种简单的2线通信总线,自1982年首次发布以来,它已经发展成为一种通用的,事实上的芯片之间通信标准。 (图片来源:凌力尔特公司)

I2C由飞利浦半导体(Philips Semiconductor)于1982年创立。(飞利浦(Philips)在2006年被恩智浦半导体(NXP Semiconductor)收购。)2C总线规范和用户手册v6,于2014年出版,我2C“由50多家公司制造的1000多种不同的IC中实现。”

集成我的集成芯片2C功能涵盖许多不同的应用程序和设备。例如,大多数传感器IC包含I2只要我将C通讯纳入其电路2C数据传输速率足以满足控制回路的需求。我也一样2与输出设备(例如显示器,LED和数据转换器)的C通信。但是,其他设备(例如实时时钟,存储设备以及许多其他设备)也使用I2C将信息传达给其他芯片,这些芯片通常是微控制器或处理器。

表1:I的各种数据传输速率2C

模式 资料传输速度 数据旅行
缩略语
标准 100 Kbits /秒 双向的
快速 400 Kbit /秒 双向的
快速模式加 100 Kbits /秒 双向的 Fm +
高速 3.4 Mbit /秒 双向的 s
超快 5 Mbit /秒 单向 超滤膜

I2C是多主机总线,它使用冲突检测和仲裁来避免两个主机同时启动通信时出现的问题。仲裁是防止消息损坏的过程。如果不进行仲裁,则“获胜”消息将被竞争消息插入的信息比特破坏。不过我2C允许同一I上有多个主控2C总线,这意味着一个以上的芯片可以尝试一次控制总线;如果两个或多个芯片试图同时控制总线,则仲裁决定谁是主设备。为我2C,仲裁工作具有确定性;也就是说,关于主机是否具有控制权以及基于SDA和SCL线路状态的已知问题。重要的是要注意,并非所有支持I2C支持多主模式。

使用I的IC数2C总线“仅受最大总线电容的限制”[一世] 但是从理论上讲,由于一个地址的长度为7位或9位(后跟一个数据方向位),所以一个I上的限制为128个设备2C总线,因为7位数字从0到127。

I2C已经成为事实上的标准,因为它易于使用,并且为设计人员提供了消除设计通信系统的捷径。2C很容易调试,我2可以轻松添加或删除C,而不会影响I上的其他设备2C巴士,我2C具有非常低的电流消耗,对噪声的高抗扰性,并提供了广泛的电源电压以实现系统兼容性。一世2C对设计人员的主要好处是,它可以减少芯片上I / O引脚的使用(只要I2C总线速度足以不引起数据传输瓶颈。)

图2:设备之间I2C的示例应用。 (图片来源:I2C用户手册,NXP.com)

I2C作为简单通信总线的主要“竞争者”是串行外围设备接口(SPI),普通的串行接口,以及用于外部通信的USB。我的主要优势2C提供了简单2线总线上多个设备之间的通信,这大大减少了PCB上的走线以及实现该电路所需的引脚数。串行通信主要用于两个设备之间的通信。 SPI和USB都需要更多的引脚来实现通信传输方案,尽管这两个引脚也可以支持许多不同设备之间的通信。当需要更快的数据速率(最高10 Mbits / sec)和全双工(同时在两个方向上发送和接收)时,可以使用SPI。但是,SPI不支持多个主机。 USB的针数比我多2C,但已被用作个人计算机(PC)中的默认通信总线(以前称为串行通信),因此PC上现在不存在串行通信端口。 USB,比我更快的通讯总线2C,是为外部使用而设计的,比我复杂得多2C执行。 USB提供了芯片之间通信所需的一切,如果用作I,则绝对是“过大杀伤力”2C替换。

有关我的完整信息2C,看 I2恩智浦半导体的C总线规范和用户手册

[一世] I2C总线规格和用户手册。 (2014年4月4日)。检索2017年1月5日。

提起下: 常问问题, 精选 标签: 基本, 常问问题

内部处理器总线:数据,地址和控制总线

2016年12月29日 通过 斯科特·桑顿 3条留言

总线是数字信号快速移动数据的途径。与处理器关联的内部总线有三种:数据总线,地址总线和控制总线。这三者共同构成了“系统总线”。系统总线是内部总线,旨在将处理器与内部硬件设备连接,也称为“本地”总线,“前端总线”,有时也简称为“内存总线”。

由于处理器读取和写入数据,因此数据进出数据总线是双向的,但是其他数据则是单向的,因为处理器总是确定何时从何处以及向何处写入数据。地址总线将寻址信号从处理器传送到内存,I / O(或外围设备)以及处理器周围的其他可寻址设备。控制信号移出处理器,但不移入处理器。

图1:内部系统总线。 W·诺维奇(W Nowicki)–自己的工作,基于Linda Null,Julia Lobur撰写的《计算机组织和架构要点》中的图表。 CC BY-SA 3.0

单片机的数据总线“宽度”通常为8位,16位,32位或64位,尽管仅4位数据总线或大于64位宽度的MCU也可以。数据总线的宽度反映了一次可以处理和传送的最大数据量。 64位处理器具有64位数据总线,并且一次可以传输64位数据,并且是否要读取或写入数据由控制总线确定。数据在存储器中的物理位置由地址总线承载。内部硬件组件已经从地址总线接收了地址并即将接收数据,它使缓冲区能够允许信号流向或来自地址总线指定的位置。地址总线仅携带有关地址的信息,并与数据总线同步,以完成处理器的读/写任务。地址总线的宽度仅为寻址系统中所有内存所需的宽度。

其他通信总线也与处理器通信,但在系统外部,例如通用串行总线,RS-232,控制器局域网(CAN),eSATA等。可以将外部外围设备设置为使用内部总线,这在使用“扩展卡”将产品连接到内部总线的计算机中很常见。但是,从长远来看,每台设备只有一张卡就变得站不住脚,因此开发了其他总线通信系统,例如USB。

可以“扩展”系统总线,以通过称为底板的机箱与其他计算机进行通信。内部总线具有非常快的吞吐量和低延迟。多台计算机可以机架安装在单个背板上,以实现计算机之间的快速通信。

提起下: 16-bit, 32-bit, 64-bit, 8-bit, 常问问题, 精选, 行业专家, 微控制器, 产品展示 标签: 基本, 常问问题

单片机与FPGA —什么’s the diff?

2016年12月16日 通过 艾米·卡尔诺斯卡斯(Aimee Kalnoskas) 1条评论

现场可编程门阵列是高度可配置的通用集成电路(IC),其中装有称为“逻辑单元”(Altera)或“逻辑元件”(Xilinx)的小型可编程数字逻辑构件。定制IC或专用集成电路(ASIC)非常相似,但对于ASIC,定制电路设计设置在硅片中,事后很难更改。

图1:动态重配置中可重配置区域的概念。通过下载部分位文件来动态修改逻辑块,而其余逻辑继续运行而不会中断。 (资源: Xilinx 现场可编程门阵列的动态重配置,Patrick Lysaght,Xilinx演示,)

但是,它们可能会影响制造后和封装之前IC上电路的某些变化。)ASIC提供基于硬件的解决方案,并且是实现特定应用目标的定制硬件设计的最终选择。

就通用性和功能而言,FPGA位于微控制器(MCU)和ASIC之间。但是,由于FPGA价格下降并且已与同一平台中的处理器结合使用,因此ASIC与FPGA之间的界限开始模糊。 现场可编程门阵列的编程灵活性不如MCU,但通过硬件提供的定制精确度是MCU所无法做到的,例如算法的定制硬件加速。

一些FPGA是一次性可编程的,但是大多数FPGA可以在部署后重新配置或更新,以至于可以在计算应用程序中动态重新配置。[一世] 根据Xilinx的说法,“部分重配置是通过下载部分位文件来动态修改逻辑块的能力,而其余逻辑将继续运行而不会中断。”[ii]

现场可编程门阵列可以以低延迟执行多种计算。 现场可编程门阵列编程涉及陡峭的学习曲线。通过测试设计迭代,MCU更易于在开发中使用。 现场可编程门阵列必须做的不仅仅是“重新编译”。 现场可编程门阵列必须根据更改进行重新放置和重新布线。

单片机比FPGA具有更大的设计可移植性。 现场可编程门阵列最常采用定点运算。 现场可编程门阵列能够进行复杂的,对时间至关重要的信号处理,并具有严格的吞吐量和低延迟要求,因为专用的硬件和存储器可以确保时间保证。

现在,FPGA提供了带有处理器核心的混合方法。使用FPGA的学习曲线是使用FPGA开发的更大障碍之一。对FPGA的不熟悉和对其进行编程会导致人们倾向于解决MCU的问题。尽管如此,仍无法避免FPGA对计算和存储有严格要求的应用,例如成像或要求高确定性,具有极高吞吐率和低延迟的应用。

表1:FPGA和MCU之间的一些基本差异。

单片机 现场可编程门阵列
学习曲线 通过工具的交叉学习曲线(例如,越来越广泛的Eclipse IDE,共享语言)。 更陡的学习曲线
提供定点/浮点运算 定点和浮点数广泛可用。 大多是固定点。难以容纳浮点数。
时间紧迫的处理 取决于对MCU是否可以容纳的要求。范围有限。 能够进行复杂,对时间要求严格的信号处理,并具有严格的吞吐量和低延迟要求。
便携式设计 使用C / C ++语言更易于在MCU之间移植设计。 没有可移植的通用设计方法。
全面的灵活性 仅重新编程软件。 卓越的软件 和硬件 定制的灵活性。动态重新配置是可能的。
发展焦虑 为了便于开发过程,通常可以像补丁一样在编译后添加代码更改,而无需重新编译。 由于在开发过程中需要重新放置和重新布线FPGA,因此开发迭代会花费更长的时间。
工具类 开源工具越来越多地使开发过程跨平台可移植。 跨工具无可移植性。通用设计方法不存在。

 

[一世] Pellerin,David和Scott Thibault。新泽西州上萨德尔河的实用FPGA编程:Prentice Hall专业技术参考,2005年。印刷。

[ii] “Vivado设计套件中的部分重新配置。” Vivado设计套件中的部分重新配置。 N.p., n.d. Web. 18 Dec. 2016.

提起下: 常问问题, 精选, 现场可编程门阵列, 微控制器 标签: 基本, 常问问题

什么是在线仿真器?

2016年12月9日 通过 斯科特·桑顿 发表评论

嵌入式系统往往缺少显示器,键盘和鼠标,无法用来操纵您要编程的微控制器。因此,主机用于此功能,并且通常通过串行电缆或更新的Wi-Fi进行通信。

在主机上为嵌入式系统创建,编辑和编译代码后,您将拥有需要上传到嵌入式系统中微控制器的可执行(目标)代码。在那里,您可以查看代码,对其进行操作,测试和调试,方法是在主机上对代码进行更改,重新编译并在目标MCU上再次运行。但是,如果您想更改寄存器,存储器或I / O状态以查看会发生什么,该怎么办?在线仿真器(ICE)是一种调试工具,可让您访问目标MCU进行深入调试。正版ICE要求您卸下微控制器并将ICE插入其位置,通常是使用适配器。在当今的高性能,相对低成本的处理器中,在线仿真非常少见,因为ICE需要在系统中是不可见的,而使用速度非常快的内存密集型芯片很难做到这一点。不过,并非每个系统都需要高性能的MCU,仍然可以使用ICE。 ICE是查找困难错误的最佳工具,并且可以提供宝贵的见解。

ICE由硬件板和用于主机的随附软件组成。 ICE物理连接在主机和目标MCU之间。主机上的调试器通过ICE建立与MCU的连接。 ICE允许开发人员查看MCU内部的数据和信号,并逐步查看源代码(例如主机上的C / C ++)或设置断点;在运行期间会观察到已执行软件的即时后果。由于调试是通过硬件而不是软件完成的,因此,MCU的大部分性能都保持不变,而ICE不会损害MCU的资源。这种类型的调试也称为源代码级或运行时调试,除了ICE尽可能接近实际情况外,因为它不是仿真,而是用仿真或精确的镜像代替了目标MCU, ICE本身中的目标MCU。 单片机的行为将更准确地实时反映在ICE中。

ICE调试的缺点是ICE硬件必须物理连接到MCU。随着芯片变得越来越小,适配器可以帮助将微小的表面安装芯片连接到ICE。另一个缺点是ICE设备具有学习曲线,尤其是在将具有复杂的调试功能的情况下,例如,在进行条件分支后,当寄存器保持特定值时进行标记等。最后,缺点是:高性能芯片的价格下降了,使用ICE进行调试的可访问性已经下降到对尚未使用8051时代MCU的任何人来说ICE硬件都变得罕见的地步。在线仿真器需要快速的连接性和内存负载,因此较低级别的MCU(8位,-16位和MHz,而不是GHz)更有可能提供ICE选项。此外,例如,与芯片外,板载EEPROMS和接口相比,高度集成的芯片可能产生的错误更少。

 

参考文献:“软件工程师的在线仿真指南。”N.p.,2000年10月。Web。 2016年12月

 

提起下: 常问问题, 精选, 行业专家 标签: 基本, 常问问题

什么是机器学习?

2016年11月28日 通过 斯科特·桑顿 发表评论

作为人工智能的一种类型,机器学习通常用于创建用于分析数据的模型。机器学习是一种编程过程,通过该过程,计算机可以从数十个样本数据集中获取数千个样本数据集,这些样本数据集证明了什么适合和不适合所需的分析模型,而不是像传统的计算机体系结构那样编码程序。此过程的一个简单示例是模式匹配和识别。英特尔®居里模块,基于英特尔®Quark ™SE微控制器具有完成简单模式匹配(一种机器学习)的能力,因为它具有128个神经元的数组,每个神经元128个字节。神经元既是决策的“引擎”,又是记忆,可以通过与大型神经网络类似的“学习”技术进行调整。神经元持有加权的信息,网络中分配给每个神经连接的“权重”可以在构建分析模型的特定算法进行调整时进行调整。

机器学习图1
图1:实际使用神经网络进行模式匹配“self-programs”通过样本数据集,而不是传统编码。与传统的计算机体系结构不同,神经元既是协作决策处理器又是记忆单元,并以人脑为模型。 (来源:General-Vision.com)

普林斯顿大学讲师Rob Schapire认为,机器学习是AI的核心子集,我们对智能的理解必然包括学习行为。因此,众所周知,编程无法为AI提供独立学习的能力。正如沙皮尔(Schapire)所说,“机器学习范例可以看作是“通过示例编程”。”[一世]

神经网络,尽管以传统计算机体系结构的形式嵌入半导体芯片中(例如,英特尔®x86或ARM®Cortex)™-A)没有相似的架构,因此结构不同,并且不受摩尔定律的影响。对神经网络进行“编程”在某些方面更容易,而在其他方面则更困难。由于通常的编程方法(例如,编写C代码)不适用,因此更容易,因为没有传统意义上的编程。取而代之的是,为庞大的神经网络提供了正确和不正确样本的数据样本集,这些样本集会使用每个新的数据样本来构建和塑造分析模型。因此,困难的部分是找到多达数千个适合和不适合所需分析模型的数据。仿照根据人的经验学习和修剪数据的人脑建模,使用神经网络的人工智能可以开发出适合和不适合模型的内容,并且可以随着数据的变化而随时间变化。大型神经网络的结果令人惊讶地好,该大型神经网络可以例如识别与视频流上的运动有关的模式,对象或行为,并标记不符合已基于所有先前样本建立的学习构造的行为。这样,机器可以看到,决定(或不决定)匹配并拒绝或通过装配线上的对象。他们现在可以比人类更准确,更快地执行此操作。工业中使用的AI的一些示例:

  • 安全监控。例如,未经授权的物体进入监视区域。 AI流程提醒人员进行进一步检查
  • 欺诈保护。例如,在监视您过去和最近的信贷使用模式几个月后,人工智能流程拒绝了与您的支出模式不匹配的交易,银行通过文本提醒您与他们联系。
  • 垃圾邮件过滤
  • 文字转语音
  • 尽管图像中物体的方向或混乱,仍可进行物体识别
  • 在线建议的偏好预测(广告或Netflix等服务)。

“深度学习”比机器学习更参与,但仍被认为是机器学习的子集。与机器学习相比,深度学习需要更多的神经元层来形成更大的神经网络。几年前,由Google收购的公司DeepMind建立的深度学习已经证明了AI可以使用更少的数据进行学习,而DeepMind称之为强化学习的是一种计算强度更高的概念。 [ii] 但是,该行业相对较新,对于许多与AI相关的概念都没有标准定义。 IBM将其AI引擎Watson称为“认知计算”。

对于硬件,机器学习需要基于半导体的高性能处理能力,其中包括并行处理。英特尔针对AI的方法是提供经过优化的高性能AI CPU,而Nvidia的策略是并行提供GPU,以实现极快的计算。有人讨论Nvidia将需要继续扩展许多并行运行的GPU的倍数,以与AI行业一起发展,以及GPU是否可以应对这一挑战。这还有待观察,但由于可负担的高性能计算,在几十年的时间里几乎被忽视之后,人工智能(1950年代构思)再次占据主导地位。负担得起的高性能并行和分布式处理一直是AI通过负担能力实现可访问性的转折点:高性能计算从未如此便宜,当然包括Google,Facebook,Microsoft,Amazon和无数其他市场行业也在发展利用任何可以将其服务或应用程序推向前沿的技术。

[一世] Schapire, Rob. “Theoretical Machine Learning.” Lecture #1. New Jersey, Princeton. 23 Nov. 2016. Reading. http://www.cs.princeton.edu/courses/archive/spr08/cos511/scribe_notes/0204.pdf

[ii] 安东尼奥·雷加拉多(Regalado)。“Google是否正在垄断深度学习市场?” MIT技术评论。 2014年1月29日,互联网。Web。 2016年11月24日。

 

提起下: 嵌入式的, 常问问题, 精选, 微控制器, 训练 标签: 基本, 常问问题

避免嵌入式处理器中的堆栈溢出

2016年11月14日 通过 斯科特·桑顿 2条留言

堆栈就像跟踪进程的特殊缓冲区或工作内存一样。在堆栈中,进程或任务“记下”下次处理器可用时需要执行的操作。堆栈以“后进先出”的方式工作,并在局部变量被压入堆栈或从堆栈弹出时跟踪它们。堆栈跟踪函数参数,存储局部变量,编译器临时变量,返回地址和中断上下文。在堆栈上跟踪功能的寿命仅与功能的持续时间一样长,因此堆栈内容在不断变化。

堆栈溢出是指函数或程序使用的内存多于堆栈中的内存。随着它超出分配的空间,动态堆栈内容开始覆盖其他内容,例如关键的应用程序代码和数据。堆栈是程序员在执行之前静态设置的固定内存量。您如何正确设置堆栈?如果将堆栈设置的空间太小,没有为堆栈分配足够的内存,则堆栈将溢出。如果将堆栈设置得太大,则会浪费可在其他地方使用的内存。尽管对于非嵌入式(台式机)或嵌入式系统,堆栈溢出都是同样可怕的事件,但是内存对于嵌入式应用程序而言更为重要。因此,堆栈溢出的预防措施比较棘手。如果堆栈溢出,除非您正在使用的内核上有内存保护单元,否则堆栈可能会超出其分配的空间。

stackoverflowevent_fig-1
图1:紫色区域说明堆栈溢出如何覆盖相邻内存(黄色)。(来源:IAR Systems。)

如果堆栈扩展到全局区域,则变量将被覆盖,指针将被推到“应该离开”的位置并“被狂放”,并且损坏的返回地址将失去控制。在大多数情况下,这些错误很难捕获,因为在那里您只能找到堆栈超出自身范围并损坏之后发生的事情的一些片段。堆栈溢出错误很难检测。

防止堆栈溢出的步骤
防止堆栈溢出的一种方法是使用测试和测量方法来跟踪堆栈指针。使用计时器中断可定期检查堆栈指针的位置,记录最大值,并观察其值不会超过该值。但是,在确定计时器中断检查堆栈指针的频率时,此方法可能很棘手。如果不是足够频繁,则有可能错过其增长超过最大价值的阶段;如果过于频繁,则会出现影响性能的问题,从而使代码无法尽快响应。

同样有效的是“堆栈保护区”,该区域将在发生写操作时显示写操作。堆栈保护区是位于堆栈正下方的一块分配的内存。如果堆栈溢出,它将在此处留下证据。一种类似的方法是在堆栈的顶部设置数据断点。堆栈溢出将触发数据断点,因此它可以捕获溢出,从而可以准确地看到程序员在其源代码中的位置。

另一种方法是在执行之前用特定的重复位模式填充整个堆栈空间。然后,当程序员进行测试用例时,他/她可以暂停并检查堆栈区域,以查看该重复的位模式仍然填充了多少空间。填充堆栈空间可轻松查看测试期间您进入堆栈的深度。但是,这最能告诉您是否已经发生了堆栈溢出并需要经常检查。

最后,计算方法也是一种可能的堆栈检查工具。一些软件开发工具包括堆栈分析工具,这些堆栈分析工具可根据输入的信息来确定计划使用多少堆栈。估计的所需堆栈大小计算方法可能会提供最坏的情况,这对于嵌入式应用程序可能“昂贵”。免费和付费工具中都可以找到计算方法。

防止堆栈溢出的一些最佳做法
避免使用诸如printf()之类的堆叠函数和相关函数。尝试通过引用而不是副本传递。当通过副本传递时,它往往会进入堆栈,特别是如果是数组。使用数组,可以更容易用尽堆栈并快速使堆栈溢出。

另一个最佳实践是将函数的参数数量限制为例如,前四个参数进入寄存器,所有后续参数进入堆栈。应用程序二进制接口(ABI)[一世] 单片机的代码告诉编译器可以在寄存器中传递多少个参数;所有其他必须在堆栈上传递。

最后,避免使用递归函数(一个会自我调用的函数),因为递归函数在深入时会占用堆栈的很大一部分。如果必须使用递归,请设置变量以阻止无限递归的发生。但是,最好完全避免递归。

上面提到的一些解决方案不是便携式的,但是相当不错

[一世] 遵守ABI通常是编译器工作的一部分。嵌入式ABI在机器代码级别运行,并确定如何进行函数调用,文件格式化,寄存器的使用以及堆栈的框架。嵌入式世界中的体系结构之间,ABI有所不同。

参考文献:
Dey,Kashi Nath和Samir Kumar Bandyopadhyay。 C编程基础知识。德里:培生教育,2010年4月20日。

 

 

提起下: 嵌入式的, 常问问题, 微控制器 标签: 基本, 常问问题

为您的MCU开发平台选择交流适配器

2016年11月9日 通过 斯科特·桑顿 发表评论

您如何选择交流适配器为您的微控制器(MC)开发板安全供电?大多数人对他们的开发平台的AC适配器(电源)没有太多的考虑,尤其是如果它包含在开发套件中。但是,如今,工具包通常装在装箱最少,配备最少的小盒子中,也许是遵循Raspberry Pi型号的。或者适配器可能是简单的USB充电电缆。如果您确实获得了一个不包含电源的套件,那么众多参数和功能的巨大选择将是您的不二之选。

在选择电源时,首先,您需要选择正确的电压。确保电源或交流适配器上的电源电压符合您的电路板要求。至于电流,可以使用额定功率高于您的电路板所需电源的电源。通常,数据表中没有提到开发板的最大电流消耗。如果您使用USB端口为电路板供电,请不要忘记将兼容USB 2.0插头的USB充电器的电流限制在2A左右,除非您使用的一根额定功率高达2A的较新USB Type-C电缆。最高可提供100W功率的5级供电(而具有USB供电标准合规性(USB-PD)的USB Type-C电缆是另外一回事。)如果您打算通过开发板上的GPIO为设备供电,可能需要的电源超过USB充电器所能提供的。解决方案是添加外部供电的USB集线器,或者如果可以选择的话,使用插入非USB连接器(通常为2.1mm桶形插孔)的交流适配器为电路板供电。

如果可以的话,请选择隔离式交流适配器,因为这样可以减少噪声引入您的应用。对噪声非常敏感的应用(例如特殊医疗设备,仪器或测试和测量设备)可能会使用隔离式交流适配器,或者在更敏感的应用中使用线性电源,因为它们无噪声。但是,线性电源不实用,因为它们体积大,价格昂贵,并且根据大多数工程师的经验,它们大多可作为台式设备使用。如果您担心噪声(电路板上的电源电压可能很低或信号低至1.8v或0.9v),请考虑首先选择一个隔离式AC适配器。它们不比非隔离适配器贵很多。

1200px-壁疣-ac-适配器
图1:通用交流适配器“wall wart,”通常只是变压器。 (来源:维基百科)

要寻找的另一个特性是高效的交流适配器,不仅因为它会消耗更少的能量,而且还因为它能节省大量的能源。它也会散发更少的热量。效率(以百分比表示)是在额定负载条件下,已知负载电流下输出功率与输入功率之比。效率,工作温度和可靠性相关,因为较高的工作温度会损坏或缩短电源的寿命。可靠性与适配器释放的热量有关,并且热量越少越好。优质的交流适配器或电源将具有电路保护。电路保护不仅可以保护电源,还可以保护负载(电路板),其组件可以限制潜在的破坏条件,例如过电压或过电流。当直流输出电压高于规定的最大值(通常为额定值的120%)时,电源可以关闭以避免损坏负载(您的电路板)。廉价的“壁疣”型交流适配器内部可能装有不可复位的保险丝,但数量不多。如果要从垃圾箱中“回收”旧的AC适配器壁上的疣,以与开发板一起使用,请注意,便宜的适配器可能根本没有任何保护作用。如果你是

电源有一些通用保护措施,可防止过电流,过电压和过热。当输出负载电流大于电源规格允许的电流时,就会发生过电流情况,并且电流超出正常运行额定值的结果之一就是电源过热。良好的电源在电源电压的每个供电轨上都具有过电流保护(OCP),该电流保护器在限制电流的情况下可以避免损坏情况。限流器是限制浪涌电流的另一个组件。热敏电阻是限流器;它们在冷态时电阻较高,在热态时电阻较低。需要注意的是,您可以在输出侧使用自己的保险丝切断电线,以确保适配器不会过热。

10252016热敏电阻
图2:限流热敏电阻。 (来源:TDK / EPCOS)

 

电源的环境工作温度将影响到负载的输出电流。如果您的电路板在极端条件下运行,则可以用风扇冷却电路板并为MCU提供散热片,但是电源呢?如果在极端条件下运行,请查看电源的降额曲线。这些曲线表示相对于环境温度的可靠工作电流。某些电源具有用于过热保护的内部温度传感器,这些传感器将在指定的最高温度下关闭电源。加热或温度激活的保险丝在达到正常温度后会恢复其导电形状,这在家用电器中很常见,尽管它可能会在没有警告的情况下关闭电源并引起混乱。由于内部防止过热的措施,突然关闭而没有任何烟味的设备很可能会立即关闭。

如果您想获得非常详细的信息或遇到无法解释的电源问题,则要寻找的另一个特征是电源的动态响应。当负载所需的功率突然而显着变化时,将考虑动态响应。在几微秒内唤醒多个外设的MCU可能会突然而动态地吸收负载电流。根据应用的不同,电源可能需要能够以足够快的速度上升,以在指定的时间间隔内满足突然上升的需求。阅读电源数据表时,请注意,峰值功率是电源可以承受的瞬时但绝对最大电压,不会损坏。

提起下: 常问问题, 微控制器 标签: 基本, 常问问题

具有神经网络的微控制器:它们是什么?

2016年11月4日 通过 斯科特·桑顿 1条评论

人工神经网络(ANN)是基于硅的处理器体系结构,其灵感来自于人脑,并且非常简单地仿照了人脑,后者通过示例学习和“修剪”连接,不再使用。人工神经网络到底是什么? 罗伯特·赫希特·尼尔森博士,美国科学技术大学电子与计算机工程学兼职教授Maureen Caudill解释说,人工神经网络是“…由许多简单,高度互连的处理元件组成的计算系统,这些处理元件通过对外部输入的动态状态响应来处理信息。”[一世]

神经网络已在8位微控制器上实现。[ii] 但是,Arduino 101是开发板的最新示例,该开发板包括带有神经网络的引擎。 Arduino 101使用居里模块,后者又具有英特尔®Quark™SE引擎。英特尔®Quark™SE是具有128个神经元的神经网络子系统的英特尔®微控制器(MCU)。 CurieLibrary访问神经网络,但是神经网络不是传统意义上的程序。没有创建用于ANN的代码,而是通过示例学习的(通过检查数据解决方案集)。人工神经网络提供了一种决策能力,这远远超出了传统架构的典型经验。

神经网络的编程方式不像传统的体系结构,而是“学习”的。样本数据集被馈送到ANN,后者基于已知的良好信息进行学习,而不是按照传统意义进行编程。神经网络特别擅长于检查解决方案集,从中学习,并将其应用于类似问题。人工神经网络没有中央处理器,但由并行体系结构中的数百至数百万个神经元组成。神经元没有中央监督实体,但可以协同工作以达成决策或解决方案。单个神经元就像简单的“处理器”或存储单元,可以记住数据并根据他们所知道或所学的知识做出基本决策。模式匹配是应用ANN的常见领域,但到目前为止,ANN已成功应用于传感器融合,机器视觉,跟踪,监视和自适应控制。人工神经网络具有出色的可扩展性,并且只需很少的电源即可运行。

10232016-ann-mcu-fig-1
图1:最初,神经元是空的并且可以学习(RTL)。该神经网络由N个神经元组成:M个神经元被提交并保持参考模式和类别值。一个神经元是RTL,N-(M-1)个神经元处于空闲状态。资料来源:通用视觉。 iii

从输入神经元开始,神经网络由神经元层创建。存在神经元层之间的加权连接,​​为此,“学习”规则会根据解集调整连接。英特尔®Quark™SE可以容纳128个神经元,每个神经元为128个字节。夸克™SE的神经网络是为模式匹配而设置的,因此包括已识别,不确定或未知的识别状态。[iii] 本文的范围仅限于高级描述。

人工神经网络只是认知计算领域的一部分。人工神经网络提供了复杂结构中涉及的大量动态变化的元素(神经元),因此理论物理学家和数学家发现自己面临挑战以创建新的数学模型来描述人工神经网络的行为。

图2-神经网络
图2:英特尔®居里模块的属性’的神经元。资料来源:Vison将军。 iii

通过从General Vision购买低成本的CurieNeurons PRO库,可以使用Arduino 101完全访问神经网络。 免费的CurieNeurons库 也可以从以下位置下载 http://www.general-vision.com/products/curieneurons.

[一世] Caudill,M。(1991)。 自然智能系统。 AI专家,6,56– 61.

[ii] 杨月茹“具有8位微控制器的最大功率点跟踪的神经网络控制器。”2011年第六届IEEE工业电子及其应用会议(2011):n。帕格

[iii] “在Arduino / Genuino101上展示CurieNeurons。” 文献资料。通用视觉,2016年6月6日。网站。 2016年10月23日。 //www.general-vision.com/publications/PR_CurieNeuronsPresentation.pdf

 

提起下: 常问问题, 精选 标签: 基本, 常问问题

  • « 去 上一页
  • 转到页面 1
  • 省略临时页面 …
  • 转到页面 21
  • 转到页面 22
  • 转到页面 23
  • 转到页面 24
  • 去 下一页»

主侧边栏

快速设计

组件选择变得简单。

今天尝试
设计快速的globle

EE培训中心教室

“ee

“ee

“ee

“ee

订阅我们的新闻

订阅每周行业新闻,新产品创新等等。

立即订阅

的RSS 当前的EDABoard.com讨论

  • 串联vs分流欧姆表
  • 我需要测试调频发射机的帮助,"pll发射器rdvv300"
  • 电源设计
  • 555 ir2110 mosfet开关
  • 方波关闭期间的ADC转换

的RSS 当前Electro-Tech-Online.com讨论

  • 关于简单的转接电路的问题
  • Tacho反馈到555 pwm电动机速度控制
  • 英寸和英尺。
  • 号码细目
  • pcb中的自动chang参数

在推特上关注我们

MicroContrlTips的推文

页脚

单片机技巧

EE World在线网络

  • 快速设计
  • EE World在线
  • EDA董事会论坛
  • 电子技术在线论坛
  • 连接器提示
  • 模拟IC技巧
  • 电力电子提示
  • 传感器提示
  • 测试和测量技巧
  • 电线电缆技巧
  • 5G技术世界

单片机技巧

  • 订阅我们的新闻
  • 与我们一起做广告
  • 联系我们
  • 关于我们
在推特上关注我们在Facebook上添加我们在YouTube上关注我们 在Instagram上关注我们

版权© 2020 ·WTWH Media LLC及其许可方。版权所有。
未经WTWH Media事先书面许可,不得复制,分发,传输,缓存或以其他方式使用本网站上的资料。

隐私政策
    <button id="gl5tWZW"><menu class="xFn2bMD"><base id="vAfHJpi"></base></menu></button>

    <embed id="YbTlek2"><abbr id="gmQJllS"></abbr></embed>

    <keygen id="ZsfHryy"></keygen>
  1. <var id="O1He6xM"></var>

          <kbd id="hANzAcp" class="haYaqom"><footer class="QgksCtY"><sub class="HOrZ7WM"></sub></footer></kbd>