- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
支持CAN总线的物流拣选电子标签.doc
支持CAN总线的物流拣选电子标签
目前,物流行业中的拣选货品操作是比较繁重的工作,工作人员容易在操作工程中产生数量错误,电子标签分拣是解决这一问题的普遍办法。上位机通过网络将需要分拣的种类、数量等信息传达给每个ID不同的电子标签,向工作人员下达指令,操作工人通过标签上面的数字以及指示灯显示,进行简单的动作,降低了判断思考的时间,顺序拣选,提高了工作效率。
CAN总线是控制器局域网总线的简称,是一种有效支持分布式控制或实时控制的串行通信网络。由于其具有总线仲裁、通信速率高、可靠性好、连接方便及等优点,在物流通信领域占有较大的市场份额。
目前,支持CAN总线通信的各种类芯片种类很多,本文介绍的电子标签,内部以AVR单片机为核心,CAN总线通过microchip公司的MCP2515实现。ID以及终端电阻通过用户自行设置,方便应用。
一、SPI接口
MCP2515具有串行外设接口(SPI),外部数据和命令通过SI引脚传送到器件中,且数据在SCK时钟信号的上升沿传送进去,MCP2515在SCK的下降沿通过SO引脚传送出去。在进行任何操作时,CS引脚都必须保持低电平。
AVR单片机的SPI系统包括两个移位寄存器和一个主机时钟发生器。通过将需要的从机的SS引脚拉低,主机启动一次通讯过程。主机和从机将需要发送的数据放入相应的移位寄存器。主机在SCK引脚上产生时钟脉冲以交换数据。主机的数据从MOSI移出,从机的数据从主机的MISO移入,主机通过将从机的CS拉高实现与从机的同步。单片机与MCP2515线路连接如图1所示。
电子标签的单片机SPI口操作程序如下:
//spi使能,主机模式,时钟4分频
void spi_init(void)
{
SPCR=0x50;
}
unsigned char spi_run(unsigned char data)
{
SPDR=data;
while(!(SPSR0x80));
return SPDR;
}
本文中,对于MCP2515只进行读操作、写操作和复位操作。
在MCP2515的SPI指令集中,本文用到的指令格式如下:1)0xC0:复位;2)0x03:读操作;3)0x02:写操作。以下是通过SPI读MCP2515的程序。
unsigned char read_mcp(unsigned char address)
{ unsigned char data;
MCP_ON();
spi_run(0x03); //mcp读指令
spi_run(address); //写地址
data=spi_run(0xFF); //空时钟返回数据
MCP_OFF();
return data;
}
二、CAN总线操作
上述单片机通过SPI接口连接MCP,最终是为了实现对CAN总线的操作。主要包括以下三个部分:
1.CAN总线初始化:初始化主要实现对本设备的总线ID及屏蔽码配置、总线通讯波特率配置、总线工作模式配置等。
void mcp_init(unsigned int id,unsigned int mask)
{
write_mcp(0x2A,0x00);
write_mcp(0x29,0x90);
write_mcp(0x28,0x02); //通过配置CNF1、CNF2、CNF3寄存器设置总线波特率
write_mcp(0x00,(id3)0x00ff);
write_mcp(0x01,(id5)0x00e0); //通过配置验收滤波寄存器确定本设备总线ID
write_mcp(0x20,(mask3)0x00ff);
write_mcp(0x21,(mask5)0x00e0);//通过配置验收屏蔽寄存器确定本设备总线屏蔽码
write_mcp(0x60,0x00); //接收符合滤波器条件的有效报文
write_mcp(0x0f,0x08); //CAN工作模式,单触发
write_mcp(0x2B,0x01); //接收中断使能
}
2.CAN数据发送:主要实现对目标ID配置、发送的字节数配置、以及具体数据内容的配置。
void send_can(unsigned int ID,unsigned char data[8],unsigned mm)
{
write_mcp(0x31,(ID3)0xff);
write_mcp(0x32,(ID5)0xe0); //目标ID的地址
write_mcp(0x35
文档评论(0)