完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
CAN总线是德国Bosch公司为解决现代汽车中多传感器和控制器之间的数据交换而开发的一种串行总线。由于它通信速率高、通信距离远、抗干扰能力强,因而适合高干扰环境。目前CAN总线已广泛应用于背景干扰较强的控制系统之间的实时通信中。
对于多点悬浮控制,控制器的数目很可能不止一个,控制器所处的电磁环境一般也比较恶劣。因此,控制器之间的通信方式和通信可靠性是一个必须考虑的问题。由CAN总线组成的网络具有结构简单、可靠性高的特点,可以实现点对点、一点对多点及全局广播的特点,因此,对于悬浮控制来说,使用CAN网络作为通信网络是一个比较理想的选择。另一方面,处于复杂工作环境下的数字控制器很有可能在电磁干扰或电源波动的情况下进入“飞车”状态,从而使一点或多点悬浮失败。这就要求在CAN网络中设计一个上层的监督节点对这些网络中的节点进行有效的监督和实时调整。 用计算机的并行接口配合专用的CAN驱动芯片设计的CAN网络监视器/调试器具有实现方便、界面友好的特点,但在实际的控制现场,这种基于计算机的监控系统具有携带不方便和造价高等问题。因此,设计一个便携式的CAN网络监督/调试器具有较大的实际意义。本文介绍一种基于TMS320LF2407A DSP的便携式CAN网络监控终端。它具有使用简单、界面友好、体积小的特点,适合于磁浮列车悬浮控制器的现场监督和调试。 1 系统简介 对于多点悬浮控制来说,为了降低风险和提高控制灵活性,1个悬浮点一般由1个单独的控制器控制,各个悬浮点和监控节点的关系如图1所示。CAN监控终端也是CAN网络中的一个普通节点,通过双绞线连入整个网络。 对于每个悬浮点,需要监控的参数一般包括电流、间隙、加速度以及其他一些中间参数等。根据不同的控制算法,监控的参数个数也不一样。监控节点的任务就是向其中的某个悬浮节点发出发送允许命令,该悬浮节点在接收到这个命令后,就定时地将传感器和控制器当前的参数打包发送到CAN总线上,然后再由监控节点监听这个节点发送的数据,并在显示屏上将接收到的参数显示出来。长时间接收还可以将某些参数,如电流和间隙,以曲线的形式描绘出来,用于对悬浮控制算法的评估。如果需要对当前被监控的控制器的某些参数进行修改,也可以通过CAN监控终端的人机接口向目标节点发送修改命令。 在实现上,CAN监控终端的主控芯片选用TI公司的TMS320LF2407A型DSP。该DSP除了具备片内资源丰富、运算速度快、成本低、功耗小等特点外,还具备片上CAN模块,使用方便。数据输出用1块240×128的LCD液晶屏来实现,可以把各个参数变化的趋势用曲线描绘出来,灵活性好。用户输入采用行列扫描式键盘,使硬件实现和软件编程均比较方便。 2 硬件设计 系统的硬件组成框图如图2所示。从图中可以看出,TMS320LF2407A DSP是整个电路的核心部件。它是面向实时控制的高性能16位定点DSP,具有32K字的片内Flash程序存储器和2.5K字的片内RAM,运算速度可以达到40MIPS,并带有片上串行通信接口和CAN通信接口等。这些特点为CAN监控终端的设计和实现带来了很大便利。在硬件实现上,考虑到系统对体积和功耗的要求,将所有的DSP程序和LCD的字库均通过JTAG口直接烧写在DSP的片内Flash中,通电后程序即可直接在片内Flash中运行。DSP的晶振频率选择6MHz,通过DSP片内的PLL锁相环4倍频后使DSP的工作主频达到24MHz。 由于DSP片内备有CAN控制器模块,因此,监控终端的CAN模块设计很简单,只需在DSP的CANTX和CANRX引脚上接1个CAN驱动芯片即可。这里选用的CAN驱动芯片是PCA82C250。 DSP的供电电压为3.3V,而外围芯片基本上都是5V,如果将它们直接相连必然会导致电平冲突。解决的办法是:在DSP的数据总线和外围接口总线之间用1片LVC4245作为双向缓冲器。在进行数据交换时,DSP的R/W信号控制着LVC4245的数据流向。 LCD选用240×128点阵的SMG240128A单色液晶屏。它的显示有效面积比较大,适合于显示曲线等信息,底层驱动的编写也比较容易。LCD与DSP的接口采用模拟口线方式,即用2片74HC573分别锁存数据总线和控制总线的数据,模拟LCD的驱动时序。LCD的几个状态位直接由DSP的I/O引脚读入。 键盘由0~9、A~F、以及SHIFT和ENTER共18个键组成,因此在硬件设计上采用5×4的行列扫描方式:即由74HC573提供5个输出行线,由74HC244提供4个列输入,由DSP提供行列扫描时序。考虑到电平匹配问题,74HC573和74HC244与DSP数据总线之间的连接也是通过LVC4245缓冲。 LCD和键盘接口的74HC573以及74HC244芯片均由1片GAL通过对DSP的地址总线进行译码实现选通,其电路简单,灵活性好。 出于便携式的要求,系统采用电池供电方式。这里采用5节可充电5号电池作为电源,正常供电电压为5~7V,正好符合电源芯片TPS7350的供电要求。由于系统内需要3.3V和5V二种供电电源,故这里选用1片低压差芯片TPS7350作为5V电源的供电芯片,用另一片低压差芯片TPS7333作为3.3V电源的供电芯片。为防止电池电量不足时导致意外停机事故,这里还采用1片LM311构建了一个电池电量报警电路,以便在电池电压低于安全电压时点亮LED报警提示。为了操作方便,所有的硬件电路以及电池等均安装在一个便携的塑料外壳中。 3 软件设计 在图1所示的CAN网络结构图中,数据流向大致可以分为二类:各悬浮节点之间的通信和悬浮节点与监控节点之间的通信。由于悬浮节点之间的通信与监控终端没有直接关系,可以不予考虑。需要考虑的是各悬浮节点与监控终端的通信,这就要求在组成CAN网络时就必须制定一个悬浮节点和监控终端间的通信协议。在实现时,具体协议如下: (1)CAN监控终端的接收标识符为0,其他悬浮控制节点的标识符均不得与之冲突;全部节点使用统一的波特率(50Kbps或500Kbps);数据包的长度统一为8B。 (2)CAN监控终端向悬浮节点的数据传送由监控终端的拨码开关指定数据包的标识符,各悬浮节点通过数据包的标识符和自身的本地标识符比较以确定是否接收该数据包。 (3)CAN监控终端的监听是开放的,并不需要接收的数据包的标识符与自身的标识符一致。但数据包内第1个字节指明了发送该数据包的悬浮控制器的标号。如果该标号与拨码开关指定的标号一致,则继续处理其他字节的内容;否则,丢弃该包。数据包内第2字节表示参数的类型,其余字节是浮点形式的参数数据。 (4)在系统开始运行时,各悬浮节点并不向CAN监控终端发送数据,只有在CAN监控终端向某个节点发出“发送允许”命令之后,该节点才定时地向CAN监控终端发送上传数据。如果CAN监控终端要监听其他节点的数据,则需先禁止当前节点的数据发送,再向其他节点发出“发送允许”命令。这样可以有效减小CAN总线上的数据流量。 上述协议可以有效地维持CAN网络中的数据通信秩序。 从实际出发,要求软件尽量简单,界面尽量友好,便于操作。在实现时,为充分利用LCD的显示能力,这里采用菜单的方式提示用户操作。完成后的软件界面如图3所示。 程序采用分层的程序结构。最底层是一些硬件驱动程序,如键盘扫描、LCD状态读取和LCD数据写入等。在这些底层驱动程序的基础上再组织一些上层子程序供主程序调用。在编程语言的选择上,考虑到程序的结构相对比较复杂,程序主体采用C语言编程,只有少部分涉及到DSP一些底层操作的部分才使用汇编语言。软件的主体流程图如图4所示。 初始化包括对CAN控制寄存器的初始化以及屏幕初始化,并在这之后读取拨码开关的状态,确定波特率及通信对象,向被监控节点发出“发送允许”命令等。 程序主体是一个大循环。在初始化之后便不断扫描键盘。首先判断是否有键按下,如果用户没有操作,则检查CAN模块是否接收到数据。如果没有接收到数据,则继续扫描键盘。如果接收到了数据(即相应的CAN接收中断标志位置位),则将接收到的数据包按上述协议进行分析、整合处理,然后在屏幕上显示出接收到的数值;同时,在曲线的对应位置上描点,完成曲线的绘制。如果在键盘扫描过程中发现有按键按下,则分析按键的类别,然后转相应的子程序处理。处理完毕再返回主程序。 这里数据接收并不采用中断驱动方式,因为LCD的响应速度较慢。当LCD的响应速度低于CAN接收数据的速度时,会形成中断嵌套,时间长了就会出现堆栈溢出。此外,采用中断方式在数据量大时会出现DSP无暇顾及用户键盘输入的现象。实践表明,采用查询的方式可以很好地发挥DSP和LCD的固有能力,而且整体响应速度也比中断方式快。 LCD显示涉及的子程序比较多,分层也很多。在编写程序时首先在DSP的Flash ROM里定义一个段,将LCD显示过程中可能涉及的字符、汉字等点阵数据做成一个库,放入段内,在使用时再通过ROM访问指令读取。 曲线的绘制过程如下:首先确定坐标的原点位置、X方向和Y方向的最大坐标以及输入数值的范围,然后在内存中开辟一个同X坐标点数一样大小的缓冲区BUFF,用于记忆已经绘制的各点的坐标;同时设定一个X指针,用于存储当前的X坐标。当接收到新的数据,确定好Y方向的坐标后,首先查找BUFF,得到原来显示在该X位置的点的Y坐标,将这个位置上的点清除,然后在新的Y坐标上描点,最后在BUFF的相应X位置上记录下新描点的Y坐标值,此时便完成了一个点的绘制。后面还要调整屏幕上的指针以标明当前显示的X坐标。当绘制到X方向的最大位置时,再返回X=0的位置继续绘图。 屏幕下方有关菜单的操作也是采用树结构实现的,这里不再详述。 CAN监控终端向悬浮节点发送数据的过程一般是伴随在相应的菜单操作并按下ENTER键生效后进行的。在每次数据发送之前,程序都需要读入拨码开关的状态,以确定通信的波特率和通信对象的标识符。在实现上,拨码开关的最高位控制着波特率,后面7位则决定了通信的发送标识符。 4 结束语 使用表明,这种基于TMS320LF2407A DSP的CAN总线监控终端在多悬浮控制器组成的网络中可以发挥很好的监控和调试作用,其结构小巧、界面友好,使用相当方便。 |
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2574 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2371 浏览 5 评论
3228 浏览 3 评论
2843 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2796 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
681浏览 1评论
915浏览 0评论
1039浏览 0评论
678浏览 0评论
510浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-31 02:12 , Processed in 1.363284 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号