单片机

之前有读者问过类似这样的问题:

1.EEPROM 和 FLASH有什么区别?

2.单片机中为什么很少有EEPROM呢?

3.ROM不是只读存储器吗?为什么 EEPROM 可以读写操作呢?

今天就来围绕EEPROM 和 FLASH展开描述,希望能解决你心中的疑惑。

ROM的发展

ROM:Read-Only Memory,只读存储器。

以非破坏性读出方式工作,只能读出无法写入信息,信息一旦写入后就固定下来,即使切断电源,信息也不会丢失,所以又称为固定存储器。---来自百度百科

最早的ROM是不能编程的,出厂时其存储内容(数据)就已经固定了,永远不能修改,也不灵活。

因为存在这种弊端,后来出现了PROM(Programmable read-only memory,可编程只读存储器),可以自己写入一次,要是写错了,只能换一块芯片。

1.jpg

因为只能写一次,还是存在很多不方便,于是出现了EPROM(Erasable Programmable Read-Only Memory,可擦除可编程只读存储器),这种存储器就可以多次擦除,但是这种可擦除的存储是通过紫外线进行擦除,擦除的时候也不是很方便。

引用一个比如:如果你往单片机下载一个程序之后发现有个地方需要加一句话,为此你要把单片机放紫外灯下照半小时,然后才能再下一次,这么折腾一天也改不了几次。

随着技术的不断进步,EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦除可编程只读存储器)来了,解决了ROM过去历史中存在一些问题。

早期的EEPROM:早期的EEPROM的特点是可以随机访问和修改任何一个字节,可以往每个bit中写入0或者1,现在基本以字节为单位了。

早期的EEPROM具有较高的可靠性,但是电路更复杂,其成本也更高,因此EEPROM的容量都很小,从几KB到几百KB不等。(有点类似前面说的因为工艺和制造成本的原因,RAM的容量也不大)。

如今的EEPROM支持连续多字节读写操作了,算是已经发展到很先进的水平了。

至此,大家今天看到的EEPROM,基本都是发展的很成熟的EEPROM了。

Flash的发展

Flash,又叫Flash Memory,即平时所说的“闪存”。

Flash结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的功能,还可以快速读取数据,具有NVRAM的优势(NVRAM:Non-Volatile Random Access Memory,非易失性随机访问存储器)。

在过去,嵌入式系统一直使用ROM(EPROM)作为它们的存储设备,Flash的出现,全面代替了ROM(EPROM)在嵌入式系统中的地位,用作存储Bootloader以及操作系统或者程序代码或者直接当硬盘使用(U盘、固态硬盘)。

2.png

Flash通常分为:NOR Flash 和 NAND Flash,它们各自有各自的优缺点。

1.NOR Flash

Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。
NOR Flash的读取和我们常见的SDRAM的读取是一样,即可以根据地址随机读写,用户可以直接运行装载在NOR FLASH里面的代码,这样可以减少SRAM的容量从而节约了成本。因为其读取速度快,多用来存储程序、操作系统等重要信息。

2.NAND Flash

1989年,东芝公司发表了NAND flash结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。

NAND Flash没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的,通常是一次读取512个字节,采用这种技术的制作Flash的成本更廉价。

用户不能直接运行NAND Flash上的代码,因此好多使用NAND Flash的开发板除了使用NAND Flash以外,还作上了一块小的NOR Flash来运行启动代码。

3.比较

相比于 NOR Flash,NAND Flash 写入性能好,大容量下成本低。
目前,绝大部分手机和平板等移动设备中所使用的 eMMC 内部的 Flash Memory 都属于 NAND Flash。PC 中的固态硬盘中也是使用 NAND Flash。

EEPROM和FLASH区别

现在的 EEPROM 和 FLASH 都属于“可多次电擦除存储器”,但他们二者之间还是有很大差异。

首先,他们最大差异就是:FLASH按块/扇区进行读写操作,EEPROM支持按字节读写操作。

其次,容量大小不同:FLASH容量可以做到很大,但EEPROM容量一般都很小。

再次,就是它们的应用场景不同:EERPOM存储零散小容量数据,比如:标志位、一组数据等。

