光耦实现TTL串口为单线通讯电路
- 格式:docx
- 大小:69.60 KB
- 文档页数:1
ttl光耦隔离电路一、什么是ttl光耦隔离电路?1.1 电耦合电耦合是指通过电磁感应原理将两个电路之间的信号传递的一种方法。
在电耦合中,输入电路和输出电路通过电磁感应耦合在一起,信号可以通过电磁感应的作用在两个电路之间传递。
1.2 ttl光耦隔离电路ttl光耦隔离电路是一种通过光耦合器件实现电耦合的电路。
ttl是一种逻辑电平标准,光耦隔离电路通过光电耦合器件将输入电路和输出电路隔离开来,可以实现输入和输出之间的电气隔离,从而避免干扰和提高系统的可靠性。
二、ttl光耦隔离电路的工作原理2.1 光电耦合器件光电耦合器件是实现光耦隔离的关键元件。
光电耦合器件通常由一个发光二极管和一个光敏三极管组成。
当发光二极管输入电流时,它会发出光信号,光信号经过隔离介质作用后,被光敏三极管接收并转换成电信号输出。
2.2 ttl光耦隔离电路的工作过程当输入电路需要给输出电路发送信号时,输入电路通过光电耦合器件的发光二极管发出光信号。
光信号经过隔离介质后,被光敏三极管接收并转换成电信号输出到输出电路。
输出电路可以根据接收到的电信号进行相应的动作,实现输入和输出之间的电气隔离。
三、ttl光耦隔离电路的优势3.1 电气隔离ttl光耦隔离电路可以实现输入和输出之间的电气隔离,避免了输入电路对输出电路的干扰,提高了系统的可靠性。
3.2 隔离噪声由于光耦隔离电路中的隔离介质具有良好的绝缘性能,可以有效地隔离输入电路和输出电路之间的噪声,提高了系统的抗干扰能力。
3.3 电位隔离ttl光耦隔离电路可以实现输入和输出之间的电位隔离,避免了输入电路和输出电路之间的电位差对系统的影响,提高了系统的稳定性。
3.4 保护功能ttl光耦隔离电路可以起到保护功能,当输入电路发生故障或异常时,可以避免故障或异常信号传递到输出电路,保护输出电路的安全运行。
四、ttl光耦隔离电路的应用领域4.1 工业控制在工业控制系统中,由于环境复杂、噪声干扰大,常常需要使用ttl光耦隔离电路来实现输入和输出之间的隔离和保护,提高系统的可靠性和稳定性。
光耦817应用电路图汇总(PC817光电耦合器开关电源TL431)PC817光电耦合器广泛用在电脑终端机,可控硅系统设备,测量仪器,影印机,自动售票,家用电器,如风扇,加热器等电路之间的信号传输,使之前端与负载完全隔离,目的在于增加安全性,减小电路干扰,简化电路设计。
PC817是常用的线性光藕,在各种要求比较精密的功能电路中常常被当作耦合器件,具有上下级电路完全隔离的作用,相互不产生影响。
pc817主要特点:1、电流传输比(CTR: MIN. 50% at IF=5mA ,VCE=5V)2、高隔离电压:5000V有效值3、紧凑型双列直插封装,PC817为单通道光耦,PC827为双通道光耦,PC837为三通道,PC847为四通道光耦。
4、线性光耦元件。
光耦817应用电路图(一)pc817是常用的线性光藕,在各种要求比较精密的功能电路中常常被当作耦合器件,具有上下级电路完全隔离的作用,相互不产生影响。
光耦pc817引脚图和内部电路图光耦pc817应用电路图当输入端加电信号时,发光器发出光线,照射在受光器上,受光器接受光线后导通,产生光电流从输出端输出,从而实现了“电-光-电”的转换。
普通光电耦合器只能传输数字信号(开关信号),不适合传输模拟信号。
线性光电耦合器是一种新型的光电隔离器件,能够传输连续变化的模拟电压或电流信号,这样随着输入信号的强弱变化会产生相应的光信号,从而使光敏晶体管的导通程度也不同,输出的电压或电流也随之不同。
光耦817应用电路图(二)开关电源的稳压反馈通常都使用TL431 和PC817,如输出电压要求不高,也可以使用稳压二极管和PC817,下面我来通过以下典型应用电路来说明TL431,PC817 的配合问题。
电路图如下:R13 的取值,R13 的值不是任意取的,要考虑两个因素:1)TL431 参考输入端的电流,一般此电流为2uA 左右,为了避免此端电流影响分压比和避免噪音的影响,一般取流过电阻R13 的电流为参考段电流的100 倍以上,所以此电阻要小于2.5V/200uA=12.5K.2)待机功耗的要求,如有此要求,在满足《12.5K的情况下尽量取大值。
电脑编程技巧与维护单线(1-Wire )器件,是美国Dallas Semiconductor 公司的产品,它是基于一根信号线(输入、输出)与一根地线实现互连通信的系列集成电路。
单线(1-Wire )器件易于与微机联网实现工业现场温度采集、开关量控制等自动化控制网。
单线(1-Wire )器件包括DS1820(温度传感器)、DS2405(开关)、DS2450(A/D 转换器)。
单线(1-Wire )器件可以组成微型局域网(MicroLAN ),它是一种主从式网络,以个人计算机或单片机为网络中的主设备,主设备可通过一对双绞线与从设备相连组网,从设备无需自备电源。
单线(1-Wire )器件组网如图1。
主设备实时与网络上从设备进行通信,传输控制命令和读取数据,单线(1-Wire )器件通信有严格的时序要求,时间脉冲精度最小要求为1us 。
单片机实现与从设备通信可通过选用合适的晶振,单片机选用12MHz 晶振执行一条单字节指令时间是1us ,通过循环语句即可实现精确延时;个人计算机与单线(1-Wire )器件通信可分为两个阶段,486之前DOS 环境及奔腾机Windows 环境阶段,DOS 环境时,可通过个人计算机的打印口(LPT )与单线(1-Wire )器件实现严格的读写时序,可实现数据传输。
Windows 操作系统(包括Windows 9Χ,Windows NT 及Windows 2000)是抢先方式的多任务系统,运行程序经常被系统或其他程序打断。
计算机的打印口(LPT )的信号是杂乱无章的,完全不符合器件要求的严格时序,这在示波器上可看得很清楚。
另外由于利用VC 、VB 编写时序程序时,利用循环语句延时由于CPU 速度及总线速度不同,不同的个人计算机由于速度不同,编写的程序不具有通用性,因而是不可取的。
运行在Windows 平台上,利用VB6.0串口通信控件(MSComm ),通过选择不同的通信波特率可实现精确的通信时序。
串口 ttl 防护电路设计串口TTL 是一种常见的用于数据传输的通信接口,它常被用于单片机与外部设备的通信。
然而,由于串口TTL 的工作电平较低,容易受到外界干扰,因此需要进行防护电路的设计,以确保数据传输的稳定性和可靠性。
一、串口 TTL 的特点和问题串口TTL 是一种将串行数据转换为并行数据的接口电路,常见的串口 TTL 通信速率为9600bps、115200bps等。
它具有以下特点:1. 低电平:串口 TTL 的工作电平一般为0V-5V,其中0V表示逻辑低电平,5V表示逻辑高电平。
2. 短距离传输:串口 TTL 的传输距离较短,一般在几米到十几米之间。
3. 容易受到干扰:由于串口 TTL 信号的幅度较小,容易受到电磁干扰、串扰等影响,导致数据传输错误或丢失。
由于上述特点,串口 TTL 在实际应用中容易遇到以下问题:1. 传输错误:由于信号幅度小,容易被外界干扰,导致数据传输过程中发生错误,造成数据丢失或错误。
2. 传输延迟:由于干扰信号的存在,串口 TTL 信号的传输可能会出现延迟,影响数据的实时性。
3. 传输距离限制:串口 TTL 的传输距离有限,超过一定距离后信号会衰减,导致数据传输失败。
4. 通信稳定性差:由于外界干扰的存在,串口 TTL 的通信稳定性较差,容易出现通信中断或异常现象。
二、串口 TTL 防护电路设计原则为了解决上述问题,设计一个有效的串口TTL 防护电路十分重要。
在进行串口 TTL 防护电路设计时,应遵循以下原则:1. 电源滤波:为了消除电源中的噪声,可以在串口 TTL 电源线上添加电源滤波电路,包括滤波电容和滤波电感,以减少电源噪声对串口 TTL 信号的干扰。
2. 信号线阻抗匹配:为了提高串口 TTL 的抗干扰能力,可以在信号线上添加电阻来匹配信号线的阻抗,减少信号反射和串扰。
3. 信号线屏蔽:为了减少外界电磁干扰对串口 TTL 信号的影响,可以在信号线上加装屏蔽层,如铜箔或铝箔,并接地以形成屏蔽。
在低端单⽚机之间的单线IO通信利⽤IO模拟串⼝对于接收⽐较复杂,稳定性肯定没有串⼝模块稳定性好,⽽且要占⽤⼀个定时器中断,对于不允许使⽤中断的场合就不能适应,⽐如⾼速的⽆刷控制器,我发明了⼀种⽅案可以解决这个问题,除了传输速度慢以外,有很多优点,因为越慢越稳定,⽬前为单主多从,其很容易扩展为类似can那样的单线多主⽅式,由于个⼈原因没有条件与时间将此⽅案改的完美,现在将其分享给需要的⼈/******************************************************************************************************************************************************************************************************************** File : ucos.h* By : Minglie* Date :**********************************************************************************************************/#ifndef __Ucos_H#define __Ucos_H#include "HT66F018.h"//announce all the head files#include "Main_Constant.h"void os_init();void task0(void);#define OSTCBCur 0#define OSTimeDly(k) {task[OSTCBCur].one.rdy =0; task[OSTCBCur].delay =k-1; }#define OSTimeTick()\{\#define config_max_tasks 1 //最⼤任务个数#define configTICK_RATE_us 800 //800us 配置⼼跳周期#define config_single_wire_task0_mode 0 //单线⼯作模式,0为主机,1为从机#define config_com_task0_lengh 8 //配置通信有效位数,只能取2,4,6,8//引脚配置#define COM _pc0#define COM_C _pcc0//ming_single_wire⽤到的变量#pragma rambank0OS_EXT OSTCB_TypeDef task[config_max_tasks];//task0的变量OS_EXT unsigned char task0_dat_cur;OS_EXT unsigned char task0_wait_com_h_count;OS_EXT unsigned char task0_wait_com_l_count;OS_EXT unsigned char task0_tx_buf;OS_EXT unsigned char task0_tx_buf_temp;OS_EXT unsigned char task0_rx_buf;OS_EXT unsigned char task0_rx_buf_temp;OS_EXT unsigned char task0_level_count;OS_EXT bit task0_bit_no_back;OS_EXT bit task0_bit_level_s;OS_EXT bit task0_bit_com_err;#pragma norambank#endif/********************************************************************************************************** ********************************************************************************************************* * File : ucos.c* By : Minglie* Date :********************************************************************************************************* */#include "Main_Constant.h"#include "ucos.h"void os_init(){//初始化时钟800us/////////////////////////////////////////////////////////////////_tm2c0 = 0b01010000;_tm2c1 = 0b11000001;_tm2dl = 0x00;_tm2dh = 0x00;_tm2al = configTICK_RATE_us & 0xff;_tm2ah = configTICK_RATE_us >> 8;_tm2rp = 0x00;_t2on = 1;task0_bit_level_s = 0;task0_dat_cur = 0;task0_bit_no_back = 0;task[0].step = 0;task0_bit_com_err = 0;task[0].one.rdy = 1; //任务就绪task[0].one.enable = 1; //任务使能task[0].delay = 0;task0_rx_buf = 0;task0_tx_buf = 0;}#if config_single_wire_task0_mode==0void task0(){if (task[OSTCBCur].one.rdy){switch (task[OSTCBCur].step){case0: {//初始化发送,并发送起始位1msCOM_C = 0;COM = 0;task0_tx_buf_temp = task0_tx_buf;task0_dat_cur = 0;OSTimeDly(5);COM_C = 1;OSTimeDly(5);task[OSTCBCur].step = 2;break;}case2: {//发送第0,2,4,6,8(从左数)COM_C = 0;COM = 0;if (task0_tx_buf_temp & 0b10000000){OSTimeDly(10);}else{OSTimeDly(5);}task0_tx_buf_temp <<= 1;task0_dat_cur++;task[OSTCBCur].step = 3;break;}case3: {//发送第1,3,5,7,9(从左数)COM_C = 1;if (task0_tx_buf_temp & 0b10000000){OSTimeDly(10);}else{OSTimeDly(5);}task0_tx_buf_temp <<= 1;task0_dat_cur++;if (task0_dat_cur>config_com_task0_lengh + 1) //task0_dat_cur==10, bit[0:9]发送完{task0_level_count = 0;task0_dat_cur = 0;task[OSTCBCur].step = 4;}else{task[OSTCBCur].step = 2;}break;}case4: { ////////////////////////////////////////开始接收COM_C = 1;if (COM)//等待对⽅发送,对齐{task[OSTCBCur].step = 4;task0_level_count++; //if (task0_level_count>20) //4ms{task0_level_count = 0;task0_wait_com_h_count = 0;task0_wait_com_l_count = 0;task[OSTCBCur].step = 255; //溢出,跳到异常分⽀}}else{task0_bit_level_s = 0;task0_rx_buf_temp = 0;task0_dat_cur = 0;task0_level_count = 0;task[OSTCBCur].step = 5;}break;}case5: { //////////////////////////////////////COM_C = 1;if (task0_bit_level_s == COM){task0_level_count++;if (task0_level_count>20) //4ms溢出{task0_level_count = 0;task0_wait_com_h_count = 0;task0_wait_com_l_count = 0;{if (task0_dat_cur>0) task0_rx_buf_temp <<= 1; //如果已经收到⼀些数据,将得到的数据向左移动task[OSTCBCur].step = 6;}break;}case6: { //////////////////////////////////////if (task0_level_count >= 7) task0_rx_buf_temp++; //超过1.4ms认为是1task0_bit_level_s ^= 1;task0_dat_cur++;if (task0_dat_cur >= config_com_task0_lengh) //task0_dat_cur==8说明[0:7]数据已经接收完毕{task0_level_count = 0;task[OSTCBCur].step = 7;task0_rx_buf = task0_rx_buf_temp;}else{task0_level_count = 0;task[OSTCBCur].step = 5; //接收下⼀位数据}break;}case7: { //////////////////////////////////////COM_C = 1;if (COM == 0) //等待bit[8]{task0_level_count++;if (task0_level_count>20) //4ms{task0_level_count = 0;task0_wait_com_h_count = 0;task0_wait_com_l_count = 0;task[OSTCBCur].step = 255; //溢出,跳到异常分⽀}}else{COM_C = 1;OSTimeDly(25); //延时5ms,准备下⼀次通信task[OSTCBCur].step = 0;task0_bit_no_back = 0;}break;}case255: { ////////////////////////////////////////异常分⽀COM_C = 1;task0_bit_no_back = 1;//主板不回复if (COM == 1){task0_wait_com_l_count = 0;task0_wait_com_h_count++;task[OSTCBCur].step = 255;if (task0_wait_com_h_count>20) //持续⾼4ms,重新发送{task[OSTCBCur].step = 0;task0_wait_com_h_count = 0;}}else{ //总线被拉低task0_wait_com_h_count = 0;task0_wait_com_l_count++;if (task0_wait_com_l_count>80)//16ms{task0_bit_com_err = 1; //总线被拉低task0_wait_com_l_count = 0;}}break;}}}}#elsevoid task0(){case0: {////初始化分⽀COM_C = 1;task0_level_count = 0;task0_wait_com_l_count = 0;task0_wait_com_h_count = 0;task[OSTCBCur].step = 1;break;}case1: { //等待起始位COM_C = 1;if (COM == 1){task[OSTCBCur].step = 1;task0_wait_com_h_count++;if (task0_wait_com_h_count>100)//持续拉⾼200us*100=20ms{task[OSTCBCur].step = 0; //重新开始接收}if (task0_wait_com_l_count >= 2)//检测到⼤于400us以上低电平{task0_level_count = 0;task[OSTCBCur].step = 2;}}else{task0_wait_com_l_count++;task[OSTCBCur].step = 1;}break;}case2: {//开始接收COM_C = 1;if (COM)//等待对⽅发送,对齐{task[OSTCBCur].step = 2;task0_level_count++; //if (task0_level_count>20) //4ms{task0_level_count = 0;task0_wait_com_h_count = 0;task0_wait_com_l_count = 0;task[OSTCBCur].step = 255; //溢出,跳到异常分⽀}}else{task0_level_count = 0;task0_bit_level_s = 0;task0_rx_buf_temp = 0;task0_dat_cur = 0;task[OSTCBCur].step = 3;}break;}case3: {if (task0_bit_level_s == COM){task0_level_count++;if (task0_level_count>20) //4ms溢出{task0_level_count = 0;task0_wait_com_h_count = 0;task0_wait_com_l_count = 0;task[OSTCBCur].step = 255; //溢出,跳到异常分⽀}}else{ //task0_dat_cur>0 ,说明已经得到⾄少1bit数据if (task0_dat_cur>0) task0_rx_buf_temp <<= 1; //将得到的数据向左移动task[OSTCBCur].step = 4;}break;}case4: {if (task0_level_count >= 7) task0_rx_buf_temp++; //超过1.4ms认为是1 task0_bit_level_s ^= 1;task[OSTCBCur].step = 5;task0_rx_buf = task0_rx_buf_temp;}else{task0_level_count = 0;task[OSTCBCur].step = 3; //接收下⼀位数据}break;}case5: {COM_C = 1;if (COM == 0) //等待bit[8]{task0_level_count++;if (task0_level_count>20) //4ms{task0_level_count = 0;task0_wait_com_h_count = 0;task0_wait_com_l_count = 0;task[OSTCBCur].step = 255; //溢出,跳到异常分⽀}}else{COM_C = 1;OSTimeDly(10); //延时2ms,准备发送//初始化发送task0_tx_buf_temp = task0_tx_buf;task0_dat_cur = 0;task[OSTCBCur].step = 6;}break;}case6: {//发送第0,2,4,6,8(从左数)COM_C = 0;COM = 0;if (task0_tx_buf_temp & 0b10000000){OSTimeDly(10);}else{OSTimeDly(5);}task0_tx_buf_temp <<= 1;task0_dat_cur++;task[OSTCBCur].step = 7;break;}case7: {//发送第1,3,5,7,9(从左数)COM_C = 1;if (task0_tx_buf_temp & 0b10000000){OSTimeDly(10);}else{OSTimeDly(5);}task0_tx_buf_temp <<= 1;task0_dat_cur++;if (task0_dat_cur>config_com_task0_lengh + 1) //task0_dat_cur==10, bit[0:9]发送完{task0_level_count = 0;task0_dat_cur = 0;COM_C = 1;OSTimeDly(5);//延时1ms,准备下⼀次接收task[OSTCBCur].step = 0;}else{task[OSTCBCur].step = 6;}break;}case255: { //异常分⽀COM_C = 1;task0_wait_com_h_count++;task[OSTCBCur].step = 255;if (task0_wait_com_h_count>20) //持续⾼4ms,重新接收{task[OSTCBCur].step = 0;task0_wait_com_h_count = 0;}}else{task0_wait_com_h_count = 0;task0_wait_com_l_count++;if (task0_wait_com_l_count>80)//16ms{task0_bit_com_err = 1; //总线被拉低task0_wait_com_l_count = 0;}}break;}}}}#endif对于使⽤只需引⼊这两个⽂件周期性的调⽤宏 OSTimeTick()即可实现双向通信,主机从机是⼀样的代码通过宏config_single_wire_task0_mode 加以区别,这种⽅式对于时间并不需要很精准,⽐如你1ms调⽤⼀次,突然800us调⼀次,或1200us⼀次调⽤⼀次,并不会影响通信的正确率,但是你连续的⼤偏差肯定会出问题,只需保证调⽤周期偏差可以在20%以内即可,对于将其改进为多主异步就不需要周期调⽤了。
ttl电平串口隔离芯片TTL电平串口隔离芯片是一种常用于工业控制系统和通信设备中的电子元件。
它主要用于隔离不同电平之间的串口通信,保护设备免受电气干扰和电压浮动的影响。
本文将介绍TTL电平串口隔离芯片的基本原理、应用场景、特点以及相关技术参数。
一、TTL电平串口隔离芯片的基本原理TTL电平串口隔离芯片是通过内部的光电耦合器实现隔离功能的。
光电耦合器是一种将输入信号和输出信号通过光电转换的元件,能够将输入端的电气信号转换为输出端的光信号,从而实现电气隔离。
TTL电平串口隔离芯片通常包含一个光电耦合器、一个驱动电路和一个输出电路。
当输入端的TTL电平信号发生变化时,驱动电路会控制光电耦合器的工作状态,将输入信号转换为输出端的TTL电平信号,实现电气隔离。
二、TTL电平串口隔离芯片的应用场景TTL电平串口隔离芯片广泛应用于工业控制系统、通信设备、自动化设备等领域。
在工业控制系统中,由于设备之间的电气特性不同,可能存在电压浮动、电磁干扰等问题,使用TTL电平串口隔离芯片可以有效地隔离不同设备之间的串口通信,提高系统的稳定性和可靠性。
在通信设备中,由于通信线路长、环境复杂,电气隔离可以防止信号传输过程中的干扰,确保通信质量。
三、TTL电平串口隔离芯片的特点1. 电气隔离性能好:TTL电平串口隔离芯片采用光电耦合器实现电气隔离,具有良好的隔离效果,能够防止电气干扰和电压浮动对设备造成的影响。
2. 通信速率高:TTL电平串口隔离芯片支持高速串口通信,通信速率可达到Mbps级别,适用于高速数据传输的场景。
3. 功耗低:TTL电平串口隔离芯片采用低功耗设计,能够有效降低系统的能耗。
4. 安装方便:TTL电平串口隔离芯片采用DIP封装,安装方便,适用于各种电路板的集成。
四、TTL电平串口隔离芯片的技术参数1. 输入电压范围:3.3V-5V2. 输出电压范围:3.3V-5V3. 工作温度范围:-40℃~85℃4. 隔离电压:3000Vrms5. 通信速率:可达到1Mbps6. 封装形式:DIP-8TTL电平串口隔离芯片是一种常用的电子元件,具有良好的电气隔离性能和高速通信能力。
《驯服“数字光耦通讯电路”:实验室里的电路大作战》我在电子研发这行摸爬滚打了好些年,焊过电路板、调试过各种芯片,自认为也算个“老手”了。
可上次碰上要捣鼓数字光耦通讯电路,还是结结实实地栽了个跟头。
这数字光耦通讯电路啊,就像是电子设备里的“神秘信使”,负责在不同电路板块间精准、高速地传递信号,要是哪个环节出了岔子,信号丢包、乱码,设备立马就“哑巴”“失明”,变成一堆废铜烂铁。
好在实验室里有阿强、博士老张这俩得力助手,虽说一路波折不断、笑料百出,但我们仨还是咬着牙一头扎进这场紧张刺激的“电路大冒险”,到现在,实验室里电烙铁滋滋作响、示波器闪着诡异波形的场景还跟放电影似的,在我脑袋里循环播放。
那天一大早,项目主管就风风火火地拿着一沓数字光耦通讯电路的技术资料,“啪”地一下拍在我们实验台的桌上,神情严肃得像即将出征的将军,扯着嗓子说:“都给我瞧好了!这次给客户定制的智能控制系统,数字光耦通讯电路可是核心中的核心。
从元件选型到电路焊接,再到调试优化,每一步都得精准无误,谁要是掉链子,电路不稳定、信号传输有问题,项目延期、客户退货,咱都得吃不了兜着走!上头盯得紧,别不当回事。
”我瞅着那密密麻麻的资料,捅了捅阿强,小声嘀咕:“这电路,听着就像个严厉的监工,事儿又多又细,咱能整明白吗?”阿强挠挠头,满不在乎地摆摆手:“怕啥,不就是焊几个元件、连几根线,动手就是了。
”老张在旁边轻咳一声,推了推眼镜,一脸郑重:“你想得太简单了,光耦型号选错,传输速率、隔离电压达不到要求;焊接虚焊,电路时通时断,跟抽风似的,得严谨点儿。
”说干就干,第一步就是元件选型。
老张经验老到,戴上老花镜,翻开元件手册,手指顺着光耦参数表一行行划过,眼睛瞪得像铜铃,紧盯各项指标,嘴里还念念有词:“这光耦得选高速、高隔离度的,传输速率起码 10Mbps,隔离电压 5000V 以上,不然抗干扰能力太差,信号在传输途中就被‘吃掉’了,可别出岔子。
”我在一旁帮忙递资料、查库存,时不时叮嘱两句:“慢点儿,别看错参数了。
单线串行总线可传递相互隔离的电源和数据上网时间:2006年03月01日医疗和工业应用经常为了病人和设备操作员的人身安全要求隔离电压达到2500Vac或更高。
该隔离屏障不仅要把电源传输到传感器件上,而且还要传送往来于该器件上的数据。
每一个穿越隔离屏障的数据信号都要求隔离。
因此,在这些应用中,设计者可以通过选用串行总线而不是并行总线来节约成本。
串行总线包括SPI、I2C和Dallas单线串行总线。
Dallas单线总线只需要一根数据线(外加地线)来进行双向通讯。
由于光隔离器是单向器件,典型的单线传输需要两个光耦,数据流的每个方向上各用一个(而SPI和I2C总线则至少需要三个光耦)。
该单线串行总线不仅允许传输双向数据流,而且还可以寄生电源模式传递电源。
用一个隔离的变换器来为传感器件供电。
这样,绝大多数的设计需要两个光耦用于数据接口:一个光耦用于反馈到隔离的电源上,而一个变压器用于电源隔离。
该电路如图所示,电路中仅用了一个隔离变压器驱动器(U1)和一个单光耦(U3),把用于隔离的器件数减到了最少,而同时又保持了双线抽头设计。
U1提供隔离的和虚调节的电源,并能够使主控台把数据传送到隔离接口另一侧的单线串口设备上。
而接收通道上的单光隔离器使得主控台能够接收来自单线串口设备上的隔离数据。
注意下列的观察结果:在引脚V ISOI处(原理图的右上角),由U1和变压器T1产生的电压约为4.0V。
D1和D2实现变压器次级的半桥式整流。
在U1中,将FS和V CC连接起来,使得器件的开关频率为额定的860kHz。
电容器C2对输出进行滤波,使输出电平保持在正半周期。
R1用来对C2进行放电。
通过利用Dallas单线串行总线,接口电路能提供主控台微控制器和传感元件之间的隔离和双向通讯。
主控台微控制器通过控制U1的SD端的通断来向单线串口设备发送数据。
当不发送数据时,通常U1工作并向单线串口设备供电,对单线设备表示为逻辑高电平。
此时引脚VISOL处的电压约为4.0V。
专利名称:单线通信的方法及基于单线通信的单片机固件升级方法
专利类型:发明专利
发明人:程畔,许吉明
申请号:CN201410537882.5
申请日:20141013
公开号:CN104460406A
公开日:
20150325
专利内容由知识产权出版社提供
摘要:本发明涉及一种基于单线通信的单片机固件升级方法,其中主控芯片和辅助芯片之间通过第一通信协议进行通信,一个数据传输周期的通信帧包括顺序排列的发起位、读写位、地址位以及数据位,所述方法包括下列步骤:辅助芯片接收数据;判断数据中是否读取到升级命令,若是则升级固件;判断数据是否属于单片机的闪存中的向量区,若是,则将数据位中的数据暂存,否则将数据位中的数据存入闪存;判断数据中是否读取到升级完成命令,若是,则将暂存的数据写入向量区,固件升级完成并进行重启。
本发明还涉及一种基于单线通信的单片机固件升级系统,以及一种单线通信的方法。
本发明单片机只需一个引脚就能够满足通信需求,能够降低单片机的成本。
申请人:深圳市江波龙电子有限公司
地址:518057 广东省深圳市南山区科发路8号金融服务技术创新基地1栋8楼A、B、C、D、E、F1
国籍:CN
代理机构:广州华进联合专利商标代理有限公司
代理人:胡海斌
更多信息请下载全文后查看。