自己的原文哦~ https://blog.51cto.com/whaosoft/14151258
一、运算放大器是不是非线性器件
▌01 运算放大器的非线性1.运算放大电路
作为信号处理的常用器件,运算放大器,在其信号处理范围之内,通常认为是线性器件。也就是它的增益不随着信号的幅度变化而改变。影响运算放大电路精度的因素,或者说它的线性特性主要是由它的输入偏置电压、偏置电流造成的输出零点的偏移。这一点往往可以通过增加零点补偿调整电阻进行消除。
但是对于运放的非线性,即它的开环增益随着信号幅度变化而变化的特性往往并不为人所重视。这是因为在常见到的运算放大电路中,通常采用反馈放大器的形式,只要运算放大器的增益足够大,电路的放大倍数是由外部的反馈电阻网络决定的。比如下面的电路:
它的增益为:
其中:α 是反馈电阻网络的比值:,是运放的开环电压增益。如果足够大,电路的增益将会由R1,R2的比值决定。
但是作为精密放大电路,特别是要求放大倍数比较高的时候,随着输入电压的变化,也就是运放的非线性就不能够忽略了。特别是,这种非线性无法向电压零点补偿那样容易消除。
2.如何测量运放非线性?
通常在运算放大器芯片的数据手册中不会给出芯片的非线性指标。那么如果评估芯片增益的非线性呢?
一些主要提供运放器件的半导体厂家会在其网站给出一些测量他们运放产品开关增益测量方案,比如TI公司 TI:Gain and Linearity Testing for Precision Operational Amplifiers,或者ADI公司 AD:Op-Amp Open Loop Gain and Open Loop Gain Nonlinearity。
这些方案也都是比较成熟的测量方式。为了能够对于通常比较大的运放开环电压增益(通常大于100000)进行测量,所采用的方法是对反馈电压再经过分压之后连接至运放的负极性输入端口。这样便可以将运放输入端微小的电压放大之后反映在电路的输出端口。
比如下面个电路就是分别来自TI,ADI公司的测量方案:
通过在输入端加入低频三角波形(10~50Hz)信号,通过观察输出信号的变化可以获得器件的开环电压增益以及对应的非线性。
▌02 实验结果
下面的实验来测量一款常见的运放它的电压增益的非线性。
1.测试芯片
用于实验的芯片为 HA17741[3] 是一款由HITACHI提供的频率相位补偿的通用运算放大器,主要用于测试与控制领域。开环增益约106dB (200,,000倍),最大工作电压±18V。下图给出了期间的管脚功能定义。
HA17741内部的等效电路如下图所示。
根据内部结构可以看到芯片的输入电压偏置补偿是通过PIN1,PIN5提供的。使用数字万用表测量PIN1,PIN5对于PIN4(VEE)之间的电阻,阻值分别为(976Ω,975Ω)。下图给出了外部通过一个三端电位器对芯片进行输入偏置电压进行补偿。
2.测试电路
根据前面ADI测测试方案,在面包板上简单搭建起测试电路。其中放大器件偏置电压信号是由R3、Ros的比值决定。它们实际上与运放一起,减少了前向放大增益,进而在输出信号增加了运放输入信号放大之后的成分。
固定R3=1MΩ不变,通过改变Ros的大小,观察输出信号的变化。
3.测量结果
下面分别选择Ros为∞Ω,100Ω,22Ω,10Ω,记录运放的输出信号。输入信号为峰峰值10V,频率为10Hz的三角波信号。
□ Ros=∞Ω
下图显示,输入输出信号保持严格的反向,增益为 -1。此时运放的非线性(增益随着输入电压变化)的特性没有反映到输出信号中来。
□ Ros=100Ω
□ Ros=22Ω
此时电路放大倍数已经降低可-0.5左右。输出信号的非线性比较明显了。特别是当信号比较大的时候,也就是输入信号三角波的定点,对应的输出信号变得圆滑了。
□ Ros=10Ω
下图是将输出信号通过示波器放大之后,可以更加明显体现出运放的增益中存在的严重的非线性。
▌结论
通过运放开环增益测量电路看到运算放大器是一个严重的非线性器件。在实际应用中是通过电压反馈来抑制了运放对放大电路的影响。
.
二、开关电源环路笔记-TL431及光耦传递函数的推导
如何求出从TL431到光耦的传递函数?
下图是反激的TL431的典型电路,我们的目标就是求出传递函数Vout (s)/Verr(s)。
相关器件的处理过程
TL431的处理
求解的第一个问题就是那个TL431不好处理,不是很好下手,它不是我们熟知的运算放大器,也不是跨导放大器(有些地方说是可以看成跨导放大器,但我觉得看成跨导放大器也不好计算吧),那怎么办呢?
我们看下TL431等效电路,翻开TL431的手册,下图是Ti 的TL431手册中的等效电路图:
等效电路可看作是两级放大,第一级为运放,第二级为三极管放大。准确的说,第二级是三极管放大,不过集电极需要上拉到电源才能放大,好在我们的电路就是通过电阻和光耦的发光二极管上拉到电源。
如果理解为两级放大,那就就简单了,我们把它合并为一级就好了,当然两级增益会较一级更大,不过不影响,第一级都能看成理想运放了(增益无穷),两级增益更大,一样看成是无穷就好。
不过需要注意,第一级放大是同相放大器,输入增大,输出也增大;第二级的三极管放大,信号是反相的,基极B电压增大,会导致集电极输出电压减小,信号反相。所以两级合并之后,变成了反相放大器,REF接的是负相端“-”。
想想,输入电压REF增大,第一级运放输出也会增大,输入到三极管的基极B,集电极C电压会减小,是不是这样?
所以,我们可以把TL431进一步等效为我们熟悉的运放了,就是下面的东东:
光耦处理
处理完LT431,还有光耦,其实光耦不用处理,因为当其工作在线性区的时候,总会有一个公式成立,那就是光耦的电流传输比CTR:
我们只需要计算出光耦发光管的电流IF,然后就能根据电流传输比CTR(光耦手册一般有标注),得到光敏晶体管端的电流Ic,然后乘以电阻,就可以得到output的电压了。
但是问题又来了,IF如何得到呢?发光二极管本身的电压和电流是非线性的,那怎么办呢?
二极管导通时,其可用一个电压源Vf和动态电阻Rd来表示,Vf即二极管的导通压降。
然后我们结合实际的情况,二极管的Rd一般都比较小,以PC817为例,下图是PC817的发光二极管的曲线。
我们从曲线上非常粗糙的得到Rd=12.5Ω,这是一个非常糙的值,虽然不准,但是我们可以知道它的量级是几十欧姆,比较小。另外一方面,Rled和Rbias的值一般都是kΩ级别的,因此Rd相对于它俩来说可以忽略掉。
因此,为了简单,我们分析这个电路的时候,完全可以认为二极管两端电压恒定不变,等效为一个电压源,即为Vf不变。
上面说得有点啰嗦,其实主要是为了说明道理。另外一方面,如果二极管的偏置电流比较小,那么Rd会比较大(从上图可以看到,当电流小,伏安特性曲线的切线斜率会小,即Rd会比较大),还是忽略Rd的话,计算可能就不是很准确。关于这个,具体细节就不深究了,如果感兴趣,完全可以不忽略Rd进行计算,计算方法都是一样的,我写这个的目的也不是为了给出一个电路的计算结果,而是希望通过这样一个例子,让兄弟们知道这种电路该咋搞。
下面来看看具体计算过程。
计算过程
有了上面的分析,我们可以把原来的电路等效为下图,现在所有的器件都是我们熟知的器件,计算出传递函数应该就不在话下了。
传递函数计算过程如下:
1、电路稳定后,当Vout增加了△Vo
2、根据运放的“虚短”,负相端电压为2.5V不变,那么R1增加的电流为:△Vo/R1
3、负相端电压2.5V不变,那么Rlower的电流不会有变化;同时根据运放的“虚断”,负相端节点电流一直为0,即不会变化;根据运放的负相端节点电流总和为0,那么R1增加的电流是从Zc流过,即Zc的电流增加量也为:△Vo/R1。
4、Zc电流增加了△Vo/R1,那么意味着Zc两端电压增加了:△Vo*Zc/R1,而Zc右边电压为2.5V不变,那么只有可能是Zc左边的电压发生了变化,变化量为:-△Vo*Zc/R1。因为Zc的电流是往左增大,所以Zc左边的电压是减小的,所以加了一个负号。
5、Zc左边的电压,也就是放大器的输出电压,即放大器输出端电压增加了:-△Vo*Zc/R1。
6、运放输出端电压增加了-△Vo*Zc/R1,Rbias两端电压为VF不变,那么RLed下端的电压也就增加了-△Vo*Zc/R1,而Rled上端电压增加了△Vo,因此,RLed两端电压增加了:△Vo-(-△Vo*Zc/R1)=(1+Zc/R1)*△Vo
7、知道了Rled的电压增量,那么Rled的电流增量为:(1+Zc/R1)*△Vo/Rled
8、又因为Vf恒定不变,那么Rbias的电流恒定不变,所以Rled的电流增量全部流过二极管。即二极管的电流增量为:△If= (1+Zc/R1)*△Vo/Rled
9、二极管电流增量为△If,那么光耦的晶体管电流增量为:△Ic=CTR*△If= CTR* (1+Zc/R1)*△Vo/Rled
10、Rpullup的电流增量也为△Ic,那么Rpullup两端的电压增量为△Ic*Rpullup,这个电压增量也就是Verr的电压减小量,所以△Verr=- CTR* (1+Zc/R1)*△Vo*Rpullup/Rled,我们把公式变换下,即:△Verr/△Vo=- CTR* (1+Zc/R1) *Rpullup/Rled,至此,我们的传递函数就求出来了。
.
三、为什么单片机的I/O口需要驱动
为什么单片机的I/O口需要驱动呢?这个问题需要从I/O口的电气特性上进行解释。
首先,给出单片机典型的I/O口,即P1口电气结构图,如图所示。P1口通常是作为通用I/O口使用,不需要多路转换电路MUX。其输出级电路内部有上拉电阻,与场效应管共同组成输出驱动电路。因此,P1口作为输出时,不需要再外接上拉电阻,而当P1口作为输入口使用时,仍然需要先向锁存器写“1”,截止场效应管。
内部上拉电阻阻值很大,经过测量大致在330KΩ左右,而内部电源Vcc仅仅+5V,这样以P1.X高电平驱动发光二极管为例,场效应管截止,相当于Vcc通过330KΩ的电阻向二极管提供电流,5/330*10-3=0.015mA,而二极管的点亮电流为5mA至10mA,这就说明单片机的端口只是驱动TTL电平,不提供或提供很小的驱动电流,所以在带负载时,单片机应当在I/O口加上驱动芯片。
四、学习单片机
如何系统地入门学习STM32?
假如你会使用8051 , 会写C语言,那么STM32本身并不需要刻意的学习。
你要考虑的是, 我可以用STM32实现什么?
为什么使用STM32而不是8051?是因为51的频率太低,无法满足计算需求?是51的管脚太少,无法满足众多外设的IO?是51的功耗太大,电池挺不住?是51的功能太弱,而你要使用SPI、I2C、ADC、DMA?是51的内存太小而你要存储的东西太多?
当你需要使用STM32某些功能,而51实现不了的时候, 那STM32自然不需要学习,你会直接去寻找STM32某方面的使用方法。比如要用SPI协议的网卡、要使用串口通信、要使用RTOS等等。
到牛人的学习步骤
我们假定大家已经对STM32的书籍或者文档有一定的理解
英文好的同学,请不要以为你很牛,可以只看英文文档。毕竟你是中国人,你最熟悉的,理解最好的还是中文。看英文的速度还是比看中文慢一些,我们要的是最短的时间,而不是追求短时间内记住所有细节。当然,如果是一篇论文,建议看英文原版还是有好处的。STM32处理器进入国内市场时候,ST官方(或者第三方)的推广工作做的非常好。翻译了大量的英文文档,迎合了国内的很多工程师的思维。
读一些书比如存储器和总线架构、电源控制、备份寄存器、复位和时钟控制,通用和复用功能I/O,中断和时间等等前几章一定要花时间阅读。
(1)这里所谓的“入门”,指的是能理解并掌握一些常用的STM32外设,真正想掌握一款处理器,两周根本说明不了什么问题。只能说,你已经有所了解了。但是,这对我们初学者来说已经足够了。
(2)这里所谓的“两周”,根据每个人的时间安排不同而不同。
如果您每天有充足的时间学习,那么可以规定自己尽快地能独立地进行简单的STM32开发。
如果您每天只有业余时间来学习STM32,建议根据您的具体情况安排时间。毕竟计划时间如果安排太紧,反而收不到良好的效果,只能进入恶性循环,这是我们要避免的。
但是建议,不管您有无充足的时间,都必须给自己做一个计划!
步骤一,安装完STM32学习的软件,比如J-Link、Keil for ARM(MDK)、ISP(如果需要从串口下载的话)。这些软件安装的详细步骤,可以参考我们推出的相应教程进行。
步骤二,挑选部分例程的HEX,比如LED灯的例程HEX文件,下载到芯达STM32开发板中,观察两个LED灯的闪烁情况。这部分的操作,可以参考我们推出的相应的教程进行。
实际上,以上两个步骤,是为了熟悉要使用的工具软件而已。属于找感觉的阶段。其实我们还没开始STM32的学习呢!
步骤三,准备几个常用的文档,用于平时查阅。这些文档,在光盘中的芯片手册目录中均可找到。
步骤四,开始查看例程的编写,看看例程是如何写的,自己可否修改下例程,达到自己想要的效果呢?
步骤五,Ucos-II的移植,是否需要试一下?
恭喜你,至此,你已经可以自如进行独立的开发了。最后一步,给自己一个目标(项目),把它实现出来!
再次强调,以上只是一个学习STM32的思路,供大家参考。
下面列出了前面关键的步骤,希望大家能尽快入门。
第1步:熟悉调试软件
对初学者来说,我们至少需要安装两个软件:J-Link驱动软件、MDK(就是原来的Keil)软件。
这两个软件在安装软件的过程可以查看神舟开发板用户手册,这里不再重复,如何验证自己已经熟悉调试软件的操作了呢?很简单,神舟STM32开发板光盘里附带了很多HEX格式的文件,可以选择一些HEX文件,来观察运行结果。
该步骤要达到的目标:熟悉调试软件,如烧写HEX出现问题,可简单判别问题所在,并独立解决。
第2步:GPIO编程
这是第一次接触固件库的编程,一定要硬着头皮去了解固件库。建议大家尽量去用固件库。而不是避开固件库自己写代码——这样只能在学习中才会发生。实际的项目中,代码成百上千个,如何一个一个自己写?调用固件库中的函数来完成,才是王者之道。
GPIO本身的编程实际上很简单:
1、设置GPIO口的引脚为输入或者输出模式。我们在进行点灯代码的时候,一般设置为推挽输出模式。
2、操作寄存器,往寄存器里置1或者清零操作——这个步骤,固件库已经提供了专门的GPIO_SetBits函数和GPIO_ResetBits函数,我们只要去调用即可实现对IO口的置1和清零。
3、实现多种花样的LED闪动,使得自己熟悉GPIO的编程过程。
该步骤要达到的目标:熟悉调试软件,如烧写HEX出现问题,可简单判别问题所在,并独立解决。
第3步:开始全新的STM32深入研究
经过以上调试软件的熟悉和GPIO口的编程调试后,相信您已经对STM32有一定的了解。
至少知道如何利用STM32的固件库去写一个代码。在这个阶段,将要接触到串口编程、TFT液晶屏驱动编程、定时器编程、串行外设接口SPI编程、存储器编程、SD卡与文件系统移植、USB读写、UCOS移植等,有精力还可以研究其他外设。
.
五、主流单片机的优缺点
单片机现在可谓是铺天盖地,种类繁多,让开发者们应接不暇,发展也是相当的迅速,从上世纪80年代,由当时的4位8位发展到现在的各种高速单片机。
各个厂商们也在速度、内存、功能上此起彼伏,参差不齐。同时涌现出一大批拥有代表性单片机的厂商:Atmel、TI、ST、MicroChip、ARM…… 除此之外国内厂商的STC单片机也是可圈可点。
下面为大家带来51、MSP430、STM32、TMS、PIC、AVR、STC单片机之间的优缺点比较及功能体现。
51单片机
应用最广泛的8位单片机当然也是初学者们最容易上手学习的单片机,最早由Intel推出,由于其典型的结构和完善的总线专用寄存器的集中管理,众多的逻辑位操作功能及面向控制的丰富的指令系统,堪称为一代“经典”,为以后的其它单片机的发展奠定了基础。目前在教学场合和对性能要求不高的场合大量被采用。
特点
51单片机之所以成为经典,成为易上手的单片机主要有以下特点:
- 从内部的硬件到软件有一套完整的按位操作系统,称作位处理器,处理对象不是字或字节而是位。不但能对片内某些特殊功能寄存器的某位进行处理,如传送、置位、清零、测试等,还能进行位的逻辑运算,其功能十分完备,使用起来得心应手。
- 同时在片内RAM区间还特别开辟了一个双重功能的地址区间,使用极为灵活,这一功能无疑给使用者提供了极大的方便。
- 乘法和除法指令,这给编程也带来了便利。很多的八位单片机都不具备乘法功能,做乘法时还得编上一段子程序调用,十分不便。
缺点
51单片机虽然是经典但是缺点还是很明显的:
- AD、EEPROM等功能需要靠扩展,增加了硬件和软件负担。
- 虽然I/O脚使用简单,但高电平时无输出能力,这也是51系列单片机的最大软肋。
- 运行速度过慢,特别是双数据指针,如能改进能给编程带来很大的便利。
- 51保护能力很差,很容易烧坏芯片。
MSP430单片机
MSP430系列单片机是1996年开始推向市场的一种16位超低功耗的混合信号处理器,给人们留下的最大的亮点是低功耗而且速度快,汇编语言用起来很灵活,寻址方式很多,指令很少,容易上手。主要是由于其针对实际应用需求,把许多模拟电路、数字电路和微处理器集成在一个芯片上,以提供“单片”解决方案。在低功耗及超低功耗的工业场合应用的比较多。
特点
MSP430单片机其迅速发展和应用范围的不断扩大,主要取决于以下的特点。
- 强大的处理能力,采用了精简指令集(RISC)结构,具有丰富的寻址方式( 7 种源操作数寻址、 4 种目的操作数寻址)、简洁的 27 条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令;有较高的处理速度,在 8MHz 晶体驱动下指令周期为 125 ns 。这些特点保证了可编制出高效率的源程序。
- 在运算速度方面,能在 8MHz 晶体的驱动下,实现 125ns 的指令周期;16 位的数据宽度、 125ns 的指令周期以及多功能的硬件乘法器(能实现乘加)相配合,能实现数字信号处理的某些算法(如 FFT 等)。
- 超低功耗方面,MSP430 单片机之所以有超低的功耗,是因为其在降低芯片的电源电压及灵活而可控的运行时钟方面都有其独到之处;电源电压采用的是 1.8~3.6V 电压,因而可使其在 1MHz 的时钟条件下运行时, 芯片的电流会在 200~400uA 左右,时钟关断模式的最低功耗只有 0.1uA。
缺点
- 可能不太容易上手,不适合初学者入门,资料也比较少,只能跑官网去找。
- 占的指令空间较大,因为是16位单片机,程序以字为单位,有的指令竟然占6个字节,虽然程序表面上简洁, 但与pic单片机比较空间占用很大。
STM32单片机
由ST厂商推出的stm32系列单片机,行业的朋友都知道,这是一款性价比超高的系列单片机,应该没有之一,功能及其强大。其基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M内核,同时具有一流的外设:1μs的双12位ADC,4兆位/秒的UART,18兆位/秒的SPI等等,在功耗和集成度方面也有不俗的表现,当然和MSP430的功耗比起来是稍微逊色的一些,但这并不影响工程师们对它的热捧程度,由于其简单的结构和易用的工具再配合其强大的功能在行业中赫赫有名。
特点
STM32单片机其强大的功能主要表现在:
- 内核:ARM32位Cortex-M3CPU,最高工作频率72MHz,1.25DMIPS/MHz,单周期乘法和硬件除法。
- 存储器:片上集成32-512KB的Flash存储器;6-64KB的SRAM存储器。
- 时钟、复位和电源管理:2.0-3.6V的电源供电和I/O接口的驱动电压;POR、PDR和可编程的电压探测器(PVD);4-16MHz的晶振;内嵌出厂前调校的8MHz RC振荡电路,内部40 kHz的RC振荡电路;用于CPU时钟的PLL;带校准用于RTC的32kHz的晶振。
- 调试模式:串行调试(SWD)和JTAG接口;最多高达112个的快速I/O端口、最多多达11个定时器、最多多达13个通信接口。
TMS单片机
这里也提一下TMS系列单片机,虽不算主流。由TI推出的8位CMOS单片机,具有多种存储模式、多种外围接口模式,适用于复杂的实时控制场合。虽然没STM32那么优秀,也没MSP430那么张扬,但是TMS370C系列单片机提供了通过整合先进的外围功能模块及各种芯片的内存配置,具有高性价比的实时系统控制。同时采用高性能硅栅CMOS EPROM和EEPROM技术实现。低工作功耗CMOS技术,宽工作温度范围,噪声抑制,再加上高性能和丰富的片上外设功能,使TMS370C系列单片机在汽车电子,工业电机控制,电脑,通信和消费类具有一定的应用。
PIC单片机
PIC单片机系列是美国微芯公司(Microship)的产品,共分三个级别,即基本级、中级、高级,是当前市场份额增长最快的单片机之一,CPU采用RISC结构,分别有33、35、58条指令,属精简指令集。
同时采用Harvard双总线结构,运行速度快,它能使程序存储器的访问和数据存储器的访问并行处理,这种指令流水线结构,在一个周期内完成两部分工作,一是执行指令,二是从程序存储器取出下一条指令,这样总的看来每条指令只需一个周期,这也是高效率运行的原因之一。
特点
PIC单片机之所以成为一时非常热的单片机不外乎以下特点:
- 具有低工作电压、低功耗、驱动能力强等特点。PIC系列单片机的I/O口是双向的,其输出电路为CMOS互补推挽输出电路,I/O脚增加了用于设置输入或输出状态的方向寄存器,从而解决了51系列I/O脚为高电平时同为输入和输出的状态。
- 当置位1时为输入状态,且不管该脚呈高电平或低电平,对外均呈高阻状态;置位0时为输出状态,不管该脚为何种电平,均呈低阻状态,有相当的驱动能力,低电平吸入电流达25mA,高电平输出电流可达20mA。相对于51系列而言,这是一个很大的优点。
- 它可以直接驱动数码管显示且外电路简单。它的A/D为10位,能满足精度要求。具有在线调试及编程(ISP)功能。
缺点
- 其专用寄存器(SFR)并不像51系列那样都集中在一个固定的地址区间内(80~FFH),而是分散在四个地址区间内。只有5个专用寄存器PCL、STATUS、FSR、PCLATH、INTCON在4个存储体内同时出现,但是在编程过程中,少不了要与专用寄存器打交道,得反复地选择对应的存储体,也即对状态寄存器STATUS的第6位(RP1)和第5位(RP0)置位或清零。
- 数据的传送和逻辑运算基本上都得通过工作寄存器W(相当于51系列的累加器A)来进行,而51系列的还可以通过寄存器相互之间直接传送,因而PIC单片机的瓶颈现象比51系列还要严重,这在编程中的朋友应该深有体会。
AVR单片机
AVR单片机是Atmel公司推出的较为新颖的单片机,其显著的特点为高性能、高速度、低功耗。它取消机器周期,以时钟周期为指令周期,实行流水作业。AVR单片机指令以字为单位,且大部分指令都为单周期指令。而单周期既可执行本指令功能,同时完成下一条指令的读取。通常时钟频率用4~8MHz,故最短指令执行时间为250~125ns。
特点
AVR单片机能成为最近仍是比较火热的单片机,主要的特点:
- AVR系列没有类似累加器A的结构,它主要是通过R16~R31寄存器来实现A的功能。在AVR中,没有像51系列的数据指针DPTR,而是由X(由R26、R27组成)、Y(由R28、R29组成)、Z(由R30、R31组成)三个16位的寄存器来完成数据指针的功能(相当于有三组DPTR),而且还能作后增量或先减量等的运行,而在51系列中,所有的逻辑运算都必须在A中进行;而AVR却可以在任两个寄存器之间进行,省去了在A中的来回折腾,这些都比51系列出色些。
- AVR的专用寄存器集中在00~3F地址区间,无需像PIC那样得先进行选存储体的过程,使用起来比PIC方便。AVR的片内RAM的地址区间为0~00DF(AT90S2313) 和0060~025F(AT90S8515、AT90S8535),它们占用的是数据空间的地址,这些片内RAM仅仅是用来存储数据的,通常不具备通用寄存器的功能。当程序复杂时,通用寄存器R0~R31就显得不够用;而51系列的通用寄存器多达128个(为AVR的4倍),编程时就不会有这种感觉。
- AVR的I/O脚类似PIC,它也有用来控制输入或输出的方向寄存器,在输出状态下,高电平输出的电流在10mA左右,低电平吸入电流20mA。这点虽不如PIC,但比51系列还是要优秀的。
缺点
- 是没有位操作,都是以字节形式来控制和判断相关寄存器位的。
- C语言与51的C语言在写法上存在很大的差异,这让从开始学习51单片机的朋友很不习惯。
- 通用寄存器一共32个(R0~R31),前16个寄存器(R0~R15)都不能直接与立即数打交道,因而通用性有所下降。而在51系列中,它所有的通用寄存器(地址00~7FH)均可以直接与立即数打交道,显然要优于前者。
Freescale单片机
主要针对S08,S12这类单片机,当然Freescale单片机远非于此。Freescale系列单片机采用哈佛结构和流水线指令结构,在许多领域内都表现出低成本,高性能的的特点,它的体系结构为产品的开发节省了大量时间。此外Freescale提供了多种集成模块和总线接口,可以在不同的系统中更灵活的发挥作用。
特点
Freescale单片机的特有的特点如下:
- 全系列:从低端到高端,从8位到32位全系列应有尽有,其推出的8位/32位管脚兼容的QE128,可以从8位直接移植到32位,弥补单片机业界8/32 位兼容架构中缺失的一环。
- 多种系统时钟模块:三种模块,七种工作模式。多种时钟源输入选项,不同的mcu具有不同的时钟产生机制,可以是RC振荡器,外部时钟或晶振,也可以是内部时钟,多数CPU同时具有上述三种模块;可以运行在FEI,FEE,FBI,FBILP,FBE,FBELP,STOP这七种工作模式。
- 多种通讯模块接口:Freescale单片机几乎在内部集成各种通信接口模块:包括串行通信接口模块SCI,多主I2C总线模块,串行外围接口模块 SPI,MSCAN08控制器模块,通用串行总线模块(USB/PS2)。
- 具有更多的可选模块:具有LCD驱动模块,带有温度传感器,具有超高频发送模块,含有同步处理器模块,含有同步处理器的MCU还具有屏幕显示模块OSD,还有少数的MCU具有响铃检测模块RING和双音多频/音调发生器DMG模块。
- 可靠性高,抗干扰性强,多种引脚数和封装选择。
- 低功耗、也许Freescale系列的单片机的功耗没有MSP430的低,但是他具有全静态的“等待”和“停止”两种模式,从总体上降低您的功耗!新近推出的几款超低功耗已经与MSP430的不相上下。
STC单片机
说到STC单片机有人会说到,STC也能算主流?基于它是国内还算是比较不错的单片机来说。STC是单时钟/机器周期的单片机,说白了STC单片机是51与AVR的结合体,有人说AVR是51的替代单片机,但是AVR单片机在位控制和C语言写法上存在很大的差异。
而STC单片机结合了51和AVR的优点,虽然功能不及AVR那么强大,但是在AVR能找到的功能,在STC上基本都有,同时STC单片机是51内核,这给以51单片机为基础的工程师们提供了极大的方便,省去了学习AVR的时间,同时也不失AVR的各种功能。
STC单片机是高速、低功耗、超强抗干扰的新一代8051单片机51单片机,指令代码完全兼容传统8051,但速度快8~12倍,内部集成MAX810专用复位电路。4路PWM 8路高速10位A、D转换,针对电机电机 的供应商控制,强干扰场合,成为继51单片机后一个全新系列单片机。
特点
- 下载烧录程序用串口方便好用,容易上手,拥有大量的学习资料及视频,同时具有宽电压:5.5~3.8V、2.4~3.8V, 低功耗设计:空闲模式,掉电模式(可由外部中断唤醒)。
- STC单片机具有在应用编程,调试起来比较方便;带有10位AD,内部EEPROM,可在1T/机器周期下工作,速度是传统51单片机的8~12倍,价格也较便宜。
- 4通道捕获/比较单元,STC12C2052AD系列为2通道,也可用来再实现4个定时器或4个外部中断,2个硬件16位定时器,兼容普通8051的定时器。4路PCA还可再实现4个定时器,具有硬件看门狗、高速SPI通信端口、全双工异步串行口,兼容普通8051的串口,同时还具有先进的指令集结构,兼容普通8051指令集。
.
六、实现单片机用一个I/O采集多个按键信号
如何实现单片机用一个I/O采集多个按键信号 whaosoft aiot http://143ai.com
使用模数转换(ADC)的特点就可以实现单片机用一个I/O采集多个按键信号。
一、单片机的I/O口检测按键简说
我们知道,一般情况下单片机的一个I/O口作为普通I/O口的话,只能检测识别一个按键。
日常设计中,如果碰到按键数量较多的话,会采用行列式键盘,例如最常见的4X4矩阵键盘,这样可以实现用8个I/O口检测16个按键。
还有就是键盘接口,典型的是我们计算机上用的键盘,其采用PS/2接口,现在一般计算机上用的是USB接口的键盘。
另外还有使用串口或者IIC、SPI接口的键盘芯片,这些使用常见的串口、IIC、SPI通信协议实现。
但是这些都一个以上的I/O口,不是真正的用多个按键。
那么有没有更简单的办法,使用更少的I/O口资源检测更多的按键呢?
二、基于模数转换的AD键盘
我们知道按键检测实际上是检测连接按键的端口的高低电平值,在单个I/O口检测单个按键时,只是简单的判断连接按键的端口的电平是高电平(+5V)还是低电平(0V)。那么是否可以通过电平的微小变化来检测按键是否被按下呢?
下图为一个A/D键盘的原理图,从图中可以看出,当不同的按键被按下时,ADC端点处的电压不同,通过判断不同的电压值就可以判断出是那个按键被按下。
对于具有AD转换功能的单片机来说,直接接到一个AD通道即可。对于没有AD转换功能的单片机,可采用一个AD转换模块。
对于这种按键,有以下缺点:
1、对于同一点处的电压值,A/D多次采样的结果不可能完全相同。
2)、电阻的误差。电阻值由于电阻的精度和环境温度的原因,误差较大,所以A/D键盘各个按键点的分压不准确。
3)、为尽量减少误差,可以采取增加电阻精度、增加温度补偿等方法,另外在软件处理时候要注意消除按键抖动等因素,还要对实际转换值和标准值给出误差补偿。
4)、如果按键按下,经过A/D转换,若实际转换值在允许误差范围之内(需要实际测量各点电压,并计算各点电压平均值),则认为按键按下,否则程序不响应。
5)、实际试验过程中,还要考虑电阻的累积误差,选用精度越高的电阻,可分辨的按键数目越多。
.
七、1.84Pb/s,两倍于全球互联网带宽总和:单激光器实现最快数据传输纪录
只需要把数据拆分成彩虹色的光,光纤的传输速度就可以提升 8000 倍。
有些时候,人们形容网络的效率「不如卡车运硬盘」:亚马逊 AWS 就有一种名为 snowmobile 的服务,真的使用集装箱卡车,一次可以传输 100Pb。这种大号 U 盘传数据的体量可谓巨大,但也从另一个方面告诉我们,网络传输数据存在很大的瓶颈。
近日,来自丹麦技术大学(DTU)和瑞典哥德堡查尔姆斯理工大学的研究小组实现了迄今为止最高的数据传输效率,并且是世界上第一个仅使用单个激光器和单个光芯片实现每秒传输超过 1 拍比特 (Pbit/s) 的研究。
在实验中,研究人员仅使用一个光源在 7.9 公里的距离上实现了传输速率 1.8 Pbit/s——1 Petabit 相当于 12.5 万 Gigabyte,根据一些估算,全世界使用的平均互联网带宽约为 1 Pbit/s,因此它的速度接近全球带宽的两倍。
很难形容 1.84 Pbit/s 的速度有多快——家庭互联网连接通常为每秒几百兆比特,如果幸运的话,能达到 1 吉比特甚至 10 吉比特,但 1 拍比特是一百万吉比特。这一数据传输速度远远超过了今年 5 月创下的 1.02 Pbit/s 的纪录。
该光源由定制设计的光学芯片发出,它可以使用来自单个红外激光器的光来输出多种颜色的彩虹光谱,即多种频率。因此,单个激光器的一个频率(颜色)可以在单个芯片中倍增成数百个频率(颜色)。所有的颜色都固定在一个特定的频率距离上,每种颜色互相隔离——就像梳子上的齿一样——因此它被称为频率梳。最后,所有频率通过光纤发送,从而传输数据。
用单个激光器取代数千个
实验演示表明,单个芯片可以轻松承载 1.8Pbit/s 的速度,按照此前最先进的商业设备,达到这样的水平需要上千个激光器。
查尔姆斯理工大学的教授 Victor Torres 公司是开发和制造该芯片的研究小组的负责人。Victor Torres 公司说,这个芯片的特别之处在于,它产生的频率梳具有光纤通信的理想特性——很高的光功率,并广泛覆盖了高级光通信所感兴趣的光谱区域内的带宽。
通信系统建模。
有趣的是,该芯片并没有为这种特定的应用进行优化。「事实上,一些特征参数是通过巧合而不是通过设计实现的,」Victor Torres 公司说。「然而在团队的努力下,我们现在有能力对其进行逆向工程,并实现电信领域目标应用的高重现性微梳。」
此外,研究人员创建了一个计算模型,从理论上研究了使用与实验中相同的单个芯片进行数据传输的基础潜力。计算结果显示,扩展解决方案具备巨大的潜力。
DTU 的硅光子学光通信卓越中心(SPOC)负责人 Leif Katsuo Oxenløwe 教授表示:「我们的计算表明,通过查尔姆斯理工大学制造的单个芯片和一个激光器,传输速度能够高达 100 Pbit/s。其原因是我们的解决方案是可扩展的,包括在创造多种频率方面,也包括将频率梳分成许多空间副本,然后对它们进行光学放大,并将它们作为传输数据的平行源。虽然频率梳的副本必须被放大,但并没有损失其品质,我们利用它来进行高效频谱的数据传输。」
调制的方法
向电子或光载波信号添加信息,将数据转换为无线电波的过程叫做「调制」。在这个过程中,光的波特性被利用,比如:
- 振幅(波的高度 / 强度);
- 相位(波的「节奏」,有可能让波比预期的早一点或晚一点到达);
- 偏振(波的传播方向)。
通过改变这些属性,就可以创造信号。这些信号可以转化为 1 或 0,从而作为数据信号加以利用。
在该研究中,数据流被分成了 37 个线路,每条线沿着电缆中的不同光线程发送。37 条数据线中的每一条都被分成 223 个数据块,对应于「数据梳」光谱中的不同区域。换句话说,科学家创建了一个「大规模并行空间和波长多路复用数据传输」系统。这种多次拆分大大增加了光缆支持的潜在数据吞吐量。
测试和验证 1.84 Pb/s 的带宽并不是件容易的事——因为还没有计算机可以即时处理这么多数据,存储也不太可能。研究小组在各个通道上使用虚拟数据来验证全带宽容量,每个通道都经过单独测试,以确保接收到的数据与传输的数据匹配。
光子芯片可以将单个激光器分成许多频率,另外也需要进行一些处理来对 37 个数据光流中的每一个数据流的光数据做编码。根据研究者们的说法,一个精巧的、功能齐全的光处理设备应该可以打造成火柴盒的大小。这与电信行业当前使用的单色激光传输设备的尺寸相似。
实现的数据传输速率(红色三角形)与理论吞吐量(蓝色点)。
减少互联网能耗
通过这项技术,我们可以使用和现在相同的光缆基础设施,仅使用相同体积的光子芯片设备替代原来的光学数据编码器 / 解码器,从而有望使数据有效带宽增加 8251 倍。
除了极高的速度之外,新研究还有助于减少互联网的能耗。
「我们的解决方案有可能取代位于互联网中心和数据中心的数十万台光设备,它们都在消耗大量电力并产生热量。我们有机会为减少互联网行业碳足迹做出贡献,」论文作者之一 Leif Katsuo Oxenløwe 说道。
尽管研究人员在演示中打破了单个激光源和单个芯片的 PB 级里程碑,但在我们当前的通信系统中实施该解决方案之前,仍有一些开发工作要做。
「当前,全世界都在努力将激光源集成到光学芯片中。我们可以在芯片中集成的组件越多,整个发射器的效率就越高,发射器包括激光、梳频率输出芯片、数据调制器和任何放大器元件。它将是一种极其高效的数据信号光发射器,」Leif Katsuo Oxenløwe 说。
这项研究发表在了最近一期的 Nature 光学子刊上。
论文链接:https://www.nature.com/articles/s41566-022-01082-z
八、快速找到PCB中的GND
在维修电路板时,有时候需要测量板子上某一点的电位,来判断到底是哪里出了问题,而参考点的选取一般都是选择电源的负极,也就是GND地线。如下图是几种GND的符号。
如何快速寻找出板子中的地线,就成了必须要掌握的知识了。下面我总结了几种方法供大家参考一下。
1 通过电解电容来查找GND
上图中是一个电磁炉主板,我们要找地线,首先要找到板子最大的那个电解电容。
一般情况下比较大的电解电容都是作为电源滤波的一种元件,它的负极就是GND了。
上图中你看到的最大的电解电容就是一个电源滤波电容,它是从整流桥整流输出约300伏的脉动直流电,再经过此电容滤波才能输出比较平滑的直流电。它的负极就是直流电源的负极,也就是我们要找的GND地线。
2 通过查看大片铜箔来确认GND
上图中是一个两层板,图中标有红圈的那几个点就是地线,可以看出它和大片的铜箔相连。这是由于地线有屏蔽作用,可以有效减小地线环路带来的干扰,所以线路板中的地线铜箔一般都是成片出现的。
3 通过查看连接插件上的标识来确认GND
如上图,一般在板子的接插件处都有各种信号的标识,我们可以通过查看这个标识来确认地线,比如上图红线圈内的GND就是地线了。
4 通过集成芯片来查找
在线路板中通常有着各种各样的集成电路,这些集成电路如果要正常工作都需要有供电电源,可以通过查看芯片的引脚来确认GND。
如上图,这是一个8脚的LM358比较器,通过查找它的资料可以看出它每个脚的功能 ,只要知道第四脚为GND就可以在板子上找到地线了。
最后在说说GND的本质
电路中的地线GND,它的本质是什么?
在PCB Layout布线过程中,工程师都会面临不同的GND处理。
这是为什么呢?在电路原理设计阶段,为了降低电路之间的互相干扰,工程师一般会引入不同的GND地线,作为不同功能电路的0V参考点,形成不同的电流回路。
GND地线的分类
1 模拟地线AGND
模拟地线AGND,主要是用在模拟电路部分,如模拟传感器的ADC采集电路,运算放大比例电路等等。
在这些模拟电路中,由于信号是模拟信号,是微弱信号,很容易受到其他电路的大电流影响。如果不加以区分,大电流会在模拟电路中产生大的压降,会使得模拟信号失真,严重可能会造成模拟电路功能失效。
2 数字地线DGND
数字地线DGND,显然是相对模拟地线AGND而言,主要是用于数字电路部分,比如按键检测电路,USB通信电路,单片机电路等等。
之所以设立数字地线DGND,是因为数字电路具有一个共同的特点,都属于离散型的开光量信号,只有数字“0”和数字“1”区分,如下图所示。
在由数字“0”电压跳变成数字“1”电压的过程中,或者由数字“1”电压跳变成数字“0”电压的过程中,电压产生了一个变化,根据麦克斯韦电磁理论,变化的电流周围会产生磁场,也就形成了对其他电路的EMC辐射。
没办法,为了降低电路的EMC辐射影响,必须使用一个单独的数字地线DGND,让其他电路得到有效的隔离。
3 功率地线PGND
模拟地线AGND也好,数字地线DGND也罢,它们都是小功率电路。在大功率电路中,如电机驱动电路,电磁阀驱动电路等等,也是存在一个单独的参考地线,这个参考地线叫做功率地线PGND。
大功率电路,顾名思义,是电流比较大的电路。很显然大的电流,容易造成不同功能电路之间的地偏移现象,如下图所示。
一旦电路中存在地偏移,那么原来的5V电压就可能不是5V了,而是变成了4V。因为5V电压是参考GND地线0V而言,如果地偏移使得GND地线由0V抬升到了1V,那么之前的5V(5V-0V=5V)电压就变成了现在的4V(5V-1V=4V)了。
4 电源地线GND
模拟地线AGND,和数字地线DGND以及功率地线PGND,都被归类为直流地线GND。这些不同种类的地线,最后都要汇集在一起,作为整个电路的0V参考地线,这个地线叫做电源地线GND。
电源,是所有电路的能量来源。所有电路工作需要的电压电流,均是来自电源。因此电源的地线GND,是所有电路的0V电压参考点。
这就是为什么其他类型的地线,无论是模拟地线AGND,数字地线DGND还是功率地线PGND,最后都需要与电源地线GND汇集在一起。
5 交流地线CGND
交流地线CGND,一般是存在于含有交流电源的电路项目中,如AC-DC交流转直流电源电路。
AC-DC电源电路,分为两个部分。电路中的前级是AC交流部分,电路中的后级是DC直流部分,这就被迫形成了两个地线,一个是交流地线,另一个是直流地线。
交流地线作为交流电路部分的0V参考点,直流地线作为直流电路部分的0V参考点。通常为了在电路中统一一个地线GND,工程师会将交流地线通过一个耦合电容或者电感与直流地线连接在一起。
6 大地地线EGND
人体的安全电压是在36V以下,超过36V的电压如果施加在人体身上,会导致人体受到损伤,这是工程师在开发设计电路项目方案的一个安全常识。
为了增强电路的安全系数,工程师一般在高压大电流的项目中使用大地的地线EGND,例如在家用电器电风扇、电冰箱、电视机等电路中。具有大地地线EGND保护功能的插座,如下图所示。
家用电器的插座,为什么是3个接线端子?220V交流电只需要火线和零线,两根就可以,那为什么插座是3个接线端子呢?
插座的3个接线端子,其中的两个端子是用于220V的火线和零线,另外一个端子就是起保护作用的大地地线EGND。
芯片哥需要重点指出的是大地地线EGND,它仅仅是连接到我们的地球,起到高压保护作用,没有参与项目电路功能,与电路功能无关。
所以大地地线EGND,与其他类型的地线GND是存在明显电路含义区别的。
细究GND的原理
工程师可能会问,一个地线GND怎么会有这么多区分,简单的电路问题怎么弄得这么复杂?
为什么需要引入这么多细分的GND地线功能呢?
工程师一般针对这类GND地线设计问题,都简单的统一命名为GND,在原理图设计过程中没有加以区分,导致在PCB布线的时候很难有效识别不同电路功能的GND地线,直接简单地将所有GND地线连接在一起。
虽然这样操作简便,但这将导致一系列问题:
1 信号串扰
假如将不同功能的地线GND直接连接在一起,大功率电路通过地线GND,会影响小功率电路的0V参考点GND,这样就产生了不同电路信号之间的串扰。相x关推荐:认识地弹(地噪声)。
2 信号精度
模拟电路,它的考核核心指标就是信号的精度。失去精度,模拟电路也就失去了原本的功能意义。
交流电源的地线CGND由于是正弦波,是周期性的上下波动变化,它的电压也是上下波动,不是像直流地线GND一样始终维持在一个0V上不变。
将不同电路的地线GND连接在一起,周期性变化的交流地线CGND会带动模拟电路的地线AGND变化,这样就影响了模拟信号的电压精度值了。
3 EMC实验
信号越弱,对外的电磁辐射EMC也就越弱;信号越强,对外的电磁辐射EMC也就越强。
假如将不同电路的地线GND连接在一起,信号强电路的地线GND,直接干扰了信号弱电路的地线GND。其后果是原本信号弱的电磁辐射EMC,也成为了对外电磁辐射强的信号源,增加了电路处理EMC实验的难度。 4 电路可靠性
电路系统之间,信号连接的部分越少,电路独立运行的能力越强;信号连接的部分越多,电路独立运行的能力就越弱。
试想,如果两个电路系统A和电路系统B,没有任何的交集,电路系统A的功能好坏显然是不能影响电路系统B的正常工作,同样电路系统B的功能好坏也是不能影响电路系统A的正常工作。
这就好比一对陌生男女,在没有成为恋人之前,女生的情绪变化是不会影响这个男生的心情的,因为他们没有任何交集。
假如在电路系统中,将不同功能的电路地线连接在一起,就相当于增加了电路之间干扰的一个联系纽带,也即降低了电路运行的可靠性。
.
九、说说PLC程序
哈哈PLC的内容终于来了第二弹
一套完整的PLC程序,并不仅仅是使系统能够运行起来这么简单,它也需要完整的注释、精良的架构、良好的可扩展性、完备的报警保护系统、运行前的模拟系统。
1、简单性
使PLC程序尽可能简单。简单的含义就是尽可能地使用标准化的程序框架,尽可能使用简单的指令。
要想程序简单,从大的方面讲,要优化程序结构,用流程控制指令简化程序,从小的方面讲还要用功能强的指令取代功能单一的指令,以及注意指令的安排顺序等。
2、可读性
要求所设计的程序可读性要好。这不仅便于程序设计者加深对程序的理解,便于调试,而且,还要便于别人读懂你的程序,便于使用者维护。必要时,也可使程序推广。
要使程序可读性好,所设计的程序就要尽可能清晰。要注意层次,实现模块化,以致于用面向对象的方法进行设计。要多用一些标准的设计。
如遇特殊情况下采用语言编程,多数情况下请使用梯形图编程,方便阅读。
再就是I/O分配要有规律性,便于记忆与理解。必要时,还要做一些注释工作。内部器件的使用也要讲规律性,不要随便地拿来就用。
可读性在程序设计开始时就要注意。这不易完全做到。因为在程序调试的过程中,指令的增减,内部器件的使用变化,可能使原较清晰的程序,变得有些乱。所以在设计时就对调试增减留有一定的余地,然后调试完毕后再做一下整理,这样所设计的程序具有更高的质量。
程序的注释,起码应该有以下几个方面:
A、系统注释:整套程序的版权公司和此套程序用途;
B、程序块注释:此程序块的主要用途和作者;
C、段注释:此段代码的用途;
D、变量注释:重要性无需多言,包含I/O注释、中间变量注释。
而至于保密性的考虑,我觉得应该在程序的加密算法或者块的加密上考虑,而不应该用减少注释这种小聪明来实现。
3、正确性
PLC的程序一定要正确,并要经过实际工作验证,证明其能够正确工作。这是对PLC程序的最根本的要求,若这一点做不到,其它的再好也没有用。
要使程序正确,一定要准确地使用指令,正确地使用内部器件。准确de地使用指令与准确理解指令相联系,为此对指令含义和使用条件一定要弄清楚。必要时,可编些小程序对一些不清楚的指令作些测试。
同一指令,由于PLC的出厂批次不同或是PLC的系列型号的不同,一些指令细节有可能不一样,应仔细查阅编程手册。
内部器件正确使用也是重要的。如有的PLC有掉电保护,有的PLC没有。一定要做到该掉电保护的一定要用掉电保护的器件,反之则不能用。
总之,要准确地使用指令,正确使用内部器件,使所编的程序能正确动作,这是对PLC程序最根本的要求。
举个简单的例子,西门子的上升沿和下降沿需要使用带存储功能的变量作为中间变量,比如M点或者DB点,如果使用FC的temp变量就会出问题的。
4、可靠性
程序不仅要正确,还要可靠。可靠反映着PLC程序的稳定性,这也是对PLC程序的基本要求。
有的PLC程序,在正常的工作条件下或合法操作时能正确工作,而出现非正常工作条件(如临时停电,又很快再通电)或进行非法操作(如一些按钮不按顺序按,或同时按若干按钮)后,程序就不能正常工作了。这种程序,就不大可靠,或说不稳定,就是不好的程序。
好的PLC程序对非正常工作条件出现,能予以识别,并能使其与正常条件衔接,可使程序适应于多种情况。好的PLC程序对非法操作能予以拒绝,且不留下“痕迹”。只接受合法操作。
联锁是拒绝非法操作常用的手段,继电电路常用这个方法,PLC也可继承这个方法。
5、易改性
要使程序易改,也就是要便于修改。PLC的特点之一就是方便,可灵活地适用于各种情况。其办法就是靠修改或重新设计程序。
重新设计程序用于改变PLC工艺的用途要求的情况,不仅程序重编,而且I/O也要重新分配。多数情况下不需要重编程序,做一些修改就可以了。这就要求程序具有易性,便于修改。
易改也就是弹性,要求只要做很少的改动,即可达到改变参数或修改动作的目的。
6、扩展性
许多程序可能在进现场之前都已经编好,但是到了现场,可能还需要添加另外的程序,为了避免打乱整套系统的结构,需要在每个功能区预留一定的空间作为备用。
硬件上留出足够的余量,软件在编写的时候把手动,自动,半自动考虑好,位置留出来。
7、完备报警系统
PLC系统往往用于工业环境中,每一次的事故都会造成或大或小的损失,为了做到事故预处理或者在事故中将损失降到最小,必须重视PLC的报警和保护,在此将其摘出来作为系统的一个重要组成部分。
8、程序模拟
为了保证现场的调试进度或者给客户展示,往往在进现场之前,要对自己的程序进行全自动的模拟。为此需要在程序中加入模拟程序部分,模拟程序部分在正常现场运行之后断开。为了使程序具备模拟功能,需要做以下工作:
(1)将实际的PLC的I/O点转换为PLC的中间变量或者数据块变量;
(2)根据工艺要求编写各个设备的模拟程序;
在设计PLC程序的过程中,能够满足以上几个方面的要求的就能称得上是一个好程序了。
PLC程序的设计规范
1、选择合适的PLC型号及I/O点数,有特殊功能需求时选择特殊功能模块。
2、熟悉所选择的PLC编程指令及编译软件。
3、进行软元件规划,包括内部继电器、保持继电器、数据寄存器、定时器、计数器等。
4、进行程序规划,一般以故障提取、故障处理、手动处理、自动处理、输出处理这样的顺序进行编程。比较大型的工程或设备按功能单元分段、分块进行处理,如一条自动化生产线中有提升机、移行、顶起旋转装置等,则应按上述单元分段分块编程。
5、在分段分块编写的程序前应加上简短的段注释,说明此段程序的功能,如有必要可以注明相应的工艺流程。分块或分段的程序在总体程序的位置顺序应基本上按工艺流程顺序排列,便于程序的可读性。
6、在程序设计之前,应对设备进行抽象,对如停止、急停、过载、超限、超时、安全光幕、碰停、门开关等共用因子进行提取,放在启动回路或启动主控、连锁回路,作为整个程序结构的大前提,在此基础下,再将程序分为自动、手动两大功能区。
7、将程序结构手动功能区共用因子,如手动、危及设备人身安全等因数因子进行提取,放在手动主控、连锁回路,对手动控制进行保护、屏蔽、报警。
8、将程序结构自动功能区共用因子,如自动、超限、超时等因数因子进行提取,放在自动主控、连锁回路,对自动控制下设备进行保护、屏蔽、报警。一个总的原则就是,在确保安全的前提下,严格限制设备的进,宽松限制设备的出。
9、程序设计时应设计程序总复位功能,便于使用者在设备出现故障情况下,可以方便尽快恢复设备正常工作。总复位应充分考虑在复位过程中设备和人员的安全。
10、自动模式切换到手动模式时,程序应清除自动模式下的输出和中间状态。特别是在自动模式使用SET指令时,必须在手动模式用RESET指令予以清除。
11、严禁在编制程序中使用双输出,即同一条输出语句或同一个输出线圈在程序中出现2次及以上。在不同模式条件下的对同一输出点的输出使用中间继电器进行中转,最后集中到一起并列到输出点。
12、使用触摸屏时,对触摸屏和PLC公用的控制区和状态区,不得做其他功能方面的编程使用。
13、对PLC的特殊模块,在使用之前,应先查明其控制区和状态区是否占用工作字,若占用,不得将这些工作字做其他方面的编程。
14、PLC的输入、输出、中间继电器、定时器、计数器、数据寄存器等都要加中文注释。输入、输出还要有元器件名称位号。对应的输入点,一般情况下默认为外围开关连接的是NO触点,对于需要接NC触点的须在注释中标明。所有注释应当清晰明了,不易产生误解,尽量少使用泛指。
15、工程调试完成后,系统必须保留最终软件程序,保存的文件名应包含项目编号/作者/日期信息/版本号等。
16、关于程序加密:对于加密程序的密码必须有专门的文件予以保存,并注明相应的用户名+密码+权限,分发给至少两个人以上了解密码,防止密码丢失带来无法打开程序的情况。
PLC程序的编程建议
1、PLC和上位机(或触摸屏)组成监控系统时,在画面上很多时候需要有“手动”、“自动”等控制模式(一般都是多个只能一个时)。在程序里面可以用“MOV”指令。如:当选择“手动”就将常数1 MOV到一个寄存器VB10里面,当选择“自动”就将2 MOV到同一寄存器VB10。只要判断寄存器的数据是多少,就知道系统是哪种控制方式。这样的思路好处是容易理解,不需要互锁之类的麻烦程序。
2、程序有模拟量控制时,如果读取的模拟量基本上没误差,可以采取时间滤波的方式,延时一段时间。如果读取的数据误差很大,就需要采取其它的滤波方式,如算平均值等。可以查阅相关的资料。
3、在程序调试过程中(特别是设备改造时,你的程序是加入到原来设备的程序中时),当程序语句中出现条件满足,而输出线圈不接通时,可以检查你的这段程序是否是在这样的语句之间,如JUMPgo to等语句。还有一种可能就是在中断程序之后,条件满足而没输出不接通,一般都是这段的程序不被扫描。
4、在顺序控制程序时,即一个动作完成后,进入到下一个动作,等类似的顺序控制,采用+10+10控制模式,本人觉得很方便。其思路是:预置一个寄存器,在初始化时值为0,当系统启动后,对它+10,此时寄存器为10,寄存器等于10时可以做第一个动作;第一个动作完成后,再对寄存器+10,此时寄存器等于20,可以做第二个动作,第二个动作完成后又+10,此时寄存器等于30,这样只要判断寄存器里面数据为多少,就知道要完成那个动作。当需要跳跃动作时,可以不再+10,可以加+20+30....,看实际的需要而定。
为什么加10而不是加1,因为加10之后,如果插入一段,只要在这10个空余的地方随便选择一个位置就可以了。
5、在设计程序的时候,当出现工艺上的故障(非控制系统控制),最好将故障现象保持,并有灯光声音报警。直到操作工复位,以便让其知道系统出现了故障。不然停机了,别人还认为你的程序出问题了,一般在设计一个新系统时是要注意到这些。
6、对于经常调用的子程序,可以做成子模块,频繁调用。
7、由于生产机械在工作循环中的各工步运动在执行时需要一定的时间,且这些时间都有一定的限度,因此可以以这些时间为参考,在要检测的工步动作开始的同时,起动一个定时器,定时器的时间设定值比正常情况下该动作要持续的时间长20%~30%,而定时器的输出信号可以用于报警或自动停机装置。当生产机械某工步动作的时间超过规定时间,达到对应的定时器预置时间,还未转入下一工步动作时定时器发出故障信号,该信号停止正常工作循环程序,起动报警或停机程序,这就是我们常说的超节拍保护。
8、一些安全用检测开关(如急停按钮、安全光幕、极限开关等)实用常闭(NC)输入。
9、为安全、节能考虑,尽量将输出设计成需要动作时才动作,一旦到位就停止输出,而不要设计成平时一直输出,需要停止时才让输出断开。
10、执行元件的动作原则应当是宁可不动,也不要乱动!
11、单台设备控制:单台设备必须有软手操/自动切换以及软手操时可以启/停功能,由自动切换到软手操时,设备不能停机;由软手操切换到自动时,设备启/停取决于自动程序。
12、单台设备(泵、风机及其它大型设备)运行满24小时必须进行轮换,且必须有运行时间累计,如果由上位机设定启/停顺序除外,操作人员自行设定。
PLC程序的命名通用规则
1、驼峰命令法(CamelCase)
也称骆驼式命名法,就是当变量名或函数名由一个或多个单词连接在一起构成唯一标识符时,作为逻辑断点的单词的首字母都采用大写,例如:“myName”,这样的变量名或函数名看上去就像骆驼峰一样此起彼伏,故得名。驼峰命名法又分为小驼峰法和大驼峰法。
(1)小驼峰法:第一个单词首字母小写,其余单词首字母大写。变量一般使用小驼峰法命名。例如:“myName”。
(2)大驼峰法:又称帕斯卡命名法,即所有单词首字母大写。函数、类,一般使用大驼峰法命名。例如:“MyName”。
2、匈牙利命名法(Hungarian)
开头字母用变量类型的缩写,其余部分用变量的英文或英文的缩写,要求单词第一个字母大写。基本原则:变量名=属性+类型+对象描述。例如:Int iMyAge; “i”是“int”类型的缩写;char cMyName[10]; “c”是“char”类型的缩写;float fManHeight; “f”是“float”类型的缩写。
3、帕斯卡命名法(PascalCase)
即前面所述大驼峰命名法。每个单词的第一个字母都大写。例如:“MyName”。
4、下划线命名法(UnderScoreCase)
变量名或函数名的每个逻辑断点都有一个下划线来标记。例如:“my_name”。
.
十、嵌入式硬件设计的注意事项
嵌入式设计是个庞大的工程,今天就说说硬件电路设计方面的几个注意事项,首先,咱们了解下嵌入式的硬件构架。
我们知道,CPU是整个系统的灵魂,所有的外围配置都与其相关联,这也突出了嵌入式设计的一个特点硬件可剪裁。在做嵌入式硬件设计中,以下几点需要关注。
1、电源的确定
电源对于嵌入式系统中的作用可以看做是空气对人体的作用,甚至更重要:人呼吸的空气中有氧气、二氧化碳和氮气等但是含量稳定,这就相当于电源系统中各种杂波,我们希望得到纯净和稳定符合要求的电源,但由于各种因素制约,只是我们的梦想。这个要关注两个方面:
a、电压
嵌入式系统需要各种量级的电源比如常见的5v、3.3v、1.8v等,为尽量减小电源的纹波,在嵌入式系统中使用LDO器件。如果采用DC-DC不仅个头大,其纹波也是一个很头疼的问题。
b、电流
嵌入式系统的正常运行不但需要稳定足够的电源,还要有足够的电流,因此在选择电源器件的时候需要考虑其负载,一般留有30%的余量。
如果是多层板,电源部分在layout的时候需电源分割,这时需要注意分割路径,尽量将一定量的电源放置在一起。如果是双面板,则走线宽度需要注意,在板子允许的情况下尽量加宽。合适的退耦电容尽量靠近电源管脚。
2、晶振的确定
晶振相当于嵌入式系统的心脏,其稳定与否直接关系其运行状态和通讯性能。常见的振有无源晶振,有源晶振,首先要确定其振荡频率,其次要确定晶振类型。
a、无源晶振
其匹配电容和匹配电阻的选择,这部分一般依据参考手册。在单片机设计中,经常使用插件晶振配合瓷片电容。在ARM中,为了减少空间和便于布线,经常使用四角无源晶振配合贴片电容。
虽然我们对于固定晶振的匹配电路比较熟悉,但是为了达到万无一失,还是要看参考手册确定电容大小,是否需要匹配电阻等细节。
b、有源晶振
具有更好的更准确的时钟信号,但是相比之下,比无缘晶振价格高,因此这也是在硬件电路设计中需要关注的成本。在做电路板设计时需要注意晶振走线尽量靠近芯片,关键信号远离时钟走线。
在条件允许的情况下增加接地保护环。如果是多层板,也要讲关键信号远离晶振的走线。
3、预留测试IO口
在嵌入式调试阶段,在管脚资源丰富的情况下,我通常预留一个IO口连接led或者喇叭,为下一步软件的编写做铺垫。在嵌入式系统运行过程中适当控制该IO接口,从而判断系统是否正常运行。
4、外扩存储器
一个嵌入式系统如果有电源、晶振和CPU,那么这就是我们熟悉的最小系统。如果该嵌入式系统需要运行大点的操作系统,那么不但需要CPU具有MMU,CPU还需要外接SDRAM和NANDFLASH。
如果该cpu具有SDRAM和NANDFLASH控制器,那么在硬件设计上不用过多的考虑地址线的使用。如果没有相关的控制器,那么需要注意地址线的使用。
这部分在LAYOUT的时候是一个重点,究其原因就是要使相关信号线等长以确保信号的延时相等,时钟和DQS的差分信号线走线。在布线的时候各种布线技巧需要综合使用,例如与cpu对称分布,菊花链布线、T型布线,这都需要依据内存的个数多少来进行选择,一般来说个数越多,布线越复杂,但是知道其关键点,一切迎刃而解。
5、功能接口
一个嵌入式系统最重要的就是通过各种接口来控制外围模块,达到设计者预设的目的。常用的接口有串口(可用来连接蓝牙,wifi和4G等模块),USB接口、网络接口、JTAG接口、音视频接口、HDMI接口等等。
由于这些接口与外部模块连接,做好电磁兼容设计是重要的一项工作。除此之外,在LAYOUT的时候注意差分线的使用。
6、屏幕
这个功能之所以单独列出来,是由于其可有可无。如果一个嵌入式系统只是作为一个连接器连接外围设备模块,通过相关接口连接到电脑主机或者直接挂在网络上,那么屏幕就不需要了。
但是如果做出来的是一个消费类产品,与用户交互频繁,这就不得不唠叨几句。电容屏幕是嵌入式屏幕的主要部件,在电路设计中需要注意触屏连接线和显示屏连接线的布局。
在走线的过程中尽量短的靠近主控cpu,同时注意配对信号走差分线,RGB控制信号走等长。各种信号走线间距遵循3W规则,避免相互干扰。在屏幕的设计中,一定要确保功率和防止干扰,以防屏幕闪屏和花屏现象的出现。
十一、推挽、开漏、OC、OD
与推挽输出相对的是开漏输出,而开漏输出分为OC、OD两种,下文分别详细介绍。
推挽输出
推挽输出(Push-Pull Output)是由两个MOS或者三极管受到互补控制信号的控制,两个管子始终处在一个导通另一个截止的状态,如图1所示:
推挽输出的最大特点是可以真正的输出高电平和低电平,而且在两种电平下都具有驱动能力。
补充说明:
所谓的驱动能力,就是指输出电流的能力。对于驱动大负载(即负载内阻越小,负载越大)时,例如IO输出为5V,驱动的负载内阻为10ohm,于是根据欧姆定律可以正常情况下负载上的电流为0.5A(推算出功率为2.5W)。显然一般的IO不可能有这么大的驱动能力,也就是没有办法输出这么大的电流。于是造成的结果就是输出电压会被拉下来,达不到标称的5V。当然如果只是数字信号的传递,下一级的输入阻抗理论上最好是高阻,也就是只需要传电压,基本没有电流,也就没有功率,于是就不需要很大的驱动能力。
对于推挽输出,输出高、低电平时电流的流向如图2所示。所以相比于后面介绍的开漏输出,输出高电平时的驱动能力强很多。
缺点
但推挽输出的一个缺点是,如果当两个推挽输出结构相连在一起,一个输出高电平,即上面的MOS导通,下面的MOS闭合时;同时另一个输出低电平,即上面的MOS闭合,下面的MOS导通时。电流会从第一个引脚的VCC通过上端MOS再经过第二个引脚的下端MOS直接流向GND。整个通路上电阻很小,会发生短路,进而可能造成端口的损害。这也是为什么推挽输出不能实现" 线与"的原因。
开漏输出
常说的与推挽输出相对的就是开漏输出(Open Drain Output),对于开漏输出和推挽输出的区别最普遍的说法就是开漏输出无法真正输出高电平,即高电平时没有驱动能力,需要借助外部上拉电阻完成对外驱动。关于上下拉电阻可以参考此文:通俗理解STM32中的上/下拉电阻。
下面就从内部结构和原理上说明为什么开漏输出输出高电平时没有驱动能力,以及进一步比较与推挽输出的区别。
首先需要介绍一些开漏输出(OD)和开集输出(OC)。这两种输出的原理和特性基本是类似的,区别如下:
开漏使用MOS管,其中的"漏"指的就是MOS管的漏极
开集使用三极管,其中的"集"指的就是三极管的集电极
这两者其实都是和推挽输出相对应的输出模式,由于使用MOS管的情况较多,很多时候就用"开漏输出"这个词代替了开漏输出和开集输出。
OC
介绍就先从开集输出开始,其原理电路结构如图3所示。
图3左边电路是开集(OC)输出最基本的电路,当输入为高电平时,NPN三极管导通,Output被拉到GND,输出为低电平;当输入为低电平时,NPN三极管闭合,Output相当于开路(输出高阻)。高电平时输出高阻(高阻、三态以及floating说的都是一个意思),此时对外没有任何的驱动能力。这就是开漏和开集输出最大的特点,如何利用该特点完成各种功能稍后介绍。这个电路虽然完成了开集输出的功能,但是会出现input为高,输出为低;input为低,输出为高的情况。
图3右边的电路中多使用了一个三极管完成了"反相"。当输入为高电平时,第一个三极管导通,此时第二个三极管的输入端会被拉到GND,于是第二个三极管闭合,输出高阻;当输入为低电平时,第一个三极管闭合,此时第二个三极管的输入端会被上拉电阻拉到高电平,于是第二个三极管导通,输出被拉到GND。这样,这个电路的输入与输出是同相的了。
OD
接下来介绍开漏输出的电路,如图4所示。原理与开集输出基本相同,只是将三极管换成了MOS而已。
特点及应用
接着说说开漏、开集输出的特点以及应用,由于两者相似,后文中若无特殊说明,则用开漏表示开漏和开集两种输出电路。
开漏输出最主要的特性就是高电平没有驱动能力,需要借助外部上拉电阻才能真正输出高电平,其电路如图5所示。
当MOS管闭合时,开漏输出电路输出高电平,且连接着负载时,电流流向是从外部电源,流经上拉电阻RPU,流进负载,最后进入GND。
开漏输出的这一特性一个明显的优势就是可以很方便的调节输出的电平,因为输出电平完全由上拉电阻连接的电源电平决定。所以在需要进行电平转换的地方,非常适合使用开漏输出。
开漏输出的这一特性另一个好处在于可以实现"线与"功能,所谓的"线与"指的是多个信号线直接连接在一起,只有当所有信号全部为高电平时,合在一起的总线为高电平;只要有任意一个或者多个信号为低电平,则总线为低电平。而推挽输出就不行,如果高电平和低电平连在一起,会出现电流倒灌,损坏器件。
推挽、开漏对比
.
十二、ARM 架构 ARM7 ARM9 STM32 Cortex M3 M4 51 AVR 区别
ARM架构、ARM7、ARM9、STM32、Cortex M3 M4、51、AVR之间有什么区别和联系?
ARM架构:由英国ARM公司设计的一系列32位的RISC微处理器架构总称,现有ARMv1~ARMv8种类。
ARM7:一类采用ARMv3或ARMv4架构的,使用冯诺依曼结构的内核。
ARM9:一类采用ARMv4或ARMv5架构的,使用哈佛结构的内核。
Cortex M3:采用了ARMv7架构的,使用哈佛结构的内核。
Cortex M4:采用了ARMv7架构的,使用哈佛结构的内核。(较前者最大区:增加了一个DSP处理功能,SIMD单指令多数据功能。其他区别请自己在实际项目开发中体验)
STM32:意法半导体公司(ST)推出的系列基于Cortex-M0/Cortex-M3/Cortex-M4等内核的微处理器/微控制器芯片。
图片
51:Intel在1981年推出的由8031微控制器芯片改造升级的、使用CISC指令集的、冯诺依曼架构的、8位的8051微控制器。后Intel将8051微控制器的内核授权给其他芯片厂商,使得市面上广泛出现类似于8051的芯片,这种采用8051内核的芯片被简称为51。
图片
AVR:一系列由Atmel公司在九十年代初推出的系列8位的、采用改进哈佛结构的、使用RISC指令集的微处理器芯片。
图片
最开始的Intel公司都是自己从头研发处理器芯片。从4004、8008、8086、80286……TI公司的TMS 1000……还有其他的公司研发的可编程芯片。因为是不同公司,而且各公司之间也不可能有交流(防止商业秘密泄露),所以各自做的芯片都有在内部CPU、总线、存储单元、指令集上的不同(如果有相同,那就是专利侵权了,比如Intel当年锲而不舍控告AMD)。但每个公司研发的新老芯片之间都有一定的结构和技术上的传承,所以出现了不同公司研发的芯片中有不同的架构。
架构 architecture:是一个抽象的概念,是一个结构内的元素及元素间关系的一种主观映射的产物。概念性的东西请看微架构。
比如我们常说的计算机处理器有486、Ivy Bridge、Pentium M……这就是架构的不同(其都从属于x86架构),维基的内容里只提到了计算机处理器中的常见硬件架构,而没提到你想了解的、常用于嵌入式系统中的微处理器/微控制器芯片所用到的架构。
而所谓的联系,就是我前面用分割线隔离开来的:ARM架构到STM32这些名称都属于ARM架构的范畴。
这两天忙着考虑控制步进电机的程序设计,所以脑子有点不够用,表达有点障碍。如果你关注过计算机CPU历史,就能理解我所说的架构是怎么一回事。
内核 IP core:概念请看IP核。可以说IP核是硬件架构这个抽象概念在芯片内的具体实现。
上面说了,最开始都是各个厂家自己做,从架构研发到芯片成型,这种好处是自己完全掌握了核心技术。但劣势是投入巨大,一旦大投入,但设计出来的芯片因为架构的不合理而导致市场流失,那之前的投入就打水漂了。
而当年Intel的8031和8051在嵌入式工控领域热卖(其实现在还有些工控领域坚持用8031,因为稳定,这个以后有空再说)。而Intel可能是从生产成本和扩展领域方面的考虑(人家做计算机微处理器比这赚钱多了),自己逐渐放弃了8051芯片的生产,转而允许授权其他公司生产。集成芯片内部就是一堆晶体管的集合,用硬件描述语言来规定晶体管的排列组合从而实现中央处理器、总线,存储单元……,Intel把如何实现8051架构的硬件描述语言授权卖给其他公司(买内核),获授权的公司就能生产具有8051内核的芯片了。
微控制器MCU/微处理器μP:
一开始只有小型微型计算机所使用的微处理器,后来Intel从4004发展到8086阶段中衍生出了专门用于工业控制方面的8031到8051,然后是用于计算机的微处理器慢慢发展向超高集成度、大容量、高频率、大处理能力以符合计算机技术的日益发展需求。而8051则平稳发展向了高稳定性、多功能集成度的微控制器,以满足工业控制领域对内存需求相对不是太大,但稳定性高、外设功能较多、占用面积小的要求。
最开始的区分就是微控制器带有内部RAM(等同于计算机的内存条,当然芯片内集成不会有那么大的内存,一般撑死了128K内存)、和ROM(等同于计算机的硬盘,当然也不会有像硬盘大的容量),以及其他的外设功能(如串口、spi、I2C等功能)。简单的说就是把一个缩小资源容量的计算机放到一个芯片内。也因为这样单芯片集成了一个完整的计算机系统在里面,大陆地区在80、90年代的电子工程师将其称为“单片机”,然后影响至今。
(注意,一个完整的计算机系统是处理器、总线、存储结构、输入输出结构,所以不要跟我说为啥没有显示器和鼠标键盘,它单片机也敢说继承了一个计算机系统,你可以翻翻《计算机系统原理》课本)
而计算机微处理器因为需要从处理数据角度考虑,纯粹只做处理方面的升级,所以在一开始的区分中,微处理器是不集成RAM、ROM、和其他外设功能的。
只是因为PowerPC往嵌入式发展,以及后来ARM的出现,开始慢慢的又缩小了微处理器和微控制器的区别,这些微处理器也开始集成了RAM、ROM、其他外设……
但现在国际上也没有一个统一的,通用的标准说微处理器和微处理器之间的区别是什么。跟“单片机”一样,都是工程师自己叫出来的。也有人把8051也称为微处理器的……
而从我做过的TI的DSP、ARM7、ARM9等芯片来看:
微处理器μP是需要通过并口外扩RAM、ROM,并且程序从外部ROM启动,在外部RAM运行的。
微控制器MCU通过内部ROM启动程序,在内部或外部RAM运行程序的。
这只是我的个人见解,因为有的芯片可以被配置为微处理器,也可以被配置为微控制器,其配置后的区别就是程序从哪里启动在哪里运行。比如德州仪器TI的TMS320F2812 DSP芯片。
BTW:DSP芯片本质上其实也是一个微处理器/微控制器芯片,只是它内含了DSP数字信号处理功能,比如上面说到的Cortex-M4也是集成了DSP数字信号处理功能呢,但ARM公司不称呼它为DSP,这都是工程师自己称的。没有统一标准。
ARM和 Intel谁能代替 DSP?
//
关于冯诺依曼结构
冯诺依曼结构:是一种将程序指令存储器和数据存储器合并在一起的电脑设计概念结构。应该说ARMv3之类的内核的存储结构模式和寻址模式使用了这种冯诺依曼结构,一个完整的微处理器架构还需要指令集等其他系列结构。
如果是问不理解冯诺依曼结构的话,建议学习一下《计算机系统》或《计算机系统原理》这一类书籍。在我记忆中貌似大学大一大二必修的《计算机原理》这一类的都会提到(用于考计算机一二级神马的教材)。
插一个关于嵌入式概念的补充
IEEE和IEC对于嵌入式系统(Embedded System)的诠释,从最早期的4004、8031、8051,直到现在流行的ARM和很难学的PowerPC,这些芯片如果应用在“用于控制、监视或者辅助操作机器和设备的装置”上时,都应该是属于嵌入式(还有人曾将X86架构的80386用于嵌入式系统的)。
所以不要再来问我如何从单片机转向嵌入式这种问题了。因为做单片机开发本身就是嵌入式开发。要问请问清楚你是想从8051转向ARM还是PowerPC。
最后,我想提一下CPU这个概念:一般人听到CPU都会想到个人电脑里面的那个被散热片、风扇重压的大芯片。其实严格来说这是一个错误的概念。
CPU:(zh.wikipedia.org/wiki/CPU)严格来说CPU只是指微处理器/微控制器芯片内部的中央处理器这个模块,但人都有把某主要功能夸大、忽略其他必备的辅助功能的这种思维。所以有的时候听到了某个电子工程师、嵌入式工程师说CPU输出什么什么东西的时候,不要以为他在说电脑里的那颗大芯片,他可能是在说ARM、PowerPC、51、AVR之类的芯片。