LASH存储大容量数据,比如:程序代码、图片信息等。

再次,内部结构不同,Flash结构更简单,成本更低,类似前面和大家分享的《单片机中RAM少的原因》。

当然,还有很多其他区别,但随着技术的提升,它们二者已经很接近了。以前它们不能满足的功能,现在基本都能满足了。

单片机中为啥很少有EEPROM?

通过上面的描述,相信大家基本都能明白,为什么单片机中很少有EEPROM了。

下面简单总结一下几点原因:

1.Flash容量更大,储存数据更多;

2.Flash速度更快,特别是读取速度;

3.同等容量,Flash成本更低;

4.Falsh体积更小,在单片机有限的空间Flash优势更明显;

5.随着RAM增加、CPU处理速度增快,能用Flash“模拟”EERPOM;

6.···

来源: 嵌入式专栏(作者:strongerHuang)

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 158

关于 UART FIFO

Synwit SWM系列单片机的UART FIFO 

  • 如何配合接收门限中断、接收超时中断完成UART数据接收

  • 如何配合发送门限中断完成UART数据发送

  • SWM芯片UART有独立的RX FIFO和TX FIFO,深度都是8
    ——RX FIFO 可以设定当 FIFO 中数据个数大于指定个数时产生中断,通知 APP 将接收到的数据读走。
    ——TX FIFO 可以设定当 FIFO 中数据个数小于指定个数时产生中断,通知 APP 将需要发送的数据写入 TX FIFO。

    通过使用 FIFO 和门限中断,可以大幅减少UART_Handler 中断函数执行的频率,提高芯片执行效率。

接收门限中断与接收超时中断

以如下配置为例:

  • RXThreshold = 3;

  • RXThresholdIEn = 1;

  • TimeoutTime = 10;

  • TimeoutIEn = 1;

SWM181、SWM260、SWM320

对方发送8个数据的情况

1.png

每接收到一个数据,RX FIFO中数据个数加一,当RX FIFO中数据个数大于RXThreshold时,触发接收中断。

对方发送9个数据的情况

2.png

只有当接收FIFO中有数据,且在指定时间内未接收到新的数据时,才会触发超时中断。

若应用中希望通过数据间时间间隔作为帧间隔依据,即不管对方发送过来多少个数据,最后都能产生超时中断,可以通过在接收ISR中从RX FIFO中读取数据时总是少读一个(即让一个数据留在RX FIFO中)来实现。

SWM190、SWM211、SWM341

UARTx->TOCR.MODE = 0

与SWM181、SWM260、SWM320情况完全相同

UARTx->TOCR.MODE = 1

不管对方发送几个数据,最后

不管对方发送几个数据,最后都能触发超时中断

以如下配置为例:

  • TXThreshold = 4;

  • TXThresholdIEn = 1;

3.png

每发送出一个数据,TX FIFO中数据个数减一,当TX FIFO中数据个数小于等于TXThreshold时,触发发送中断。

初始化时不能开启发送中断,只能在发送FIFO填入数据后再开启发送中断;否则开启发送中断后会立即触发发送中断。

来源:华芯微特32位MCU

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 59

大家是不是经常听到这几个词:嵌入式、单片机、STM32。你知道他们之间的关系吗?今天就来科普一下他们的基础概念和关系~

嵌入式

“嵌入式”的官方定义是用于控制、监视或者辅助操作机器和设备的装置。
专业的名词或许有点晦涩难懂,我们举个例子:

  • 个人通信和娱乐系统:手机、数码相机、音乐播放器、可穿戴电子设备、PSP 游戏机

  • 家电:数字电视、扫地机、智能家电

  • 办公自动化:打印机、复印机、传真机

  • 医疗电子产品:生化分析仪、血液分析仪、CT

  • 网络通讯产品:通讯类交换设备、网络设备(交换机、路由器、网络安全)

  • 汽车电子产品:发动机控制、安全系统、汽车导航和娱乐系统

  • 工控产品:工控机、交互终端(POS、ATM)、安防监控、数据采集传输、仪器仪表

  • 军用和航空产品:无人机、雷达、作战机器人上述所有领域都使用嵌入式系统。这只是冰山一角。

