总线技术实验报告.docx
- 文档编号:29691072
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:24
- 大小:177.05KB
总线技术实验报告.docx
《总线技术实验报告.docx》由会员分享,可在线阅读,更多相关《总线技术实验报告.docx(24页珍藏版)》请在冰豆网上搜索。
总线技术实验报告
总线技术与应用》
实验报告
学院:
专业:
班级:
姓名:
学号:
成绩
电气与控制工程学院实验报告
课程名称:
总线技术与应用
实验题目:
RS485总线扩展实验指导教师:
班级:
学号:
学生姓名:
、实验目的和任务
1)学习RS485总线系统的连接方法
2)掌握RS485总线系统应用层协议的设计方法
3)任务:
1进行各节点ADC的数据周期读取;
2进行LED灯闪烁同步控制:
在主机上通过按键(按向右键)切换LED等显示,
底层同步进行LED灯显示切换;
3进行数字温度模块的数据周期读取,通过主机上通过按键(按向上键)切换温度在数码管显示;
4主机通过向上键进行模式切换(共三种功能,顺序分别为LED显示功能、ADC
功能、温度功能);
5主机通过左、下、右按键选择从节点选择(A
(2)、B(3)、C(4)),返回ADC值或温度值;
6主机数码管第一个显示节点号(A
(2)、B(3)、C(4)),后面显示电压值或温度值;
7主机通过左、下、右按键选择从节点选择(A
(2)、B(3)、C(4)),使LED闪烁,数码显示第一个数字显示节点号(A
(2)、B(3)、C(4)),其他三个数字显示LED。
、实验内容及原理
1、实验前准备
(1)安装好Keil工程软件;
(2)安装好USB/RS485转换器驱动;
(3)安装好串口调试助手;
2、RS485概述
RS485采用差分信号幅逻辑,+2V~+6V表示“0”,-6V~-2V表示“1”。
RS485有两线制和四线制两种接线,四线制只能实现点对点的通信方式,现很少采用,现在多采用的是两线制接线方式,这种接线方式为总线式拓扑结构在同一总线上最多可以挂接32个结点。
在RS485通信网络中一般采用的是主从通信方式,即一个主机带多个从机。
起始位:
为信号0,占1位;
数据位:
可以使5、6、7、8位,传输室低位在先,高位在后;
校验位:
1位奇偶校验码(可不选);
停止位:
用信号1表示字节结束,可以是1位、1.5位或2位;
空闲位:
为信号1;
由于RS485总线只定义了物理层与数据链路层的一部分,因此一般需要自定义应用层协议。
应用层协议一般包括同步字节、地址信息、功能信息、数据信息、校验信息。
3、RS485总线协议
三、实验步骤及源代码
1、实验步骤
1)连线:
将5V/2A电源线与各节点基板连接好,并将J-link仿真器及USB接口线与试验箱CPU板与电脑连接好;
2)按《实验平台使用说明》中“第3章标准程序验证”对实验基板进行验证;
3)双击打开实验程序文件夹“..\4_实验程序总线类扩展实验\RS485从节点(ADC+LED)”中的Template.uvprojx,点击Build按钮,编译程序;编译成功后,从机基板上电,点击Load按钮下载程序;(在下载前,需要在程序中对从机地址进行确认)
4)双击打开实验程序文件夹“..\4_实验程序总线类扩展实验\RS485主节点通信程序”中的Template.uvprojx,点击Build按钮,编译程序;编译成功后,主机基板上电,点击Load按钮下载程序;(在下载前,需要在程序中对主机地址进行确认)
5)下载成功后,进入测试;①主机通过向上键进行模式切换(共三种功能,顺序分别为LED显示功能、ADC
功能、温度功能);可以观察到4位LED数码管提示字符变化。
2进入温度功能,主机通过左、下、右按键选择从节点选择(A
(2)、B(3)、C(4)),返回ADC值或温度值。
3进入ADC测试功能,主机数码管第一个数字显示节点号(A
(2)、B(3)、C(4)),后面显示电压值或温度值。
4进入LED显示功能,主机通过左、下、右按键选择从节点选择(A
(2)、B(3)、C(4)),使LED灯闪烁,数码显示管第一个数字显示节点号(A
(2)、B(3)、D
(4)),其他三个数字显示LED;
5在上述通讯过程中,使用USB/RS485转换器对实验过程进行记录,对实验数据进行分析;
6)扩展实验①将通讯速率不断提高,看什么速率情况下通讯会失败?
提示:
通过修改语句RS485_Init(9600);中的参数实现。
2试讨论协议中哪些字段不是必须的,对协议如何进行优化?
3在通讯速率为9600bps情况下,如果ADC读取周期为10ms能否正常通讯?
4能否设置两个主站,同时获取数据?
2、源代码
(1)RS485从节点(ADC+LED)
#include"system.h"
#include"SysTick.h"
#include"led.h"
#include"usart.h"
#include"rs485.h"
#include"adc.h"
#include"ds18b20.h"
#include"TM1637.h"
#include"application.h"/*******************************************************************************
*函数名:
main
*函数功能:
主函数
*输入:
无
*输出:
无
*******************************************************************************/intmain()
{
u8ii=0;
u8curMode;
u8oldMode;
u8loopCount;
floatfValue;
for(ii=0;ii<3;ii++)//对初始化函数进行三遍初始化
{
SysTick_Init(168);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断优先级分组分2组LED_Init();
ADCx_Init();//USART1_Init(9600);
RS485_Init(9600);TM1637_Init();
while(DS18B20_Init())
{
TM1637_DispOneChar(TM1637_POS_1000,'E');TM1637_DispOneChar(TM1637_POS_1000,'R');TM1637_DispOneChar(TM1637_POS_1000,'0');TM1637_DispOneChar(TM1637_POS_1000,'1');delay_ms(500);
}
TM1637_DispClear();
TM1637_SetDispLevel(3);
TM1637_DispOneChar(TM1637_POS_100,'N');
TM1637_DispOneChar(TM1637_POS_10,'U');
TM1637_DispOneChar(TM1637_POS_1,'C');curMode=0;
oldMode=0;
loopCount=0;
while
(1)
{
fValue=UpdateSample(curMode);
/***1.判断USART2是否接收完毕***/
if(flgU2FrameOver==1)//上位机ADC协议判断
结束
{
oldMode=curMode;
curMode=usart2_rev_buffer[3];
fValue=TackleCommRev(curMode,UART_TYPE_U2);
flgU2FrameOver=0;//执行完相应的帧协议后,对帧协议结束标志置0(即flgFrameOver=0)
}
/***2.判断USART6是否接收完毕***/
if(flgU6FrameOver==1)//上位机ADC协议判断
结束
{
oldMode=curMode;
curMode=usart6_rev_buffer[3];
fValue=TackleCommRev(curMode,UART_TYPE_U6);
flgU6FrameOver=0;//执行完相应的帧协议后,对帧协议结束标志置0(即flgFrameOver=0)
}
/***3.更新显示***/loopCount++;if(loopCount>=50){
if(curMode!
=oldMode)
{
TM1637_DispClear();
}
UpdateDisp(curMode,fValue);
loopCount=0;
}delay_ms(3);
}
}
(2)RS485主节点通信程序/*******************************************************************************
*
*普中科技
*实验名:
FSMC-TFTLCD显示实验
*实验说明:
*连接方式:
*注意:
TFTLCD驱动在tftlcd.c内
#include"system.h"
#include"SysTick.h"
#include"led.h"
#include"usart.h"
#include"tftlcd.h"
#include"key.h"
#include"beep.h"
#include"exti.h"
#include"time.h"
#include"dma.h"
#include"rs485.h"
#include"malloc.h"
#include"flash.h"
#include"font_show.h"
#include"TM1637.h"
#include"application.h"
/*******************************************************************************
*函数名:
main
*函数功能:
主函数
*输入:
无
*输出:
无
*******************************************************************************/intmain()
{
u8i=0;
u8ii=0;
u8key=0;
u8curNodeNum=1;
SysTick_Init(168);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断优先级分组分2组LED_Init();
USART1_Init(9600);
#ifdefRS485Com
RS485_Init(9600);
#endif
BEEP_Init();
KEY_Init();
TFTLCD_Init();//LCD初始化applicationInit();
//My_EXTI_Init();//外部中断初始化
TIM4_Init(5000-1,8400-1);//定时500ms
//TIM4_Init(2000-1,8400-1);//定时200msTM1637_Init();
TM1637_DispClear();
TM1637_SetDispLevel(3);
TM1637_DispOneChar(TM1637_POS_100,'N');
TM1637_DispOneChar(TM1637_POS_10,'U');
TM1637_DispOneChar(TM1637_POS_1,'C');
LCDshow();//数据显示
LEDShow
(1);
#ifdefRS485Com
RS485_TX_EN1=1;//将485设置为发送
RS485_TX_EN2=1;//将485设置为发送
#endif
for(ii=0;ii<3;ii++)
{for(i=1;i<=CHILD_NODE_NUM;i++){
SendNULLOrder(i);
}
}
#ifdefRS485Com
RS485_TX_EN1=0;//将485设置为接收
RS485_TX_EN2=0;//将485设置为接收
#endif
while
(1)
{key=KEY_Scan(0);//扫描按键,默认为0,无按键switch(key)
{
caseKEY_UP:
ModelTrans();curNodeNum=1;led_red=!
led_red;
break;//按下K_UP按键切换点亮D2指示灯
caseKEY_LEFT:
/给/节点1发消息
SendOrder
(1);
curNodeNum=1;
//donothingled_green=!
led_green;
break;//按下K_LEFT按键关闭蜂鸣器
caseKEY_DOWN:
//给节点2发消息
SendOrder
(2);curNodeNum=2;
break;//按下K_DOWN按键切换点亮D2指示灯
caseKEY_RIGHT:
/给/节点3发消息;
SendOrder(3);
curNodeNum=3;
break;//按下K_RIGHT按键打开蜂鸣器}i++;
if(i%20==0)
{
led_blue=!
led_blue;
if(flgRevStatus==REV_OVER){
LCDshow();
LEDShow(curNodeNum);flgRevStatus=REV_CLEAR;
}
}
//delay_ms(10);
四、实验数据分析及处理
1、温度读取
2、LED灯读取
3、ADC读取
五、实验结论与感悟(或讨论)总结实验;对实验的感受和领悟;以及对实验中某些问题、现象、方法、数据、结果等等内容的讨论。
通过这次实验,我加深了对总线的理解。
实验的过程,思考问题的方法与其他实验
是通用的。
在最后读取数据过程中我们又更加加深了RS458总线协议的读取方法。
做实验时,教师的耐心的帮助也帮我对课程有了更深的了解,使我受益匪浅。
成绩
电气与控制工程学院实验报告
课程名称:
总线技术与应用
实验题目:
CAN总线扩展实验指导教师:
班级:
学号:
学生姓名:
一、实验目的和任务
(1)学习CAN总线系统的连接方法;
(2)掌握CAN总线系统应用层协议的设计方法。
(3)任务:
1进行各节点ADC的数据周期读取;
2进行LED灯闪烁同步控制:
主机上通过按键(按向右键)换LED灯显示,底层同步进行LED灯显示切换;
3进行数字温度模块的数据周期读取,通过主机上通过按键(按向右键)切换温度在数码管显示;
4任一节点通过向上键进行模式切换(共三种功能,顺序分别为LED显示功能、ADC功能、温度功能);
5任一节点通过左、下、右按键选择从节点选择(A
(1)、B
(2)、C(3)、D(4)),返回ADC值或温度值;
6任一节点数码管第一个数字显示节点号(A
(1)、B
(2)、C(3)、D(4)),后面显示电压值或者温度值;
7主机通过左、下、右按键选择从节点选择(A
(1)、B
(2)、C(3)、D(4)),使LED闪烁,数码管显示第一个数字显示节点号(A
(1)、B
(2)、C(3)、D(4)),其它三个数字显示LED。
二、实验内容及原理
1、实验前准备
(1)安装好Keil工程软件;
(2)安装好USB-CANTools软件;
(3)安装好串口调试助手;
2、CAN概述
CAN是控制器局域网络(ControllerAreaNetwork,CAN)的简称,是由以研发和生产汽车电子产品省称的德国BOSCH公司开发的,并最终成为国际标准(ISO11898),是国际上应用最广泛的现场总线之
CAN节点信息可分成不同的优先级,以满足不同实时性要求,高优先级的数据优先传输;CAN采用非破坏性的总线仲裁技术,当多个节点同时向总线发送信息时,优先级较低的节点会主动退出发送;CAN能够进行动态错误管理,CAN节点在错误严重的情况下具有自动关闭输出功能,以使总线上.其他节点的操作不受影响。
CAN通过报文滤波可实现点对点、点对多点及广播等传输方式,无需专门的“调度”。
CAN的报文帧由7个不同的位场组成,即帧起始、仲裁场、控制场、数据场、CRC场、应答场和帧结束。
其中,在仲裁场的标识符数值越小,优先级越高。
CAN协议支持两种报文格式,其唯一的不同是标识符(ID)长度不同,标准格式为11位,扩展格式为29位。
在标准格式中,报文的起始位称为帧起始(SOF,)然后是由11位标识符和远发送请求位(RTR组)成的仲裁场。
RTR位标明是数据帧还是请求帧,在请求帧中没有数据字节。
控制场包括标识符扩展位(IDE),指出是标准格式还是扩展格式。
它还包括一个保留位(ro),为将来扩展使用。
它的最后四个位用来指明数据场中数据的长度(DLC)。
数
据场范围为0~8个字节,其后有一个检测数据错误的循环冗余检查(CRC。
)
应答场(ACK)包括应答位和应答分隔符。
发送站发送的这两位均为隐性电平(逻
辑1),这时正确接收报文的接收站发送主控电平(逻辑0)覆盖它。
用这种方法,发送站可以保证网络中至少有一个站能正确接收到报文。
报文的尾部由帧结束标出。
在相邻的两条报文间有一很短的间隔位,如果这时没有站进行总线存取,总线将处于空闲状态。
3、CAN总线协议
(1)
:
50ms
通信的基本参数为:
波特率500Kbps,采用标准帧,读取超时时间
(2)CAN-ID分配
(3)CAN报文格式
三、实验步骤及源代码
1、实验步骤
(1)连线:
将5V/2A电源线与各节点基板连接好,并将J-link仿真器及USB接口线与试验箱CPU板和电脑连接好;
(2)双击打开实验程序文件夹“..\4_实验程序总线类扩展实验\Can多机通信实验\CAN主节点通信程序_v1"中的Template.uvprojx,修改其中application.h中本机地址及其它节点地址定义:
#defineCAN_ADDR_LOCAL
CAN_ADDR_D
#defineCAN_ADDR_LEFT
CAN_ADDR_A
#defineCAN_ADDR_DOWN
CAN_ADDR_B
#defineCAN_ADDR_RIGHT
CAN_ADDR_C
(3)点击Build按钮,编译程序;编译成功后,D基板上电,点击Load按钮下载程序;
(4)更改地址定义,分别给A、B、C节点烧录程序
(5)下载成功后,进入测试:
1主机通过向上键进行模式切换(共三种功能,顺序分别为LED显示功能、ADC功能、温度功能);可以观察到4位LED数码管提示字符变化。
2进入温度功能,主机通过左、下、右按键选择从节点选择(A
(2)、B(3)、C(4)),
返回ADC值或温度值。
3进入ADC测试功能,主机数码管第一个数字显示节点号(A
(2)、B(3)、C(4)),后面显示电压值或者温度值。
4进入LED显示功能,主机通过左、下、右按键选择从节点选择(A
(2)、B(3)、C(4)),使LED闪烁,数码管显示第一个数字显示节点号(A
(2)、B(3)、C(4)),其它三个数字显示LED;
(6)扩展实验
①将终端匹配电阻取下后,是否能通讯成功答:
不能。
②将CAN波特率调成250kbps、100kbps、50kbps看终端匹配电阻取下后,是否能通讯成功?
提示:
CAN波特率=Fpclk1/((CAN_BS1+CAN_BS2+1)*CAN_Prescaler);其中的Fpclk1指APB1时钟,默认值为42MHz,只要知道BSI和BS2的没置值,就可以计算出波特率。
比如设置TS1=6、TS2=5
和BRP=5,在APB1频率为42Mhz的条件下,即可得到CAN通信的波特率BoundRate=42000/[(7+6+1)*6]=500Kbps。
○3如何调整CAN报文虑波器设置使得某节点可以接收所有其它站点的数据?
○4在波特率500kbps下,调整CAN_BS1、CAN_BS2的取值,使采样点分别位于30%、50%、70%,90%,查看通讯成功率。
提示:
采样点比例说明如下:
如图所示,CAN总线一个位时共有同步段(SS、)传播时间段(PTS)、相位缓冲段1(PBS1)、相位缓冲2(PBS2),即Tbit=Tss+Tpts+Tpbs1+Tpbs2。
一般采样点(CAN控制器读取总线电平时刻)位于PBS1
与PBS2之间。
采样点比例定义为:
采样点比
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 总线技术 实验 报告