读取A/D转换的数值
PIC16F874的A口和E口可以作为模拟量输入口,共有8个输入通道。A/D转换的结果存储于单片机的ADRES寄存器。程序首先设置单片机的A/D控制寄存器ADCON1的bit3~bit0,选择每个通道的输入/输出类型并设置参考电压为5V,然后设置单片机的A/D控制寄存器ADCON0的bit5~bit3选择通道,设置bit0打开ADC,设置bit2启动ADC,最后从单片机的A/D转换结果寄存器ADRES中读取A/D转换的数值。
设置PWM波输出的脉冲宽度
PIC16F874的CCP1引脚用于PWM波输出。程序首先设置单片机的CCP1模块控制寄存器CCP1CON的bit3~bit0,定义工作方式为PWM,然后用从PC端接收到的用于设置嵌入式CAN智能节点PWM波输出的脉冲宽度的数据设置单片机的CCP1控制寄存器CCP1CON的bit5~bit4和CCPR1L寄存器,即实现了PC端对嵌入式CAN智能节点PWM波输出的脉冲宽度的控制。
发送数据
程序为每个需要传送到PC端的信号(电压。电流。温度。嵌入式CAN智能节点PWM波输出的脉冲宽度)都分配了一个标识码。发送数据时,首先向MCP2510发送写指令,再将标识码。帧格式和数据长度的定义。需要发送的数据依次写入MCP2510相应的寄存器中。
接收数据
程序读取CAN控制器MCP2510的中断标志寄存器的值,判断接收缓冲区中是否有数据,当接收缓冲区中有数据时向MCP2510发送读指令,依次将标识码。帧格式和数据长度。接收到的数据从MCP2510相应的寄存器中读出。
处理和显示数据
A/D转换的数值经过程序处理后得到信号的真实值并送显示模块进行显示,主要包括数值和汉字。英文字符的显示。同时完成了嵌入式CAN智能节点PWM波输出的脉冲宽度和从PC端接收到的数据的显示。
PC端功能的实现
硬件部分
PC端采用了研华公司的PCL-841双端口CAN接口卡,该卡具有两个CAN通信口,最高数据传输速率可以达到1Mbps。该卡采用内存映射机制,即将CAN接口卡上的内存映射至主存中,用户可以根据需要自己设定映射内存的基地址。
软件部分
PC端的软件采用C语言编写,主要完成CAN信息的实时读龋处理和显示,向嵌入式CAN智能节点发送数据和设置嵌入式CAN智能节点PWM波输出的脉冲宽度等工作。
设计。调试中应当注意的一些问题
硬件方面
嵌入式CAN智能节点
设计中应当注意处理好复位和时钟信号,包括不同器件之间复位的先后时序。在进行温度信号的采集时,要特别注意温度传感器AD590的调零。AD590是一个恒流源,它的特性是绝对温度每变化1℃电流增/减1mA,绝对温度0℃时为0mA。为抵消AD590在0℃时的电压,需要加入一个负电源使其在0℃时输出为0V,再选择合适的电阻把电流转变为电压,就可以把温度信号的采集变为0~5V电压信号的采集。
调试过程中应首先检查各芯片的工作电压是否正常,晶振是否起振,复位信号是否正确。要经常察看各芯片的发热状况,出现温度过高时应立即断电检查。必要时可使用示波器观测信号波形进行分析。
PC端
由于PCL-841双端口CAN接口卡占用PC的串口资源,因此在BIOS设置中应将串口设置为Disable,还应该特别注意CAN接口卡占用的内存资源是否被其它硬件占用,如果已经被占用,则应修改CAN接口卡内存映射的首地址,同时更改CAN接口卡上的跳线,否则CAN接口卡无法正常工作。
软件方面
嵌入式CAN智能节点
在编写嵌入式CAN智能节点的程序时,需要特别注意的是CAN控制器MCP2510的初始化,务必使一个系统中的所有智能节点的数据传输波特率相同,否则嵌入式CAN智能节点将无法和PC端进行通信。应当注意必须正确地将标识码和屏蔽字写入MCP2510的CAN信息接收过滤和屏蔽控制寄存器,否则嵌入式CAN智能节点将无法正确的发送和接收CAN信息。
调试过程中应注意通过查看各个寄存器的值来判断程序执行的程度。
PC端
在编写PC端的程序时,需要将PCL-841双端口CAN接口卡驱动程序库CAN841S.LIB嵌入到自己的工程中,驱动程序库中封装了直接操控CAN接口卡的函数。对CAN接口卡进行操控时必须按照规定流程进行,否则CAN接口卡无法正常工作或者无法正确的发送和接收CAN信息。
调试过程中应采取下断点和单步执行相结合的调试方法,注意根据函数的返值来分析出现问题的原因。
结语
本课题初步完成了基于CAN总线的数据采集和智能控制系统的设计,经过反复实验,系统采集数据准确。传输可靠,通过了有关部门的专业测试。同时设计的嵌入式CAN智能节点可以迅速。准确地接收到PC端发送的数据。