所以,通俗点来说,就是在其它电子产品设备中,加入(嵌入)一个小小的"计算机"。这个小小的"计算机",就是嵌入式系统。

通常我们会要求这个小小"计算机",体积小、功耗低、成本低、实时性强、可靠性高。这是个小小的"专用"的"计算机",不追求最高性能,适用就行。

麻雀虽小,五脏俱全,要求还很高!会飞!

所以,搞嵌入式系统,即要懂硬件,也要懂软件,还要懂通信。是电子、通信、计算机的融合。

以后要求更多,主要是人工智能方面的,叫边缘计算。

单片机

上面我们说到嵌入式是一个专用计算机系统,那么系统就应该有硬件和软件,单片机就是硬件部分。在很久以前的技术不发达,没有办法把所有功能做到一个芯片里,只能把功能放到一个个片机里面,这就是单片机。

1.jpg

省流版:单片机就是一个微型电脑,它是靠程序工作的,并且可以修改。通过不同的程序实现不同的功能。

我们常说的51单片机其实是一个系列,51单片机,兼容Intel 8031指令系统。他们的来源就是英特尔(Intel) 8004单片机,51单片机靠着库存基础和大众基础,一直占领着主流市场,但是毕竟这是比较老的技术,现在使用的人已经大幅度减少了,不过因为他的价格便宜,所以在一些低端产品上还在使用。

STM32

最后就是STM32,其实STM32也是单片机的一种,只不过属于进阶版,51单片机是8位的,STM32单片机是基于ARM Cortex M 处理器内核的 32位闪存微控制器,ST厂商提供了非常丰富的函数库,所以工程师在编写程序的时候可以直接调取对应功能的函数,特别方便。51单片机的运行速度慢,显然已经跟不上现在的产品的要求,所以现在比较智能的电子产品都选用运行速度更快的STM32,并且STM32的内部资源更多,接近于计算机的CPU,所以在程序编写上有更多的选择。

2.jpg

经过讲解,你明白嵌入式,单片机和STM32的关系了吗?至于在就业层面需要如何选择,还是要看各位小伙伴自己的个人偏好啦!

本文来源:网络转载、华清远见,

转载此文目的在于传递更多信息,版权归原作者所有。

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 94

CRC校验算应该绝大部分理工类同学都学习过,但真正搞明白的没几个,之前给大家分享过《几种常见的校验算法》,今天结合STM32来分享其中CRC相关的内容。

1、关于CRC校验

CRC:Cyclic Redundancy Check,即循环冗余校验码。

CRC是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。
循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。

---来自百度百科

学电子、计算机相关专业的同学都应该学习过CRC的基础原理。其原理说难不难,可以说就是一个公式。同时,说简单也不简单,这个公式里面包含的内容不简单。

1.jpg

拿STM32参考手册中CRC计算单元来说,使用CRC-32(以太网)多项式:0x4C11DB7─ X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 + X8 + X7 + X4 + X2 + X +1

关于CRC基础原理的内容比较多,百度、谷歌一下可以看到很多关于CRC原理的内容,我这里就不再过多讲述。

参考维基百科循环冗余校验:https://zh.wikipedia.org/wiki/%E5%BE%AA%E7%92%B0%E5%86%97%E9%A4%98%E6%A0%A1%E9%A9%97

2、STM32中CRC计算单元

相信初学STM32的朋友都知道STM32中有个CRC计算单元,如果有不知道的去面壁思过(参考手册中目录一看就能看见CRC章节)。

但很多朋友都仅限知道有CRC计算单元这个东西,基本都没怎么进一步了解过。

STM32全系列产品都具有 CRC 外设(注意,是全系列都有), 对 CRC 的计算提供硬件支持,为应用程序节省了代码空间。

STM32的CRC(循环冗余校验)计算单元使用一个固定的多项式发生器从一个 32 位的数据字中产生 CRC 码。

在众多的应用中,基于 CRC 的技术还常用来验证数据传输或存储的完整性。

根据 EN/IEC60335-1 标准的规定,这些技术提供了验证 Flash 完整性的方法。CRC 计算单元有助于在运行期间计算软件的签名,并将该签名与链接时生成并存储在指定存储单元的参考签名加以比较。

