原创 PIC18F4580单片机的CAN波特率的设定与编程

2007-1-19 12:22 4641 10 10 分类: MCU/ 嵌入式

    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          相位缓冲时间段1Phase_Seg1);


l          相位缓冲时间段2Phase_Seg2);


时间段(或标称时间段)是由时间当量或TQ整数倍构成的。由定义可知,位时间可编程为最小8TQ到最大25TQ。持续时间由以下关系给出:


        标称位时间=TQ×Sync_SegProp_SegPhase_Seg1Phase_Seg2


    时间当量来源于晶振周期的固定单位。它也可通过一个带1-64的整数值的可编程的波特率分频器和一个固定2分频的时钟发生器来确定。公式可表示为


                TQ=[2×BRP1]Fosc


    其中,FOSC为时钟频率,BRPBRGCON1<5..0>的数(0-63)。


    PIC18F4580芯片中与CAN波特率设定相关的寄存器有三个:


l          BRGCON1


l          BRGCON2


l          BRGCON3


BRGCON1波特率寄存器主要设定同步时间段(Sync_Seg)和波特率分频器系数(BRP);


BRGCON2波特率寄存器主要设定Phase_Seg1Prop_Seg时间段;


BRGCON3波特率寄存器主要设定Phase_Seg2


    下面是在SP9608-PIC单片机增强型开发板上使用PIC18F4580芯片进行CAN实验设定CAN波特率为250kbps的程序段,其中FOSC=32MHz8MHz通过4倍频PLL32MHz)。


        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


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
10
关闭 站长推荐上一条 /3 下一条