一、单片机可以替代PLC吗
这几天公司又要研究plc了 ,主要是交通方面连接信号灯等,本人做工业时一直感觉用单片机好主要是便宜,那么如题疑问来了
单片机可以替代PLC 吗?答案是否定的。
第一次听到这个答案可能很多人都有疑问,单片机明明功能那么强大,功能那么丰富为什么不能取代PLC呢?
来了解一下单片机和PLC分别是什么,它们之间有什么区别。
单片机
单片机简称MCU,是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能集成到一块硅片上构成的一个小而完善的微型计算机系统。
诸如手机、PC外围、遥控器,至汽车电子、工业上的步进马达、机器手臂的控制等,都可见到MCU的身影。
单片机出现的历史并不长,但发展十分迅猛。它的产生与发展和微处理器的产生与发展大体同步,自1971年美国Intel公司首先推出4位微处理器以来,它的发展到目前为止大致可分为5个阶段。
单片机发展的初级阶段(1971年至1976年):1971年11月Intel公司首先设计出集成度为2000只晶体管/片的4位微处理器Intel 4004, 并配有RAM、 ROM和移位寄存器, 构成了第一台MCS—4微处理器, 而后又推出了8位微处理器Intel 8008, 以及其它各公司相继推出的8位微处理器。
低性能单片机阶段(1976年至1980年):以1976年Intel公司推出的MCS—48系列为代表, 采用将8位CPU、 8位并行I/O接口、8位定时/计数器、RAM和ROM等集成于一块半导体芯片上的单片结构, 虽然其寻址范围有限(不大于4 KB), 也没有串行I/O, RAM、 ROM容量小, 中断系统也较简单, 但功能可满足一般工业控制和智能化仪器、仪表等的需要。
高性能单片机阶段(1980年至1990年):这一阶段推出的高性能8位单片机普遍带有串行口, 有多级中断处理系统, 多个16位定时器/计数器。片内RAM、 ROM的容量加大,且寻址范围可达64 KB,个别片内还带有A/D转换接口。
16位单片机阶段(1983年至1989年):1983年Intel公司又推出了高性能的16位单片机MCS-96系列, 由于其采用了最新的制造工艺, 使芯片集成度高达12万只晶体管/片。
全方位高水平发展阶段(1990年至今):到目前为止,单片机也有从传统的8位处理器平台向32位高级RISC处理器平台转变的趋势,但8位机依然难以被取代。8位单片机成本低,价格廉,便于开发,其性能可以满足大部分的需要,只有在航天、汽车、机器人等高技术领域,需要高速处理大量数据时,才需要选用16/32位,而在一般工业领域,8位通用型单片机,仍然是目前应用最广的单片机。单片机在集成度、功能、速度、可靠性、应用领域等全方位向更高水平发展。
单片机的特点是编程、维护相对复杂,编程方式常用C语言或者汇编语言,成本较低,I/O接口相对有限。
PLC
PLC,全称Programmable Logic Controller,即可编程逻辑控制器,是一种专门为在工业环境下应用而设计的数字运算操作电子系统。它采用一种可编程的存储器,在其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令,通过数字式或模拟式的输入输出来控制各种类型的机械设备或生产过程。
单片机为什么不能取代PLC呢?
1 稳定性与可靠性
有人说这是个伪问题,单片机是元器件,PLC是由元器件以及庞大的软件构成的系统,两者在这一方面没有可比性。这话没有错,大多PLC的控制芯片实际上就是单片机,也就是说可以将PLC看成是单片机的二次开发,单论工业防护等级,单片机的稳定性和可靠性能根本比不了PLC这种IP67类的产品( IP为标记字母,第一标记数字表示接触保护和外来物保护等级,第二标记数字表示防水保护等级)。而且就PLC这种能应对工业恶劣环境的产品还开发出一套冗余系统。如果稳定性与可靠性对比没有意义,那么我们就从其他方面分析。
2 I/O功能
单片机的I/O点实在有限,而反观PLC呢?针对不同的现场信号,均有相应的I/O点可与工业现场的器件(如按钮、开关、传感电流变送器、电机启动器或控制阀等)直接连接,并通过总线与CPU主板连接。工业里几乎任意一条生产线,都有上百甚至上千I/O点,就这点单片机完全无法比拟。
3 扩展功能
一条完整的工业生产线除了控制,还有通信、上位、组态、运动控制与显示等等,这些东西都需要依靠完整的工业体系与通信协议去做,例如西门子公司的PROFIBUS-DP通信、三菱重工的CC-LINK等等。而单片机和PC、单片机和单片机之间的通信大都用串口。单片机的串口是全双工异步通信串口,那么像MODBUS、PROFIBUS、CAN open、以太网等通信协议单片机是否能一一实现?或许单片机可以做到,但是这就涉及到下一个分析点,开发周期。
4 开发周期
PLC的品牌多达200多种,几乎每个品牌都有不同编程软件,而且都在不断完善自己的编程软件,使之能够越来越简单的服务于电气工程师,而各种程序块也是越来越方便人性化的任意去调用,比如PID模块、运动控制模块等,大大减轻了工程师的开发压力也缩短了开发周期。
那单片机要如何实现?没有现成的模块使用,那就只能开发,那么做过非标自动化设备的工程师都会遇到一个问题——工期不足。PLC这种高度集成化模块化的产品在达到满足设备所需的开发周期,在工期面前也是抓襟见肘,更不用说如同白纸一张的单片机。
5 通信距离
现在大多数流水线是要跨区域整合与监视的,所用的通讯方式多为以太网加中继器,或者直接走民用宽带光纤,所用的东西到最后很可能是用的就是微软的IE浏览器,很明显PLC是有RJ-45接口,即使本体没有RJ-45也可以配备以太网模块,可单片机搭载的PCB板能加上这个接口然后开发出以太网通信吗?开发需要多久?
6 编程语言
这点对单片机来讲是一个优势,同时也是一个劣势。上面提到PLC的品牌有两百多种,编程软件更多,尽管大多数PLC的编程语言都大同小异,但是每接触一款不同品牌的PLC,电气工程师就要从PLC的硬件参数、软元件、编程软件等等各个方面从头了解一次才能使用的得心应手。而单片机的编程语言用的是C语言或者汇编语言,这对于任何单片机都是通用的。换句话说,学会C语言或者汇编语言,便可以应用任何单片机开发想要的功能(前提是要有相关的电工电子学基础)。但话又说回来,电气工程师不是电子工程师,他们的工作不是单单考虑单片机如何驱动继电器来控制机床的,甚至有的电气工程师都不会C语言、汇编语言之类的MCU开发语言。近些年,IEC-61131-3标准的推广,越来越多的PLC支持多种编程语言,如类似C语言的ST语言,类似电路图的CFC语言。这种便利的功能是传统单片机开发环境真的无法实现。
结论
经过上面阐述,我们可以看出,PLC实际上可以看成是单片机的二次应用开发,但是它又有自己鲜明的特点。
在功能、稳定性、易用性方面,PLC相比单片机有独特的优势,在制造业有更广泛的应用。
在遇到工业客户的时候也是客户对PLC极度的信任
二、7805应用电路
如上图,7805 集成稳压电路。
7805是串联式三端稳压器,三个端口分别是电压输入端(IN),地线(GND),稳压输出(OUT)。当IN-GND之间的电压超过 7V 以上,输出端与 GND 之间的电压就会稳定在 5V。下面是 7805 最常见到的 应用电路。
上图,7805典型稳压工作电路。
如果将 7805 的 GND 端与电路地线之间增加一个偏置电压 ,那么电路的输出也会变成 。如果将偏置电压看成一个输入变化信号,那么 7805 的输出中也存在着与输入信号同向的信号分量。
上图,7805输出电压调整。
跟随放大器
利用 7805 的 GND 与 OUT 之间的恒差跟随特性,那么可以形跟随放大器。输入信号有 7805 的 GND 输入, 它的输出信号中就包含有输入信号。由于 7805 具有很强的电流输出能力,所以这个跟随放大器具有功率放大功能。
上图,基于7805 构成的功率放大器。
下面是示波器观察到的 7805 跟随放大器的输入与输出信号波形。由于 7805 内部电路作用,这个放大电路的频率带宽相对比较低,只有几百赫兹。
上图,7805功率放大器输入(蓝色)输出信号(青色)。
电容三点式振荡器
由于 7805 从 GND 到 OUT 之间有很大的电流放大能力,所以可以使用它构成 Colpits 电容三点式振荡器。下图给出了振荡电路图。 这个电路是由 L1,C3,C2 组成谐振回路,利用 7805 的电流放大能力不断在 C3 中补充电感,从而维持 LC 回路振荡。
上图,基于7805 的 Colpits 电容三点式振荡器。
如下是测量 7805 的输出端展示的 正弦振荡波形,振荡频率为 18.99kHz。计算 L1,C3,C2回路的谐振频率如下,可以看到这个频率与实测振荡器的频率很接近。
上图,基于7805 的 Colpits振荡器输出波形。
这个震荡器输出的信号还有一点非常奇怪,那就是它具有双周期特性,也就是在相邻两次振荡周期中,它的波形不一样,这是混沌电路的典型特征。
总结
当然,上面两个电路并没有特别的使用价值。通过这两个特殊的用法,可以让我们对于 7805 集成芯片有了更深入的了解。
三、晶振为什么没有封装进STM32芯片内部
有一些电子设备需要频率高度稳定的交流信号,而LC振荡器稳定性较差,频率容易漂移,即产生的交流信号频率容易变化。
在振荡器中采用一个特殊的元件——石英晶体,可以产生高度稳定的信号,这种采用石英晶体的振荡器称为晶体振荡器,简称晶振,如下图是各种各样的晶振。
电子元器件的小型化趋势,有力促进了当下社会的发展进步,电子元器件越小,为主板节约的空间越大,因此,有人异想天开,如果能将晶振电路封装到IC芯片(如时钟芯片)内部将是多么完美,就如同有源晶振在无源晶振的基础内置振动芯片,就无需外部的电容电阻等元器件了。
但实际出于各种原因,晶振并没有内置到IC芯片中。这究竟是为什么呢?
原因 1
早些年,芯片的生产制作工艺也许还不能够将晶振做进芯片内部,但是现在可以了。这个问题主要还是实用性和成本决定的。
原因 2
芯片和晶振的材料是不同的,芯片 (集成电路) 的材料是硅,而晶体则是石英 (二氧化硅),没法做在一起,但是可以封装在一起,目前已经可以实现了,但是成本就比较高了。
原因 3
晶振一旦封装进芯片内部,频率也固定死了,想再更换频率的话,基本也是不可能的了,而放在外面, 就可以自由的更换晶振来给芯片提供不同的频率。
有人说,芯片内部有 PLL,管它晶振频率是多少,用 PLL 倍频/分频不就可以了,那么这有回到成本的问题上来了,100M 的晶振集成到芯片里, 但我用不了那么高的频率,我只想用 10M 的频率,那我为何要去买你集成了 100M 晶振的芯片呢,又贵又浪费。
我们通常所说的 "片内时钟", 是不是实际上片内根本没有晶振, 是有RC 振荡电路。
可以看出STM32系统时钟的供给可以有3种方式:
- HSI,高速内部时钟信号STM32单片机内带的时钟 (8M频率), 精度较差。
- HSE,高速外部时钟信号,精度高。来源:HSE外部晶体/陶瓷谐振器(晶振)HSE用户外部时钟
- PLL,低速外部晶体32.768kHz主要提供一个精确的时钟源 一般作为RTC时钟使用。
如果选用内部时钟作为系统时钟,其倍频达不到72Mhz,最多也就8Mhz/2*16 = 64Mhz。
如果使用内部RC振荡器而不使用外部晶振,请按照如下方法处理:
1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空。
2)对于少于100脚的产品,有2种接法:
- OSC_IN和OSC_OUT分别通过10K电阻接地。此方法可提高EMC性能。
- 分别重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出并输出'0'。此方法可以减小功耗并(相对上面i)节省2个外部电阻。
时钟是STM32单片机的脉搏,是单片机的驱动源。
使用任何一个外设都必须打开相应的时钟。这样的好处就是,如果不使用一个外设的时候,就把它的时钟关掉,从而可以降低系统的功耗,达到节能,实现低功耗的效果。
四、讲解LC振荡器的工作原理
电感器是由电线线圈组成的设备,包裹在磁性材料上。电容器是包含两个金属板的设备。如果我们在电路中将电感器和电容器连接在一起,电流和电压会振荡,我们称这些振荡的频率为该电路的“谐振频率”。该频率由电感的感值和电容的容值决定。由于电线线的电阻,振动幅度将逐渐减小。如果该电路中的导线没有电阻,这些振动将永远持续下去。
另一方面,假设我们的电路是仅由一个电容器和一个电阻器组成。一旦电容器放电,电阻两端的电压将为0。一旦电阻两端的电压为0,就不会有电流流过。如果没有电流流过,那么电容器将永远无法充电。但是,与电阻不同,电感是一种试图防止流过它的电流量发生任何变化的器件。如果电流试图停止流动,电感将施加力以保持电流通过。
在包含电阻的电路中,当电容器完全放电时,电流降为0;如果我们用电感代替电阻,那么当电流试图减小时,电感将施加力以保持电流流动。然后,该电流将以相反的方向给电容器充电。然后,电容器将要放电,并且此循环将重复进行。
假设交在该电路旁边,有一个交流电压源,具有与这些振荡完全相同的频率。如果我们添加一个电阻,电阻两端的电压始终相等,这意味着电阻两端的电压降始终为0。如果电阻两端的电压降始终为0,那么就没有电流通过。从交流电压源的角度来看,电感器和电容器的并联为开路。且可以用开路代替。而交流电压源不会知道两者之间的差异,因为无论哪种情况,电流都不会流过交流电源。
现在,假设我们采用与以前相同的电感器和电容器,我们将它们串联。由于此电路中所有组件都是串联连接的,因此每个点流过的电流量完全相同。电感与电容组合的谐振频率,仍和以前一样。在组件串联的情况下,电感器电容器组合就像短路一样。该串联的电感器和电容器可以替换为短路,而交流电压源不会知道两者之间的差异,因为会流过完全相同的电流,像以前一样流过交流电压源。然而,仅当电压源的频率恰好等于谐振频率。电压源的频率越接近谐振频率,电感器与电容器的串联组合越像短路,并且,电流的幅度将更大。如果电感器与电容器并联,则情况相反,电压源的频率越接近谐振频率,电感器与电容器的串联组合越像开路,并且流过电压源的电流越低。
五、 STM32的时钟系统
STM32的时钟树
时钟信号推动单片机内各个部分执行相应的指令,时钟就像人的心跳一样。
STM32本身十分复杂,外设非常多,任何外设都需要时钟才能启动,但并不是所有的外设都需要系统时钟那么高的频率,如果都用高速时钟势必造成浪费。同一个电路,时钟越快功耗越大、抗电磁干扰能力越弱。复杂的MCU采用多时钟源的方法来解决这些问题。如下图,是STM32的时钟系统框图。
如上图左边的部分,看到STM32有4个独立时钟源,HSI、HSE、LSI、LSE。
- HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。
- HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。
- LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。
- LSE是低速外部时钟,接频率为32.768kHz的石英晶体。
时钟树的右边红色框中,则是系统时钟通过AHB预分频器,给相对应的外设设置相对应的时钟频率。
其中LSI、LSE是作为IWDGCLK(独立看门狗)时钟源和RTC时钟源使用。而HSI、HSE以及PLLCLK经过分频或者倍频作为系统时钟SYSCLK来使用。
PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。通过倍频之后作为系统时钟的时钟源。
配置时钟
默认时钟
Keil编写程序是默认的时钟为72Mhz,其实是这么来的:
外部高速晶振HSE提供的8MHz(大小与电路板上的晶振相关)通过PLLXTPRE分频器后,进入PLLSRC选择开关,进而通过PLLMUL锁相环进行倍频(x9)后,为系统提供72MHz的系统时钟SYSCLK。之后是AHB预分频器对时钟信号进行分频,然后为低速外设提供时钟。
内部RC振荡器HSI为8MHz,2分频后是4MHz,进入PLLSRC选择开关,通过PLLMUL锁相环进行倍频(最大x16)后为64MHz。
USB时钟
如上图,STM32的USB时钟不能超过48MHz,因此如果时钟源为72MHz,就需要进行1.5分频。
如果时钟源为48MHZ,则进行1分频即可。
把时钟信号输出到外部
STM32可以选择一个时钟信号输出到MCO脚(PA8)上,可以选择为PLL输出的2分频、HSI、HSE、或者系统时钟,可以把时钟信号输出供外部使用。
AHB分频器
如时钟树图右边的部分,系统时钟通过AHB分频器给外设提供时钟。从左到右可以简单理解为:
系统时钟->AHB分频器->各个外设分频倍频器->外设时钟的设置。
右边部分为:系统时钟SYSCLK通过AHB分频器分频后送给各模块使用,AHB分频器可选择1、2、4、8、16、64、128、256、512分频。其中AHB分频器输出的时钟送给5大模块使用:
- 内核总线:送给AHB总线、内核、内存和DMA使用的HCLK时钟。
- Tick定时器:通过8分频后送给Cortex的系统定时器时钟。
- I2S总线:直接送给Cortex的空闲运行时钟FCLK。
- APB1外设:送给APB1分频器。APB1分频器可选择1、2、4、8、16分频,其输出一路供APB1外设使用(PCLK1,最大频率36MHz),另一路送给通用定时器使用。该倍频器可选择1或者2倍频,时钟输出供定时器2-7使用。
- APB2外设:送给APB2分频器。APB2分频器可选择1、2、4、8、16分频,其输出一路供APB2外设使用(PCLK2,最大频率72MHz),另一路送给高级定时器。该倍频器可选择1或者2倍频,时钟输出供定时器1和定时器8使用。另外,APB2分频器还有一路输出供ADC分频器使用,分频后送给ADC模块使用。ADC分频器可选择为2、4、6、8分频。需要注意的是,如果APB预分频器分频系数是1,则定时器时钟频率(TIMxCLK)为PCLKx。否则,定时器时钟频率将为 APB 域的频率的两倍:TIMxCLK = 2xPCLKx。
APB1和APB2的对应外设
F1系列中,APB1上面连接的是低速外设,包括电源接口、备份接口、CAN、USB、I2C1、I2C2、USART2、USART3、UART4、UART5、SPI2、SP3等。
APB2上面连接的是高速外设,包括UART1、SPI1、Timer1、ADC1、ADC2、ADC3、所有的普通I/O口(PA-PE)、第二功能I/O(AFIO)口等。
具体可以在stm32f10x_rcc.h中查看外设挂在哪个时钟下。
时钟监视系统(CSS)
另外,STM32还提供了一个时钟监视系统(CSS),用于监视高速外部时钟(HSE)的工作状态。倘若HSE失效,会自动切换(高速内部时钟)HSI作为系统时钟的输入,保证系统的正常运行。
六、所有Boost升压电路
我们在设计需要有些需要锂电池的产品中,由于锂电池正常工作电压范围在2.9V~4.2V之间,对于那些高于4.2V的电路,比如5V的电路,锂电池的供电电压就是不够的。这样我们就需要用到升压电路,来实现升压的功能。这里我们对锂电池的升压电路设计采用的是Boost升压电路结构。
Boost升压电路原理
我们知道大部分DC-DC电压转换芯片大都是采用Boost升压结构的形式,其主要由升压电感、二极管、和电容组成。
Boost升压电路是通过控制开关通断,来控制电感存储和释放能量,从而使输出电压比输入电压高。
在开关闭合时,电感通过图中回路1存储能量,此时二极管截止,后级电路由电容供电;
当开关断开时,电感通过图中回路2释放能量,此时二极管导通,电感给电容充电并为后级电路供电。
所以我们可以发现,在开关断开时,二极管两端存在压降,如果后级电路工作电流很大的话,那么这个二极管是在消耗很多的电能。所以在设计Boost电路时,对二极管的参数选型也很重要。
所以如果在输出电流很大的情况下,那么这个电路就变得不是那么的十分完美,因为这个二极管消耗了电能。在这个电路中我们发现这里的二极管也是起到开关的作用,于是我们就想到在二极管导通时,使用内阻极低的mos管来替代这个二极管,这样mos管上的压降就很小,耗电也就小。这种方法就是我们常说的同步整流。这里我们就很明显的知道了,同步整流电路的工作效率比传统二极管整流电路效率要高。对于锂电池这种本身电量有限的电源,使用同步整流升压给后级电路供电是最合适的方案,市场中有很多充电宝都是使用二极管整流,这种整流电路充电效率就没有同步整流的高了。下面就为大家介绍一款同步整流芯片。
500kHz 5V 高效同步PWM Boost升压转换器FP6276A
FP6276A具有输入电压范围2.4V~4.5V,可以看到这个完全是为单节锂电池升压设计的。其静态电流<1uA,具有过温保护,过压保护,过流保护等功能,其他具体详情请查阅数据手册,这里就不作过多介绍。
从FP6276的典型应用电路可以看出它和传统的二极管整流最大的差别就是没有整流二极管,这里是通过集成在芯片内部的mos进行整流的。
电路中输出电压通过两个电阻分压反馈来实现输出电压的稳定,Vout=0.6V * ( 1 + R1/R2 )。
电路中是通过调节电阻R3来实现电路限流保护的,Iocp = (180000/R3) + 0.2。电阻必须在37.5k和300k之间,电流限制正在5A和0.8A之间。