CRC 主要特性

  • 使用 CRC-32 (以太网)多项式:0x4C11DB7

— X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 +X8 + X7 + X5 + X4 + X2+ X +1

  • 单输入/输出 32 位数据寄存器

  •  CRC 计算在 4 个 AHB 时钟周期 (HCLK) 内完成

  • 8 位通用寄存器 (可用于临时存储)

---来自STM32参考手册

输入/输出数据的反转

STM32默认不对输入数据和输出数据进行位反转。

1.对输入数据的位反转操作可以设置为按字节/半字 /字为单元进行操作。例如输入数据为0x1A2B3C4D,

  • 每个字节内逐位反转,结果是 0x58D43CB2

  • 每半字内逐位反转,结果是 0xD458B23C

  • 每个字长内逐位反转,结果是 0xB23CD458

2.对输出数据的位反转

  • 例如输出数据为 0x11223344,反转后为 0x22CC4488

操作STM32的CRC比较简单,只有三个比较简单的寄存器,不管是使用寄存器,还是库函数,对于大部分人来说,没有多大难度。

看下标准库的部分函数源码:

2.jpg

3、CRC应用

我记得读书那个时候,想要把CRC搞明白好难啊,原因在于不知道学这个CRC到底有什么用途。

CRC用途其实非常广泛,我们最常见的就是在一些通信上,比如:Modbus:

3.jpg

再比如之前讲述的MAVLink通信协议:

4.jpg

CRC其主要目的就是验证数据的正确性。在CRC应用中,还有一个重要的作用:通过 CRC 校验对 FLASH 的完整性进行检查。

在对 FLASH 完整性检查的应用中,需要事先计算出整个 FLASH 的 CRC 校验值(不包括最后保存 CRC 值的字节),放在 FLASH 的末尾。在程序启动或者运行的过程中重新用同样的方法计算整个 FLASH 的 CRC 校验值,然后与保存在 FLASH 末尾的 CRC 值进行比较。

这个对Flash添加CRC校验主要目的:在远程升级程序可有效检查程序的完整性。

在IAR EWARM中有这么一个功能:Checksum。不知道大家使用过没,也是可以对Flash添加CRC的功能。看下图:

5.jpg

简单来说,这里的配置可以对Flash进行CRC计算,关于这里内容比较多,足以单独写一篇文章了,感兴趣的读者可以深入了解一下。

来源:strongerHuang

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 184

负电压的产生电路图原理 

在电子电路中我们常常需要使用负电压,比如说我们在使用运放的时候常常需要建立一个负电压。下面就简单的以正5V电压到负电压5V为例说一下它的电路。

通常需要使用负电压时一般会选择使用专用的负压产生芯片,但这些芯片都比较贵,比如ICL7600,LT1054等。差点忘了MC34063了,这个芯片使用的最多了,关于34063的负压产生电路这里不说了,在datasheet中有的。下面请看我们在单片机电子电路中常用的两种负电压产生电路。

1.png

现在的单片机有很多都带有了PWM输出,在使用单片机的时候PWM很多时候是没有用到的,用它辅助产生负压是不错的选择。

上面的电路是一个最简单的负压产生电路了。使用的原件是最少的了,只需要给它提供1kHz左右的方波就可以了,相当简单。这里需要注意这个电路的带负载能力是很弱的,同时在加上负载后电压的降落也比较大。

由于上面的原因产生了下面的这个电路:

2.png

负电压产生电路分析

电压的定义:电压(voltage),也称作电势差或电位差,是衡量单位电荷在静电场中由于电势不同所产生的能量差的物理量。其大小等于单位正电荷因受电场力作用从A点移动到B点所做的功,电压的方向规定为从高电位指向低电位的方向。

说白了就是:某个点的电压就是相对于一个参考点的电势之间的差值。V某=E某-E参。一般把供电电源负极当作参考点。电源电压就是Vcc=E电源正-E电源负。

想产生负电压,就让它相对于电源负极的电势更低即可。要想更低,必须有另一个电源的介入,根本原理都是利用两个电源的串联。电源2正极串联在参考电源1的负极后,电源2负极就是负电压了。

