利用LIN节点的温度显示
发布时间:2008/5/29 0:00:00 访问次数:639
串行多路传输总线如can或lin可以解决车内因导线过多所带来的许多问题。低成本的lin总线很适合应用于车门等这些对传输速率要求不高的场合,最高速率为20kbit/s的lin总线完全可以满足要求。车外温度显示就是这样一个应用实例,外部温度传感器通常布置在后视镜中,数据产生于车门。但是实际显示位置是距此一定距离的车内,lin总线可使布线简单,因为lin节点只有3根导线:lin数据线、电源线和地线。
本应用介绍了温度显示从机节点的设计。本节点是车门模块的一个从机节点,整个车门模块还包括键盘节点。车门报文帧用后视镜报文响应的一个字节来表示温度(见表1)。作为主机节点的车身控制器一般每隔100ms发送一个含有后视镜标识符的报文帧头,报文响应有两个字节,其中一个字节用于表示温度,变化范围为-30 c~97.5 c,精度为0.5 c。此时,报文响应数据可以直接被温度显示节点读取(从机到从机通信),也可被主机节点读取,再发给其他从机节点。
硬件
温度显示节点微控制器(mcu)选用mc68hc908ey16,在写本文的时候,还没有得到这种微控制器,所以选用了mc68hc908az60a。使用mc68hc908ey16能够大幅度降低成本,这是因为mc68hc908ey16不仅管脚数目少,降低了成本,而且集成在片内的时钟发生器模块(icg)不需要晶体或陶瓷振荡器,可进一步降低成本。
图1是温度显示应用节点的电路框图。一个简单的lin节点除了微控制器mcu外,还需要两个芯片,即lin接口芯片(mc33399)和5v的电压调节器。在未来,这两个芯片将被一个芯片(sbc)所代替。电压调节器选用8个管脚的lt1121芯片,在mcu的控制下,该芯片关闭进入低功耗睡眠模式。芯片lt1121可由总线活动通过mc33399来唤醒。因为mc33399已包含30kohm lin总线上拉电阻,所以pcb板需要的元件就只有irq和reset管脚的上拉电阻、去耦电容和晶振及其相关元件。除此之外,还需要2个portc口的上拉电阻和一个9v稳压管,以便使用串口进入监控模式,实现片内flash存储器在线编程。软件开发是在装有目标接口的mmds开发板上进行的,没有利用实际的mc68hc908az60a。
由于led由mcu直接驱动,所以要注意避免端口管脚输出太大的电流,防止超过5v电压调节器规定的电流及功耗。但是要达到合适亮度的数字,所需电流对端口管脚来说太高,所以使用了fet缓冲。若选用220r的段电阻,每段电流为10ma,则整个数字电流就达到了80ma。但以25%占空比依次显示4个数字,那么每段平均电流就为2.5ma,则显示一个8段数字的电流只有20ma。例如显示88.0(共21有效段)所需最大总电流为52.5ma(2.5ma 21)。
mcu的idd是15ma,电压调节器的压降是9v(假设电池电压为14v),则lt1121的最大功耗计算如下:
功耗=9v (52.5ma+15ma)~610mw设环境温度为26 c,热阻温升为100c /w,则lt1121的最高温度计算如下式:
tj=tamb+610mw 100c /w=26+61=87 c此值在最高温度125 c范围之内。如果需要更大的段电流,就要选用段驱动器和具有更好散热效果的电压调节器。
mc68hc908az60a手册规定总的电源电流只有10ma,同时要间歇地检测各种条件下voh和vol值是否满足手册规定。当然,这些电压不是最重要的,本应用关心的是总电流不要太大以免造成硬件损坏。只要每个管脚的绝对最大电流能达到100ma就不会有危险。此时,最大的idd会低于100ma。以后的手册会将这些不必要的限制删除。
若在2s内总线没有活动,该节点就进入睡眠模式。当检测到这种状态时,mcu使mc33399的en管脚变为低电平,同时inh管脚输出低电平给lt1121调节器,使其进入等待模式并停止向mcu提供电源。恢复的总线活动会唤醒mc33399,使电压调节器向mcu提供电源。为了降低睡眠模式的电流,采用一个稳压二极管提供进入监控模式所要求的高电压。在睡眠模式时所测电流消耗为40 a,是mc33399和lt1121静态电流之和(两者都约为20 a)。
软件
温度显示模块使用motorola/metrowerks lin驱动程序,因此只要使用"lin_getmsg()"这样简单的代码就能获得位于后视镜的传感器产生的数据,进而处理所有的输入/输出动作。lin驱动程序的使用使温度节点的应用软件变得相当简单。为了响应主机的请求命令帧(id 0 3c),用户程序里必须包含函数void lin_command()。这就是说,比如,主机是如何要求所有的从节点进入低功耗等待或睡眠模式的。在这项应用中,当总线没有活动时,这个函数就仅仅相当于一个空循环,即进入睡眠模式。只要所有变量都已经被声明了,就初始化config和i/o寄存器。config1寄存器设成0 71,禁用看门狗(cop),config2寄存器设成0 19,将mcu设置成mc68hc908az60a(相对于as60a)。由于中断被允许,因此只要通过lin_init()进行了初始化,lin驱动程序就能起作用。主循环使用了可编程中断定时器(pit),使重复频率基于8mhz的晶振就能达到200hz。每5ms pit的溢出标志就被置位一次,主循环就将二进制输入数据转换成7段码格式。这个200hz的频率还被用来
串行多路传输总线如can或lin可以解决车内因导线过多所带来的许多问题。低成本的lin总线很适合应用于车门等这些对传输速率要求不高的场合,最高速率为20kbit/s的lin总线完全可以满足要求。车外温度显示就是这样一个应用实例,外部温度传感器通常布置在后视镜中,数据产生于车门。但是实际显示位置是距此一定距离的车内,lin总线可使布线简单,因为lin节点只有3根导线:lin数据线、电源线和地线。
本应用介绍了温度显示从机节点的设计。本节点是车门模块的一个从机节点,整个车门模块还包括键盘节点。车门报文帧用后视镜报文响应的一个字节来表示温度(见表1)。作为主机节点的车身控制器一般每隔100ms发送一个含有后视镜标识符的报文帧头,报文响应有两个字节,其中一个字节用于表示温度,变化范围为-30 c~97.5 c,精度为0.5 c。此时,报文响应数据可以直接被温度显示节点读取(从机到从机通信),也可被主机节点读取,再发给其他从机节点。
硬件
温度显示节点微控制器(mcu)选用mc68hc908ey16,在写本文的时候,还没有得到这种微控制器,所以选用了mc68hc908az60a。使用mc68hc908ey16能够大幅度降低成本,这是因为mc68hc908ey16不仅管脚数目少,降低了成本,而且集成在片内的时钟发生器模块(icg)不需要晶体或陶瓷振荡器,可进一步降低成本。
图1是温度显示应用节点的电路框图。一个简单的lin节点除了微控制器mcu外,还需要两个芯片,即lin接口芯片(mc33399)和5v的电压调节器。在未来,这两个芯片将被一个芯片(sbc)所代替。电压调节器选用8个管脚的lt1121芯片,在mcu的控制下,该芯片关闭进入低功耗睡眠模式。芯片lt1121可由总线活动通过mc33399来唤醒。因为mc33399已包含30kohm lin总线上拉电阻,所以pcb板需要的元件就只有irq和reset管脚的上拉电阻、去耦电容和晶振及其相关元件。除此之外,还需要2个portc口的上拉电阻和一个9v稳压管,以便使用串口进入监控模式,实现片内flash存储器在线编程。软件开发是在装有目标接口的mmds开发板上进行的,没有利用实际的mc68hc908az60a。
由于led由mcu直接驱动,所以要注意避免端口管脚输出太大的电流,防止超过5v电压调节器规定的电流及功耗。但是要达到合适亮度的数字,所需电流对端口管脚来说太高,所以使用了fet缓冲。若选用220r的段电阻,每段电流为10ma,则整个数字电流就达到了80ma。但以25%占空比依次显示4个数字,那么每段平均电流就为2.5ma,则显示一个8段数字的电流只有20ma。例如显示88.0(共21有效段)所需最大总电流为52.5ma(2.5ma 21)。
mcu的idd是15ma,电压调节器的压降是9v(假设电池电压为14v),则lt1121的最大功耗计算如下:
功耗=9v (52.5ma+15ma)~610mw设环境温度为26 c,热阻温升为100c /w,则lt1121的最高温度计算如下式:
tj=tamb+610mw 100c /w=26+61=87 c此值在最高温度125 c范围之内。如果需要更大的段电流,就要选用段驱动器和具有更好散热效果的电压调节器。
mc68hc908az60a手册规定总的电源电流只有10ma,同时要间歇地检测各种条件下voh和vol值是否满足手册规定。当然,这些电压不是最重要的,本应用关心的是总电流不要太大以免造成硬件损坏。只要每个管脚的绝对最大电流能达到100ma就不会有危险。此时,最大的idd会低于100ma。以后的手册会将这些不必要的限制删除。
若在2s内总线没有活动,该节点就进入睡眠模式。当检测到这种状态时,mcu使mc33399的en管脚变为低电平,同时inh管脚输出低电平给lt1121调节器,使其进入等待模式并停止向mcu提供电源。恢复的总线活动会唤醒mc33399,使电压调节器向mcu提供电源。为了降低睡眠模式的电流,采用一个稳压二极管提供进入监控模式所要求的高电压。在睡眠模式时所测电流消耗为40 a,是mc33399和lt1121静态电流之和(两者都约为20 a)。
软件
温度显示模块使用motorola/metrowerks lin驱动程序,因此只要使用"lin_getmsg()"这样简单的代码就能获得位于后视镜的传感器产生的数据,进而处理所有的输入/输出动作。lin驱动程序的使用使温度节点的应用软件变得相当简单。为了响应主机的请求命令帧(id 0 3c),用户程序里必须包含函数void lin_command()。这就是说,比如,主机是如何要求所有的从节点进入低功耗等待或睡眠模式的。在这项应用中,当总线没有活动时,这个函数就仅仅相当于一个空循环,即进入睡眠模式。只要所有变量都已经被声明了,就初始化config和i/o寄存器。config1寄存器设成0 71,禁用看门狗(cop),config2寄存器设成0 19,将mcu设置成mc68hc908az60a(相对于as60a)。由于中断被允许,因此只要通过lin_init()进行了初始化,lin驱动程序就能起作用。主循环使用了可编程中断定时器(pit),使重复频率基于8mhz的晶振就能达到200hz。每5ms pit的溢出标志就被置位一次,主循环就将二进制输入数据转换成7段码格式。这个200hz的频率还被用来
上一篇:低电压下工作的LED闪烁器