在CAN总线上的所有节点必须有相同的波特率。CAN协议使用“反向不归零(NRZ)”编码,这个编码不能对数据串的时钟进行编码。因此,接收节点的时钟必须与发送节点的时钟同步。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
由于振荡器或发送时钟可能随节点的不同而改变,所以接收器必须要有与发送时钟边沿同步的锁相回路(PLL),使接收器时钟同步。因为数据是NRZ代码,有必要加一个填充位以确保至少每6个时钟周期后产生一个脉冲边沿,使数据锁相回路(DPLL)同步。
PIC<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />18F4580单片机芯片的位定时时间分成许多称做时间当量(TQ)的最小时间周期所组成时间段。
总线的定时功能是在位时间帧中执行的,例如与自身振荡器同步、网络传输延时补偿和采样节点,都是通过DPLL的可编程位定时逻辑来配置。
CAN总线上的所有器件秘须使用相同的位率。然而,不是所有器件都要求有相同的主控振荡器时钟频率。对于个别器件不同的时钟频率,秘须通过适当设定波特率后分频器和每个时间段的时间当量来调整。
标称的位率是每秒发送的位数,条件是假定理想的发送器带理想振荡器,而且忽略重同步的情况。这个标称的位率最大值是1Mbps。
标称位时间定义如下:
TBit=1/标称位率
位时间可以认为是被分成单独的没有重叠的时间段
l 同步时间段(Sync_Seg);
l 传输时间段(Prop_Seg);
l 相位缓冲时间段1(Phase_Seg1);
l 相位缓冲时间段2(Phase_Seg2);
时间段(或标称时间段)是由时间当量或TQ整数倍构成的。由定义可知,位时间可编程为最小8TQ到最大25TQ。持续时间由以下关系给出:
标称位时间=TQ×(Sync_Seg+Prop_Seg+Phase_Seg1+Phase_Seg2)
时间当量来源于晶振周期的固定单位。它也可通过一个带1-64的整数值的可编程的波特率分频器和一个固定2分频的时钟发生器来确定。公式可表示为
TQ=[2×(BRP+1)]/Fosc
其中,FOSC为时钟频率,BRP为BRGCON1<5..0>的数(0-63)。
在PIC18F4580芯片中与CAN波特率设定相关的寄存器有三个:
l BRGCON1
l BRGCON2
l BRGCON3
BRGCON1波特率寄存器主要设定同步时间段(Sync_Seg)和波特率分频器系数(BRP);
BRGCON2波特率寄存器主要设定Phase_Seg1和Prop_Seg时间段;
BRGCON3波特率寄存器主要设定Phase_Seg2
下面是在SP9608-PIC单片机增强型开发板上使用PIC18F4580芯片进行CAN实验设定CAN波特率为250kbps的程序段,其中FOSC=32MHz(8MHz通过4倍频PLL到32MHz)。
CANCON=0x80;
while(0==(CANSTAT&0x80));
BRGCON1=0x07;//8*TQ=8*(2*(BRP+1))/FOSC =250kbps
BRGCON2=0x90;
BRGCON3=0x42;
﹍﹍﹍
CANCON=0x00;
while(0!=(CANSTAT&0xE0));
我们的网址: www.supermcu.com
文章评论(0条评论)
登录后参与讨论