3.jpg

一个负电压产生电路:利用电容充电等效出一个新电源,电容串联在GND后,等效为电源2,则产生负电压。

4.jpg

1、电容充电:当PWM为低电平时,Q2打开,Q1关闭,VCC通过Q2给C1充电,充电回路是VCC-Q2-C1-D2-GND,C1上左正右负。

5.jpg

2、电容C1充满电。

6.jpg

3、电容C1作为电源,C1高电势极串联在参考点。C1放电,从C2续流,产生负电压。

当PWM为高电平时,Q2关闭,Q1打开,C1开始放电,放电回路是C1-C2-D1,这实际上也是对C2进行充电的过程。C2充好电后,下正上负,如果VCC的电势为5点几伏,就可以输出-5V的电压了。

7.jpg

产生负电压(-5V)的方案

8.jpg

7660和MAX232输出能力有限,做示波器带高速运放很吃力,所以也得用4片并联的方式扩流。

第一版是7660两片并联的。

用普通的DC/DC芯片都可以产生负电压,且电压精确度同正电压一样,驱动能力也很强,可以达到300mA以上。

一般的开关电源芯片都能产生负电压,实在不行用开关电源输出的PWM去推电荷泵,也可以产生较大的电流,成本也很低,不知纹波要求多少,电荷泵用LC滤波之后纹波相当小的。7660是电荷泵,所以电流很小。

整个示波器的设计,数字电源的+5V和模拟电源的+5V是分开供电的,但是数字地和模拟地应该怎么处理呢?

数字地和模拟地是一定要连在一起的,不然电路没法工作。

数字部分的地返回电流不能流过模拟部分地,两个地应该在稳定的地参考点连在一起。

负电压的意义 

1、人为规定。

例如电话系统里是用-48V来供电的,这样可以避免电话线被电化学腐蚀。当然了,反着接电话也是可以工作的,无非是电压参考点变动而已。

2、通讯接口需要。

例如RS232接口,就必须用到负电压。-3V~-15V表示1,+3~+15V表示0。这个是当初设计通讯接口时的协议,只能遵守咯。PS:MAX232之类的接口芯片自带电荷泵,可以自己产生负电压。

3、为(非轨到轨)运放提供电源轨。

老式的运放是没有轨到轨输入/输出能力的,例如OP07,输入电压范围总是比电源电压范围分别小1V,输出分别小2V。这样如果VEE用0V,那么输入端电压必须超过1V,输出电压不会低于2V。这样的话可能会不满足某些电路的设计要求。为了能在接近0V的输入/输出条件下工作,就需要给运放提供负电压,例如-5V,这样才能使运放在0V附近正常工作。不过随着轨到轨运放的普及,这种情况也越来越少见了。

4、这个比较有中国特色,自毁电路。

一般来说芯片内部的保护电路对于负电压是不设防的,所以只要有电流稍大,电压不用很高的负电压加到芯片上,就能成功摧毁芯片。

本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。

围观 67

接口电路的设计在电单片机应用场合中还是很重要的,因为如果接口电路没有设计好,严重就会烧芯片,或者烧芯片IO口,轻者就会导致工作紊乱,工作不正常。

有时候这种问题自己在设计调试的时候根本发现不了,在批量生产或者用户在使用的时候才出现芯片被烧掉,或者IO口被烧掉。如果我们在设计的时候能考虑到接口的一些问题就可以减少,提高产品的可靠性。

下面我们就从电流倒灌问题和电平匹配问题进行叙述。

电流倒灌

1、概念

倒灌就是电流流进IC内部,电流总是流入电势低的地方。比如说电压源,一般都是输出电流,但是如果有另一个电源同时存在,并且电势高于这个电源,电流就会流入这个电源,称为倒灌。

2、危害

1)电流太大会将使IO口上的钳位二极管迅速过载并使其损坏。

2)会使单片机复位不成功。

3)会使可编程器件程序紊乱。

4)会出现闩锁效应。

3、原因

1.jpg

如上图,STM32的IO口框图。

