基于Microchip单片机及收发器实现的低成本LIN总线
线的通信可以通过配置单片机的EUSART来实现。每次通信都由主节点启动,此处不考虑从节点到从节点的通信。总线的配置也由主节点来实现,具体波特率可以通过波特率控制寄存器来实现。这里采用9 600的波特率。
标识符不是一个节点的地址,而是一个报文的描述符。当主节点发送一个0x3C的命令后,再发送8 B的00H,总线就进入休眠模式。在休眠模式下,总线处于空闲状态,因此任何一个从节点都可以唤醒总线。
主节点采用高精度的石英晶振作为时钟源,可以产生低误差的时钟信号。在这里,要把主节点设置为异步半双工通信模式,8 bit数据模式。时钟选择为内部时钟。
由于EUSART有“发送间隔字符位(SENDB)”,可以在每次发送数据前发送同步间隔字符,这样可以省掉不少软件开销,使单片机可以致力于其他逻辑的运算。
4.2.2 从节点
从节点不需要系统配置的信息,所有从节点接收所有报文,然后再判断是否需要执行。
从节点不需要外接石英晶振,可以用单片机内部自带的RC震荡器实现。MICROCHIP的中端8位单片机大多数都内带高精度的RC震荡器,在常温下(25℃),经过校准可以达到±1%的精度。
每个单片机在出厂时都经过校准,并把校准字写在Flash空间的最后一位。在程序开始运行时,会把校准值装载到W寄存器里。在程序的第一条指令中执行MOVWF OSCCAL,即可将W寄存器里的值送到内部RC震荡器的校准寄存器里,从而实现校准。
从节点先检测总线电平,当长时间的隐性电平结束,出现大于10个位定时的显性电平后,开始数5个下降沿的时间,用时间值除以8,就可以算出波特率。然后从总线上读取数据,解码ID,处理响应。
EUSART支持波特率的自动检测和校准,可以使软件代码大量简化。从节点可以在总线空闲时进入休眠状态,当从节点检测到主节点发出的同步间隔时,可以从休眠状态唤醒。
当从节点被其他外部中断唤醒时(例如A/D转换完成,外部IO电平变化等),从节点可以唤醒休眠的总线。
如果从节点的功能比较简单,工作电流比较小,可以通过收发器MCP2021的参考电压输出端来供电。MCP2021有两种型号,参考电压的输出分别为5 V和3.3 V,适应5 V和3.3 V的单片机。这个参考电压的输出电流最大为50 mA,所以不适合工作电流比较大的场合[3-4]。
单片机 相关文章:
- FPGA的DSP性能揭秘(06-16)
- 基于单片机通用引脚的软件UART设计(10-16)
- 分时操作系统思想在单片机中的具体应用 (10-30)
- 基于AT89C51+DSP的双CPU伺服运动控制器的研究(05-26)
- 关于RTX51 TINY的分析与探讨(05-30)
- 基于MC9S12DGl28单片机的智能寻迹车设计(04-03)