CAN 协议即控制器局域网络 (Controller Area Network)简称,由研发和生产汽车电子产品著称的德国 BOSCH 公司开发,成为国际标准ISO11519以及ISO11898。
移动机器人是一种能够感知外部环境,在有障碍物的环境中能够实现动态决策与规划,从而完成避障等多种功能的综合系统。机器人系统通常分为机构本体和控制系统两部分,控制系统的作用是根据用户的指令对机构本体进行...
一、什么是串口通讯? 串行通讯是指仅用一根接收线和一根发送线就能将数据以位进行传输的一种通讯方式。尽管串行通讯的比按字节传输的并行通信慢,但是串口可以在仅仅使用两根线的情况下就能实现数据的传输。 典型的串口通信使用3根线完成,分别是地线、发送、接收。由于串口通信是异步的,所以端口能够在一根线上发送数据同时在另一根线上接收数据。串口通信最重要的参数是波特率、数据位、停止位和奇偶的校验。对于两个需要进行串口通信的端口,这些参数必须匹配,这也是能够实现串口通讯的前提。 图1:串行通讯示数据传输意图 二、串口通讯的通讯协议? 最初数据是模拟信号输出简单过程量,后来仪表接口出现了RS232接口,这种接口可以实现点对点的通信方式,但这种方式不能实现联网功能,这就促生了RS485。 我们知道串口通信的数据传输都是0和1,在单总线、I2C、UART中都是通过一根线的高低电平来判断逻辑1或者逻辑0,但这种信号线的GND再与其他设备形成共地模式的通信,这种共地模式传输容易产生干扰,并且抗干扰性能也比较弱。所以差分通信、支持多机通信、抗干扰强的RS485就被广泛的使用了。 RS485通信最大特点就是传输速度可以达到10Mb/s以上,传输距离可以达到3000米左右。大家需要注意的是虽然485最大速度和最大传输距离都很大,但是传输的速度是会随距离的增加而变慢的,所以两者是不可以兼得的。 三、串口通讯的物理层 串口通讯的物理层有很多标准,例如上面提到的,我们主要讲解RS-232标准,RS-232标准主要规定了信号的用途、通讯接口以及信号的电平标准。 在上面的通讯方式中,两个通讯设备的"DB9接口"之间通过串口信号线建立起连接,串口信号线中使用"RS-232标准"传输数据信号。由于RS-232电平标准的信号不能直接被控制器直接识别,所以这些信号会经过一个"电平转换芯片"转换成控制器能识别的"TTL校准"的电平信号,才能实现通讯。 下图为DB9标准串口通讯接口: DB9引脚说明: 上表中的是计算机端的DB9公头标准接法,由于两个通讯设备之间的收发信号(RXD与TXD)应交叉相连,所以调制调解器端的DB9母头的收发信号接法一般与公头的相反,两个设备之间连接时,只要使用"直通型"的串口线连接起来即可。 串口线中的RTS、CTS、DSR、DTR及DCD信号,使用逻辑 1表示信号有效,逻辑0表示信号无效。例如,当计算机端控制DTR信号线表示为逻辑1时,它是为了告知远端的调制调解器,本机已准备好接收数据,0则表示还没准备就绪。 四、波特率 波特率是指数据信号对载波的调制速率,它用单位时间内载波调制状态改变的次数来表示; 比如波特率为9600bps;代表的就是每秒中传输9600bit,也就是相当于每一秒中划分成了9600等份。 因此,那么每1bit的时间就是1/9600秒=104.1666...us。约0.1ms。既然是9600等份,即每1bit紧接着下一个比特,不存在额外的间隔。两台设备要想实现串口通讯,这收发端设置的波特率必须相同,否则是没办法实现通讯的。 收发波特率一致可以实现通讯: 收发波特率不一致,导致RX端不能正常接收: 五、串口通讯的数据结构 起始位: 起始位必须是持续一个比特时间的逻辑0电平,标志传输一个字符的开始,接收方可用起始位使自己的接收时钟与发送方的数据同步。 数据位: 数据位紧跟在起始位之后,是通信中的真正有效信息。数据位的位数可以由通信双方共同约定。传输数据时先传送字符的低位,后传送字符的高位。 奇偶校验位: 奇偶校验位仅占一位,用于进行奇校验或偶校验,奇偶检验位不是必须有的。如果是奇校验,需要保证传输的数据总共有奇数个逻辑高位;如果是偶校验,需要保证传输的数据总共有偶数个逻辑高位。 停止位: 停止位可以是是1位、1.5位或2位,可以由软件设定。它一定是逻辑1电平,标志着传输一个字符的结束。 空闲位: 空闲位是指从一个字符的停止位结束到下一个字符的起始位开始,表示线路处于空闲状态,必须由高电平来填充。 六、单双工通讯 单工: 数据传输只支持数据在一个方向上传输; 半双工: 允许数据在两个方向上传输,但某一时刻只允许数据在一个方向上传输,实际上是一种切换方向的单工通信,不需要独立的接收端和发送端,两者可合并为一个端口; 全双工: 允许数据同时在两个方向上传输,因此全双工通信是两个单工方式的结合,需要独立的接收端和发送端。 七、STM32中的串口通讯 STM32串口通信接口有两种,分别是:UART(通用异步收发器)、USART(通用同步异步收发器),对于大容量STM32F10x系列芯片,分别由3个USART和两个UART。 TXD:数据发送引脚;RXD:数据输入引脚 对于两芯片的间的连接,两个芯片GND共地,同时TXD和RXD交叉连接,这样两个芯片间可进行TTL电平通信。 但如果对于芯片和PC机相连,除了共地条件外,不能使用如上的直接交叉连接,虽然两者都有TXD和RXD引脚,但通常PC机使用的是RS232接口(9针),通常是TXC和RXD经过电平转换得到,故如果要使芯片与PC机的RS232接口直接通信,需要将芯片的输入输出端口也电平转换为RS232类型,再交叉连接,二者的电平标准不同: 单片机的点评标准(TTL电平):+5V表示1,0V表示0; RS232电平标准:+15/+13V表示0,-15/-13表示1。 因此单片机与PC机进行串口通信应该遵循:在单片机串口与上位机给出的RS232口之间,通过电平转换电路实现TTL电平与RS232电平间的转换. 如果使用USB转串口也可以实现串口通讯,USB转串口电路图如下所示 STM32串口通讯代码 STM32中串口通讯已经给大家建好了相应的库函数,大家在使用和配置串口的时候直接进行调用库函数和配置就行了,请大家参照一下代码: 1、初始化结构体代码 typedef struct { uint32_t USART_BaudRate; // 波特率 uint16_t USART_WordLength; // 字长 uint16_t USART_StopBits; // 停止位 uint16_t USART_Parity; // 校验位 uint16_t USART_Mode; // USART 模式 uint16_t USART_HardwareFlowControl; // 硬件流控制 } USART_InitTypeDef; 2、NVIC配置中断优先级 NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; /* 嵌套向量中断控制器组选择 */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /* 配置USART为中断源 */ NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART_IRQ; /* 抢断优先级*/ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; /* 子优先级 */ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; /* 使能中断 */ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /* 初始化配置NVIC */ NVIC_Init(&NVIC_InitStructure); } 3、USART配置函数 void DEBUG_USART_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; /* 第一步:初始化GPIO */ // 打开串口GPIO的时钟 DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE); // 将USART Tx的GPIO配置为推挽复用模式 GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure); // 将USART Rx的GPIO配置为浮空输入模式 GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure); /* 第二步:配置串口的初始化结构体 */ // 打开串口外设的时钟 DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE); // 配置串口的工作参数 // 配置波特率 USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE; // 配置 针数据字长 USART_InitStructure.USART_WordLength = USART_WordLength_8b; // 配置停止位 USART_InitStructure.USART_StopBits = USART_StopBits_1; // 配置校验位 USART_InitStructure.USART_Parity = USART_Parity_No ; // 配置硬件流控制 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // 配置工作模式,收发一起 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; // 完成串口的初始化配置 USART_Init(DEBUG_USARTx, &USART_InitStructure); /*--------------------------------------------------------*/ // 串口中断优先级配置 NVIC_Configuration(); // 使能串口接收中断 USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE); /*--------------------------------------------------------*/ /* 第三步:使能串口 */ // 使能串口 USART_Cmd(DEBUG_USARTx, ENABLE); } 声明: 本号对所有原创、转载文章的陈述与观点均保持中立,推送文章仅供读者学习和交流。文章、图片等版权归原作者享有,如有侵权,联系删除。
目录 1.测试系统原理 2.各主要模块的实现 2.1采集模块的实现 2.2中央处理模块实现 3.测试内容 4.实验结果 随着科技的进步,电动汽车技术也得到了迅速的发展;相比内燃机汽车,电动汽车具有零排放、高能量效率、低噪声、低热辐射、易操纵和易维护等优点,将是未来汽车发展的方向,也是现行研究的热点。电动汽车的动力电池有如下三类:燃料电池、蓄电池和超级电容,而对于车载用电源,为达到较高功率和能量,超级电容往往采用多块单体串联的形式。但随着电容串级的提升,电池整体电压也随之提高,然而这样高峰值的电压引起的波动会带来强烈的电磁干扰,为电容组件的检测带来很大的困难。同时由于串联超级电容往往采用大电流充放电(通常在50A~150A之间),电压、电流变化十分迅速,这样迅速的充放电速度和幅度带来的噪音影响也是十分巨大。因此针对超级电容特殊的工作状况,本文给出了一种利用单片机设计的超级电容电池测试系统方案。 1.测试系统原理 超级电容管理系统可实现对超级电容工作电流和电压的实时采集,整体结构框图如图1所示。系统共由3个主要模块组成:现场电压、电流、采集与调理模块(即采集模块),信号隔离与MCU信号处理模块(即中央处理模块),电源管理模块。采集模块内,霍尔电压、霍尔电流传感器分别对超级电容电压和电流进行现场采集,采集信号经过仪用放大,然后转化为4mA~20mA电流信号并发送到中央处理模块。中央处理模块内,采集模块发送的4mA~20mA电流信号,经过电流电压变换后,再进行隔离放大、AD转换并送到MCU;MCU将数据处理后通过CAN接口传送到上位机;当检测到数据异常时MCU输出故障信号,以便工作人员能即时采取措施。电源管理模块为各功能模块提供稳定隔离的电压。增加RS232通信串口,以便MCU程序烧录。 图1 超级电容管理系统整体结构图 2.各主要模块的实现 本测试系统分别采用四块电路板,以实现三大功能模块——采集模块、中央处理模块和电源管理模块。即电压采集与初调理板、中央处理板以及电源板。下边着重介绍电压、电流采集模块和中央处理模块的实现。 2.1采集模块的实现 采集模块包括总线电流的采集、总线电压的采集两个部分,图2即为电流采集原理图。采用霍尔电流传感器隔离被测系统,比传统的基于电阻采样的电流分压电路精度高,安全性能好,抗干扰能力强。本文选用的是基于磁补偿原理的霍尔闭环电流传感器CSNK591,测量范围±1200A,线性精度达到0.1%,总体精度达到0.5%,响应速度小于1μs,完全满足了系统的要求。采集信号经精密电阻转变为电压信号,再由仪用放大器放大为±5V双极性电压信号。系统选用AD620BR仪用放大芯片,该芯片在增益较低时具有较大的共模抑制比(G=10时,共模抑制比最小为100dB),能较强地抑制由于温度、电磁噪声等因素引起的共模干扰。放大信号通过OP27GS芯片抬升至0~10V单极性信号,经过射极跟随器送至变送器XTR110KU,转为4mA~20mA的电流信号送到中央处理模块。之所以将采集信号转变为4mA~20mA电流信号,是考虑到与工业接口标准的统一,并且采用电流传输抗干扰能力强。 图2 电流采集模块原理图 总线电压的采集同样选用基于磁补偿原理的闭环霍尔电压传感器VSM025A,实现原理与电流采集相同。 2.2中央处理模块实现 中央处理模块是测试系统的核心部分,包括MCU和AD单元、模拟信号二次调理单元、故障输出单元和CAN接口单元等,如图3所示。 图3 电压信号调理支路 采集模块输入的4mA~20mA电流信号首先经过模拟信号二次调理单元,进行信号的变送、隔离、滤波和放大。模拟信号的隔离方式很多,常用的方法为隔离放大器、线性光耦以及电压频率转化,其中隔离放大器和线性光耦隔离电压高,抗干扰能力强,线性度高,但线性光耦隔离线路复杂,需要调整的参数较多,并且当输入电压比较小时,线性度较差。本文选用的是高精度ISO124U隔离运算放大器完成输入模拟信号的隔离,隔离后的信号经5阶Butterworth低通滤波MAX280电路过滤高频干扰,随后通过一射极跟随器送出。 二次调理后的采集信号,经过12位高速AD7891送至MCU。MCU对数据进行处理并将数据通过CAN接口传送到上位机。单片机选用STC系列8位高速单片机STC89C58RD+。该单片机具有强抗干扰性,4kV快速脉冲干扰(EFT)和高抗静电(ESD),可通过6000V静电,很好地满足了超级电容高电压大电流的工作环境。该单片机可实现6时钟模式,在本系统采用24M晶振情况下,单片机工作频率可达到4MIPS,相当于普通51系列单片机运行速度的4倍。 另外,测试系统设置3通道故障诊断输出,能显示欠压、过压、过流等状态。测试系统与上位机采用抗干扰能力强、稳定性好的CAN通信方式,保证测试系统送入上位机数据的可靠性。 实际系统有模拟±15V,数字±5V,模拟±12V供电需求,电源管理模块在提供系统各部分所需电压的同时,进行模拟、数字电路隔离,从而避免两类电压互相影响。各部分电源入口都增加了TVS保护,防止浪涌电压对系统的损坏。同时在诸多电源入口处设置相应的滤波电路,如在AD供电入口处增加了π形滤波电路,较好地消除电源信号对所供电路的干扰。 而且外部连线均采用屏蔽线,能较强地屏蔽线路传输中的电磁干扰。所有电流板使用型材铝盒包装,采用标准航空接头与外界联线,这样在保护电路板的同时隔离外界磁场。 3.测试内容 实验选定以70A和150A两种模式对两组串联的超级电容组件进行充放电测试。首先,对电容进行恒流充电,当总线电压达到300V时,转为恒压充电,当总线电流降低到10A时进行70A恒流放电,如此循环测试5个周期。 4.实验结果 图4、图5、图6给出了两种情况下的测试曲线对比。其中,图4表示70A和150A两种标准测试情况下,电流的变化曲线。图5、图6表示两种情况下,电压曲线特性。可以看出两者的匹配程度很好。电压测试精度高于电流测试精度,这是由于一方面充放电系统本身电压比电流控制精度要高,另一方面电流传感器安置在电容箱体内并且紧靠单体电容,电容充放电时产生的噪声干扰比较严重。同时,霍尔电流传感器孔径较大,穿过电流总线后仍有一定空隙,在一定程度上影响了测试精度。对比各组电流曲线,可以看出随着电流的增大,测试结果的相对误差减小,但绝对误差保持一致,不超过3A。 图4 70A与150A充放电电流测试对比曲线 图5 70A充放电电压测试对比曲线 图6 150A充放电电压测试对比曲线 总结 以上就是基于单片机的车载超级电容测试系统设计介绍了。该系统采用基于磁补偿原理的霍尔闭环电流、电压传感器采集总线信号,以抗高压脉冲干扰的STC51高速单片机进行信号处理,并采用仪用放大、电流传输、模拟信号隔离、5阶低通滤波等措施,尽可能地减少信号传输过程的噪音。通过对超级电容组件充放电测试,表明本系统具有抗干扰能力强、检测精度高等优点,能很好的满足车载超级电容高电压大电流环境下的测试要求。