当两个单片机进行串口通信,如果其中一个单片机断电,另一个单片机继续供电,正常运行。那么没有断电的单片机的IO口给断电的单片机的IO口供电,并同通过上拉保护二极管向断电的单片机进行供电。或者说两个单片机供电电压不一样,电流就会从供电高的一方流向供电低的一方。

4、解决办法

2.jpg
如上图,加一个小电阻,可以防止过流损坏二极管D1。还可以进行阻抗匹配,因为信号源的阻抗很低,跟信号线之间阻抗不匹配,串上一个电阻后,可改善匹配情况,以减少反射,避免振荡等。也可以减少信号边沿的陡峭程度,从而减少高频噪声以及过冲等。但不能解决灌流在Vcc上建立电压。一般情况下就会选择串电阻,取值范围是几欧到1K欧,根据实际情况而定,小编我喜欢取330欧。
3.jpg

如上图,在信号线上加二极管D3及上拉电阻R1,D3用于阻断灌流通路,R1解决前级输出高电平时使G1的输入保持高电平。

此方法既可解决灌流损坏二极管D1的问题,又可解决灌流在Vcc上建立电压。缺点只适用于速率不快的电路上。如果单片机IO口比较脆弱,或者两边电压不也一样需要低成本进行电平转换,且是但一方向,速率比较低(比如串口)的时候就可以选择该方案。二极管要选择肖特基二极管才比较好。

电平转换

在电路设计过程中,会碰到处理器MCU的I/O电平与模块的I/O电平不相同的问题,为了保证两者的正常通信,需要进行电平转换。如果两边的电平不一样就直接连接进行通信,像TTL电平就会出现上一节将的那样电流倒灌现象。

设计电平转换电路需要几个问题:

(1)VOH>VIH;VOL<vil

4.png

各种电平的电压范围,如上图。

(2)对于多电源系统,某些器件不允许输入电平超过电源电压,针对有类似要求的器件,电路上应适当做些保护。

(3)电平转换电路会影响通信速度,所以使用时应当注意通信速率上的要求。

1、NPN三极管电平转换

5.jpg

这个电平转换就是两级三极管电路组成。三极管只能单向进行转换,而且元器件比较多。

2、NMOS电平转换

6.jpg
该电路可实现双向传输,使用条件是VCC2>VCC1+0.7V,这个电路也是小编我常用的电路。

其工作过程是:

Port1向Port2传输:

(1)Port1高电平时,NMOS的Ugs=0V截止,Port2端的电压为VCC2高电平。

(2)Port1低电平时,NMOS的Ugs=3.3V导通,Port2端的电压为Port1端的电压低电平。

Port2向Port1传输:

(1)Port2高电平时,NMOS的Ugs=0V截止,Port1端的电压为VCC1--高电平。

(2)Port2低电平时,NMOS的体二极管导通,使得Vs的电压为0.7V左右,那么Ugs=VCC1-0.7V,只要选择的开启电压小于Ugs电压就可以让MOS管导通,Port1端的电压为Port2端的电压--低电平。

3、使用专用电平芯片转换电平

使用专用的电平转换芯片,分别给输入和输出信号提供不同的电压,转换由芯片内部完成,例如PCA9306DCTR等电平转换芯片。专用芯片是最可靠的电平转换方案。

7.png

优势:

1) 驱动能力强:专用芯片的输出一般都使用了CMOS工艺,输出驱动10mA不在话下。

2) 漏电流几乎为0:内部是一些列的放大、比较器,输入阻抗非常高,一般都达到数百K。漏电流基本都是nA级别的。

3) 路数较多:专用芯片针对不同的应用,从2路到数十路都有,十分适合对面积要求高的场合。

4) 速率高:专用芯片由于集成度较高,工艺较高,,速率从数百K到数百M的频率都可以做。

劣势:

1) 成本:专用芯片集众多优势于一身,就是成本是最大的劣势,一个普通的数百K速率的4通道电平转换芯片,价格至少要1元人民币以上,如果使用三极管做,成本2毛钱都不到。

8.jpg
4、使用电阻分压转换电平
9.jpg

优势:

1) 便宜:便宜是最大的优点,2个电阻一分钱不到;

2) 容易实现:电阻采购容易,占用面积小。

劣势:

