研一入学后刚好赶上实验室的AGV项目,主要负责AGV车体的驱动和上层ROS端的指令数据交互。断断续续做了将近4个月(别问我为什么是断断续续——甲方的需求就是断断续续提的),涉及车体驱动器的驱动、底层硬件平台PCB的绘制、软件代码的编写。个人感觉收获甚多。现在来从芯片的使用和代码设计技巧两方面对项目进行总结。
芯片的使用
项目中所用的核心芯片采用STM32F103ZET6;通信芯片采用CAN、RS485、RS232;电路保护芯片采用运放LM358、光耦TLP521-4。
- CAN
CAN通信数据的成帧处理功能的实现需要满足两个条件:CAN控制器与CAN收发器。
CAN控制器用于将欲收发的信息(报文)转换为符合CAN规范的CAN 帧,通过CAN收发器,在CAN-BUS上作信息的交互,实现CAN总线的协议底层以及数据链路层。CAN发送过程中进行位填充、添加CRC校验、应答检测等操作;CAN接收过程中进行收发比对、去位填充、执行CRC校验等操作,此外还需要进行冲突判断、错误处理等诸多任务。CAN控制器芯片可分为两类:独立的控制器芯片(如SJA100)与结合微处理器的控制器芯片(如STM32芯片),这里选择第二种。
CAN收发器是CAN控制器和物理总线之间的接口,将CAN控制器的逻辑电平转换为CAN总线的差分电平,在两条有差分电压的总线电缆上传输数据。这里采用的是philips公司生产的高速TJA1050芯片。
TJA1050是CAN协议控制器和物理总线之间的接口,最初是应用在波特率范围在60K波特到1M波特的高速自动化应用中。TJA1050可以为总线提供不同的发送性能,为CAN控制器提供不同的接受性能,而且它与"ISO 11898"标准完全兼容。TJA1050芯片原理图与引脚功