STC15W408AS单片机
资源
IO分配
IO | 分配 |
---|---|
1.0 | 控制灯 |
1.1 | CAN_INT |
1.2 | CAN_CS |
1.3 | CAN_SI |
1.4 | CAN_SO |
1.5 | CAN_SCK |
1.6 | 电流状态模拟量输入 |
1.7 | 电压状态模拟量输入 |
3.0 | 串口 |
3.1 | 串口 |
3.2 | 设备号选择位0 |
3.3 | 设备号选择位1 |
3.4 | 设备号选择位2 |
3.5 | 设备号选择位3 |
3.6 | 设备号选择位4 |
3.7 | 设备号选择位5 |
5.4 | 空 |
5.5 | 继电器控制 |
CAN总线
CAN 报文帧
普通帧(108bit)
帧以起始帧 ( SOF)位开始, SOF 为显性状态,允许所有节点的硬同步。
SOF之后是仲裁字段, 由12个位组成, 分别为11个标识位和一个远程发送请求 ( Remote Transmission Request, RTR)位。 RTR 位用于区分报文是数据帧( RTR 位为显性状态)还是远程帧 ( RTR 位为隐性状态) 。
仲裁字段之后是控制字段,由 6 个位组成。控制字段的第一位为标识扩展( Identifier Extension, IDE)位,该位应是显性状态来指定标准帧。标识扩展位的下一位为零保留位( RB0) , CAN 协议将其定义为显性位。控制字段的其余 4 位为数据长度码 ( Data Length Code,DLC) ,用来指定报文中包含的数据字节数 ( 0 到 8 字节) 。
控制字段之后为数据字段,包含要发送的任何数据字节。数据字段长度由上述 DLC 定义 ( 0 到 8 字节)。
数据字段之后为循环冗余校验( CRC)字段,用来检测报文传输错误。 CRC 字段包含一个 15 位的 CRC 序列,之后是隐性的 CRC 定界位。
最后一个字段是确认字段 ( ACK),由 2 个位组成。在确认时隙( ACK Slot)位执行期间,发送节点发出一个隐性位。任何收到无错误帧的节点会发回一个显性位(无论该节点是否配置为接受该报文与否)来确认帧收到无误。确认字段以隐性确认定界符结束,该定界符可能不允许被改写为显性位。
扩展数据帧(128bit)
在扩展 CAN 数据帧中,紧随 SOF 位的是 32 位的仲裁字段。仲裁字段的前 11 位为 29 位标识符的最高有效位( Most Significant bit, MSb)(基本lD) 。紧随这 11 位的是替代远程请求 ( SubstituteRemote Request, SRR)位,定义为隐性状态。 SRR位之后是 lDE 位,该位为隐性状态时表示这是扩展的CAN 帧。
应该注意的是, 如果发送完扩展帧标识符的前 11 位后,总线仲裁无果,而此时其中一个等待仲裁的节点发出标准 CAN 数据帧 ( 11 位标识符),那么,由于节点发出了显性 lDE 位而使标准 CAN 帧赢得总线仲裁。另外,扩展 CAN 帧的 SRR 位应为隐性,以允许正在发送标准CAN 远程帧的节点发出显性 RTR 位。
SRR和lDE位之后是标识符的其余18位(扩展lD) 及一个远程发送请求位。
为使标准帧和扩展帧都能在共享网络上发送,应将29位扩展报文标识符拆成高 11 位和低 18 位两部分。拆分后可确保 lDE 位在标准数据帧和扩展数据帧中的位置保持一致。
仲裁字段之后是 6 位控制字段。控制字段前两位为保留位,必须定义为显性位。其余 4 位为 DLC,用来指定报文中包含的数据字节数。扩展数据帧的其他部分 (数据字段、 CRC 字段、确认字段、帧结尾和间断)与标准数据帧的结构相同 。
选择
选择帧格式
为保证63个电气节点可用,同时兼顾8个命令,所以采用普通帧11位仲裁仍可保证2个位的空余以留今后扩展,若仍不足,可采用扩展帧。
bit | explain |
---|---|
bit10~5 | 地址位 |
bit4~3 | 保留 |
bit2~1 | 00:关电源 |
01:开电源 | |
10:电压 | |
11:电流 | |
bit0 | 0:发送 |
1:返回 |
如“2x00111100000”为主机向0F号节点发送关电源请求。
如“2x11110000001”为3C节点告诉主机已经关闭电源。
数据格式
根据不同命令,数据最大可达八字节。
串口
处理方式
采用ASCII码,串口5毫秒无数据则断帧处理。
命令格式为,命令本身+空格+地址(+数据)
已实现命令
命令 | 说明 | 示例 |
---|---|---|
OpenPower | 打开目标节点电源 | OpenPower 0F |
DownPower | 关闭目标节点电源 | DownPower 0F |
InquireV | 查询目标节点电压 | InquireV 0F |
InquireI | 查询目标节点电流 | InquireI 0F |