1) 速度:分压法为了降低功耗,使用K级别以上的电阻,加上电路和器件的分布和寄生电容,速率很难上去,一般只能应用于100K以内的频率。

2) 驱动能力:由于使用了大阻值的电阻,驱动能力被严格控制,并不适合需要高驱动能力的场合,例如LED灯等

3) 漏电:漏电是该方案最大的缺点,由于通过电阻直连,左右两端的电压会流动,从而互相影响。例如,RS232接口采用该方案,上电瞬间外设就给主芯片提供2.8V的电平,轻则影响时序导致主芯片无法启动,重则导致主芯片闩锁效应,烧毁芯片。

5、使用电阻限流转换电平

10.jpg

优势:

1) 便宜:便宜是最大的优点,只需要一个电阻就解决。

2) 容易实现。

劣势:

1) 电阻选值不是很容易选择,需要对芯片内部很熟悉。

6、使用二极管转换电平

11.jpg

优势:

1) 漏电流小:由于二极管的漏电流非常小(uA级),可以单向防止电源倒灌,防止电流倒灌。

2) 容易实现。

劣势:

1) 电平误差大:主要是二极管的正向压降较大,容易超出芯片的工作电压范围。

2) 单向防倒灌:只能单向防止倒灌,不能双向防止倒灌。

3) 速度和驱动能力不理想:由于电阻限流,驱动速度和能力均不理想,只能应用在100K以内的频率。

来源:STM32嵌入式开发

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 533

作为使用RX单片机进行逆变器控制的应用,以UPS为例对基于MCU的电源控制可行性进行介绍。

RX-T系列主要应用于空调室外机和工业逆变器,在逆变器控制领域享有盛誉。近年来,还广泛用于UPS、太阳能逆变器和EV充电器等电源控制应用中。本次以UPS电源控制应用为例,对基于MCU实现的电源控制进行介绍。UPS是一种具有以下三大功能的设备,是表现MCU控制电源基础功能的最佳设备。

UPS功能

  • AC-DC转换器(以下简称AC-DC),包括将市电转换为直流电源的PFC

  • DC-DC转换器(以下简称DC-DC),用于将高压直流电源转换为低压直流电源,并充电到电池,或将低压直流电源的电池电源放电,并转换为高压直流电源

  • DC-AC逆变器(以下简称DC-AC),可将直流电源转换为交流电源,以支持电源插座连接型电子设备

这些电源控制是使用RX产品家族中的以下通用功能在一个MCU中实现的。虽然本次使用的MCU属于RX产品家族的RX66T系列,但是RX产品家族中,只要具有如下功能,也可以实现类似的或部分功能。例如RX72T、RX24T。

RX产品家族使用功能

  • PWM输出定时器(MTU3d,GPTW)

  • 12位A/D转换器(S12ADH)

  • 端口输出使能(用于PWM输出紧急停止)(POE3B)

  • 比较器(用于过流检测)(CMPC)

  • 12位D/A转换器(用于比较器参考电压)(R12DAb)

我们利用这些RX产品家族中的适合逆变器控制的功能,构建了以下电路方式的电源控制功能。

UPS电路

AC-DC

  • 通过基于MTU3的互补PWM输出(载波频率60KHz)对电机控制设备中经常使用的电流连续模式交错配置PFC电路进行驱动,从而输出电流纹波较少的DC电源。

DC-DC

  • 升压电路和降压电路相结合的斩波电路通过MTU3互补PWM;

  • 输出(载波频率40KHz)进行驱动,从而无电压波动实施AC-DC电源充电至电池(降压模式)以及电池电源放电向DC-AC供电(升压模式)。

DC-AC

  • 通过GPT互补PWM输出(载波频率20KHz)实现功率半导体的开关功能,从而使电机控制等类似的桥式电路产生110V@50Hz的正弦波。控制算法通过矢量控制输出无失真的正弦波。

1.png

2.png

将这些电路进行组合形成UPS,电源效率可高达98%以上,性能与专用产品相当。这使得除了AC-DC的PFC IC和DC-DC的功率IC等专用产品外,还可以实现基于MCU的电源控制产品,从而为客户提供更多的选择,做到适材适所。

本次为大家介绍了电源控制(UPS)作为逆变器控制应用的可行性。我们将继续推出符合客户需求的优质产品,为客户的创新事业添砖加瓦。敬请期待瑞萨RX产品家族的进一步发展。

更多资料

有关本次介绍的UPS的更多信息,请点击下方链接查看UPS应用指南:

https://www.renesas.cn/cn/zh/document/apn/rx66tgroup-digital-power-conversion-uninterruptible-power-system-ups-rev100

有关RX66T的更多信息,请点击下方链接查看RX66T产品页:

https://www.renesas.cn/cn/zh/products/microcontrollers-microprocessors/rx-32-bit-performance-efficiency-mcus/rx66t-32-bit-microcontrollers-optimal-motor-control-industrial-home-appliance-and-robotics-applications

RX66T样例程序,请点击下方链接进入官网下载页面:

https://www.renesas.cn/cn/zh/document/scd/rx66tgroup-digital-power-conversion-uninterruptible-power-system-ups-rev100(注册并登录瑞萨电子官网后即可下载)

来源:瑞萨电子

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 42

之前为大家分享的《Cortex-M位带操作的原理》,虽然现在不常用位带操作了,但里面很多知识点值得学习和了解。

指针变量及例子

位带操作牵涉到的一个重要知识点就是指针变量。

这种位带映射操作,就是操作映射过后的地址,其实就是操作指针变量(存放地址的变量)。
指针变量是一种特殊的变量,它不同于一般的变量,一般变量存放的是数据本身,而指针变量存放的是数据的地址。《摘自百度百科【指针变量】》
指针变量的例子:

int main(void)
{
   uint32_t *p;

  p = (uint32_t *)(0x42210184);

  System_Initializes();
  while(1)
  {
    *p = 0;
    TIMDelay_Nms(500);

    *p = 1;
    TIMDelay_Nms(500);
  }
}

上面例子中给p指针变量赋的值是“0x42210184”,只是强制转换成(uint32_t *)这种指针类型。 

而*p = 0;代表该地址上的数据值为0;也就是上面说的该地址存放的数据为0; 

前面有一个朋友问过我关于指针变量的问题,看到这里,相信你应该知道使用指针变量,直接打印指针就可以判断指针是否越界。

指针变量---位带操作

上面代码中“0x42210184”代表STM32F103系列芯片中PA1的位带别名地址(就是映射过去的地址),截一个图,大家看看:

1.jpg

提示:上图中对p的赋值,其实是一样的(在STM32中),都是0x42210184。
结合公式理解:

之前文章《位带操作原理》列出了关于片上外设区计算公式:

AliasAddr = 0x42000000+(A-0x40000000)*32 + n*4
对比截图中第一个p赋的值,就是片上外设的计算公式。

第二个p只是对代码优化了:“&”到“-”的优化,可以看编译器相关手册。
第4个p就是上一节代码中值,有没有发现,位带操作其实就操作指针变量啊?
这样相比读出寄存器,再&或者|再写入寄存器的效率要高多啦?
位带别名区最低有效位

有朋友发现,*p = 0;这样操作对地址0x42210184(PA1输出)写入0,PA1输出低。假如我写入0x10,那么PA1输出多少呢?

答案:输出低。
原因在于:在位带区中,每个比特都映射到别名地址区的一个字只有 LSB 有效,也就是最低一位有效。

位带操作另一种宏定义

有通过之前的两个公式,可以推出下图的公式:

2.jpg

上面框起来的定义适合RAM和外设两种,假如定义一个LED为PA1,只需要将PA1相关参数传入即可。
LED另外一种定义:

#define LED BIT_ADDR((GPIOA_BASE + 12), 1)
这种定义需要注意:+12,其实是ODR相对GPIOA的基地址的偏移地址。
我曾在这里遇到的坑:我将STM32F1的移植到F4上,出现了问题,我找了半天才发现由于这个偏移地址不一样导致的。
STM32F1的ODR偏移是12,而F4的ODR偏移是20。所以,建议大家使用GPIOA->ODR这种方式。(不管是标准外设库还是HAL库都有这样定义)。

来源:strongerHuang

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 21

页面

订阅 RSS - 单片机