实验五:串口通讯与步进电机
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
表格 2 常用串口通信参数设置
参数 波特率 数据位 停止位 校验位
上位机 串口调试助手设置的值 8 1 无
单片机 定时器初值 串行工作方式 1 串行工作方式 1 串行工作方式 1
2. 利用单个计算机进行串口调试: 需要使用到的辅助软件: 1) Configure Virtual Serial Port Driver 2) Protues 3) 串口调试助手 此部分会利用视频进行配置指导,详情请参考附录视频。 3. 步进电机驱动: 常常我们口中所说的步进电机是指的双极性步进电机,其内部构造如图 2 所示。
5.
C51 串口通讯控制步进电机正反转:
实例:
一:小程序,完成的任务是:接收到什么数据就发送回去什么数据,波特率为 9600, 工作方式 1: #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; void UsartInit() { SCON=0X50; //设置为工作方式 1 TMOD=0X20; //设置计数器工作方式 2 PCON=0X80; //波特率加倍 TH1=0XF3; //计数器初始值设置,注意波特率是 4800 的 TL1=0XF3; ES=1; //打开接收中断 EA=1; //打开总中断 TR1=1; //打开计数器 } void main() { UsartInit(); // 串口初始化 while(1); } void Usart() interrupt 4 { u8 receiveData; receiveData=SBUF;//出去接收到的数据 RI = 0;//清除接收中断标志位 SBUF=receiveData;//将接收到的数据放入到发送寄存器 while(!TI); //等待发送数据完成 TI=0; //清除发送完成标志位 } 二:完成单片机驱动步进电机 #include <reg52.h> typedef unsigned char uchar; typedef unsigned int uint; uchar code FFW[]= { 0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09 };
P1=0x00; while(1) { SETP_MOTOR_FFW(N); } } 思考内容: 1.请尝利用实例程序一获取一些汉字的 16 位编码。 2.尝试利用实验二完成正传与反转,实例程序只有一种转动。 3.尝试结合实例一与实例二,利用串口控制步进电机。
表 1 常用编码
编码 ASCII Unicode
表示方式
八位二进制数表示数字与字母
即一个字节表示一个字母或者数字,不包含汉字
示例 0x41 大写字母 A 0x59 27 汉字大
两个八位双字节表示包含 汉子的字符
那么又如何在编写程序时获得对应的汉字编码呢?(ASCII 码可以查表快速获得) 在实例中为同学们提供一个简单的方法,利用一个程序获取对应的编码。 在进行串口通讯时,最重要的是”匹配”,即上位机和单片机的程序都能完成一对一完全 匹配,主要涉及到表 2 中所示的几个参数。
实验原理解析:
1. 串口通讯原理以及各项参数解析: 串口通讯是一种基本的、 相当简单的串行通讯方式, 其在单片机上的结构如图 1 所示, 通过 RxD 与 TxD 分别完成数据的接收与发送(对单片机而言)。
图 1:单片机串行通讯方式
(1)上位机发送数据数据,单片机接收数据时: 数据按照上位机规定的速度,以每单位时间一位(0 or 1 的数据)的方式从橙色的线路上 一位一位的从上位机向单片机迁徙,直到数据发送完成。 (2) 上位机发送数据数据,单片机接收数据时: 数据按照 C5 程序中规定的速度,以每单位时间一位(0 or 1 的数据)的方式从红色的线 路上一位一位的从单片机向上位机迁徙,直到数据发送完成。 那么如何用一个 0 或者 1 的数据表示文本呢?在计算机系统与其他智能终端中,常用 的编码分两种,ASCII 码(以 X86 系统中常用的 8 位二进制数为主)与 Unicode 码,如表 1 所 示。
uchar code REV[]= { 0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01 }; void DelayMS(uint ms) { uchar i; while(ms--) { for(i=0;i<120;i++); } } void SETP_MOTOR_FFW(uchar n) { uchar i,j; for(i=0;i<5*n;i++) { for(j=0;j<8;j++) { P1 = FFW[j]; DelayMS(25); } } } void SETP_MOTOR_REV(uchar n) { uchar i,j; for(i=0;i<5*n;i++) { for(j=0;j<8;j++) { P1 = REV[j]; DelayMS(25); } } } void main() { uchar N = 3;
2、双拍: 双拍工作方式就是:每次给两个线圈通电,通过改变通电的线圈从而使步进电机转动。 驱动顺序:在双拍工作方式下,线圈的通电方式依次是:12、23、34、45、51; 3、单双拍(较为复杂的一种,但是速度稳定) 单双拍工作方式就是单拍工作方式和双拍工作方式交替进行。 驱动顺序:1、12、2、23、3、34、4、41; 在 C51 编程中,我们常常采用如图 3 所示的接线方式,利用一个 P 口的后四位或者前 四位作为 1、2、3、4 接线口的接口。 通过对 P1 整体赋值,达成驱动方式。
图 3:常用接线方式
但是由于单片机的驱动能力不够, 在设计电路时常常需要利用带负载能力强的芯片作为 过度,如图 4 所示,利用 ULN2003 作为带负载芯片进行驱动。
ቤተ መጻሕፍቲ ባይዱ图 4:实际使用下的驱动方式
在单片机的设计中, 常常带负载能力是设计需要重复考虑的, 这也是常常设计出现问题 的地方。 4. C51 完成串口通讯数据收发: 在实例程序中,单片机完成数据收发需要完成如图 5 所示的几个步骤:
图 5:串口设置
具体的 C51 程序常用初始化函数如: void UsartInit() { TMOD=0X20; //设置计数器工作方式 2 TH1=0XF3; //计数器初始值设置,注意波特率是 4800 的 TL1=0XF3; TH1=0XF3; //计数器初始值设置,注意波特率是 4800 的 TL1=0XF3; ES=1; //打开接收中断 EA=1; //打开总中断 SCON=0X50; //设置为工作方式 1 PCON=0X80; //波特率加倍,加倍后 4800 变为 9600 TR1=1; //打开计数器 }
实验五
实验要求:
串口通讯与步进电机
利用 Protues 仿真,结合 C51 程序,完成串口通讯,实现数据的收发。 利用串口进行下位机(单片机)与上位机(PC 机)之间的通讯,完成单片机控制步进电 机正反转。
实验要点:
1. 2. 3. 4. 5. 6. 7. 串口通讯原理以及各项参数的选择设置 串口调试助手的使用 单片机串口通讯的接线原则 国际性通用编码的认知 ASCII 码与 Unicode 码 步进电机的驱动方式 C51 串口通讯的实现 串口通讯控制步进电机
图 2:双极性步进电机构造
其常用的驱动方式有两种, 第一种是较为简单的单节拍式驱动, 第二种是较为复杂的双 节拍式驱动,下文将进行详细阐述: 1、单拍: 单拍工作方式就是说每次只给一个线圈通电, 通过改变每次通电的线圈从而使步进电机 转动。 一般的驱动顺序是: 1 通电其他断电-2 通电其他断电-3 通电其他断电-4 通电其他断电。
参数 波特率 数据位 停止位 校验位
上位机 串口调试助手设置的值 8 1 无
单片机 定时器初值 串行工作方式 1 串行工作方式 1 串行工作方式 1
2. 利用单个计算机进行串口调试: 需要使用到的辅助软件: 1) Configure Virtual Serial Port Driver 2) Protues 3) 串口调试助手 此部分会利用视频进行配置指导,详情请参考附录视频。 3. 步进电机驱动: 常常我们口中所说的步进电机是指的双极性步进电机,其内部构造如图 2 所示。
5.
C51 串口通讯控制步进电机正反转:
实例:
一:小程序,完成的任务是:接收到什么数据就发送回去什么数据,波特率为 9600, 工作方式 1: #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; void UsartInit() { SCON=0X50; //设置为工作方式 1 TMOD=0X20; //设置计数器工作方式 2 PCON=0X80; //波特率加倍 TH1=0XF3; //计数器初始值设置,注意波特率是 4800 的 TL1=0XF3; ES=1; //打开接收中断 EA=1; //打开总中断 TR1=1; //打开计数器 } void main() { UsartInit(); // 串口初始化 while(1); } void Usart() interrupt 4 { u8 receiveData; receiveData=SBUF;//出去接收到的数据 RI = 0;//清除接收中断标志位 SBUF=receiveData;//将接收到的数据放入到发送寄存器 while(!TI); //等待发送数据完成 TI=0; //清除发送完成标志位 } 二:完成单片机驱动步进电机 #include <reg52.h> typedef unsigned char uchar; typedef unsigned int uint; uchar code FFW[]= { 0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09 };
P1=0x00; while(1) { SETP_MOTOR_FFW(N); } } 思考内容: 1.请尝利用实例程序一获取一些汉字的 16 位编码。 2.尝试利用实验二完成正传与反转,实例程序只有一种转动。 3.尝试结合实例一与实例二,利用串口控制步进电机。
表 1 常用编码
编码 ASCII Unicode
表示方式
八位二进制数表示数字与字母
即一个字节表示一个字母或者数字,不包含汉字
示例 0x41 大写字母 A 0x59 27 汉字大
两个八位双字节表示包含 汉子的字符
那么又如何在编写程序时获得对应的汉字编码呢?(ASCII 码可以查表快速获得) 在实例中为同学们提供一个简单的方法,利用一个程序获取对应的编码。 在进行串口通讯时,最重要的是”匹配”,即上位机和单片机的程序都能完成一对一完全 匹配,主要涉及到表 2 中所示的几个参数。
实验原理解析:
1. 串口通讯原理以及各项参数解析: 串口通讯是一种基本的、 相当简单的串行通讯方式, 其在单片机上的结构如图 1 所示, 通过 RxD 与 TxD 分别完成数据的接收与发送(对单片机而言)。
图 1:单片机串行通讯方式
(1)上位机发送数据数据,单片机接收数据时: 数据按照上位机规定的速度,以每单位时间一位(0 or 1 的数据)的方式从橙色的线路上 一位一位的从上位机向单片机迁徙,直到数据发送完成。 (2) 上位机发送数据数据,单片机接收数据时: 数据按照 C5 程序中规定的速度,以每单位时间一位(0 or 1 的数据)的方式从红色的线 路上一位一位的从单片机向上位机迁徙,直到数据发送完成。 那么如何用一个 0 或者 1 的数据表示文本呢?在计算机系统与其他智能终端中,常用 的编码分两种,ASCII 码(以 X86 系统中常用的 8 位二进制数为主)与 Unicode 码,如表 1 所 示。
uchar code REV[]= { 0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01 }; void DelayMS(uint ms) { uchar i; while(ms--) { for(i=0;i<120;i++); } } void SETP_MOTOR_FFW(uchar n) { uchar i,j; for(i=0;i<5*n;i++) { for(j=0;j<8;j++) { P1 = FFW[j]; DelayMS(25); } } } void SETP_MOTOR_REV(uchar n) { uchar i,j; for(i=0;i<5*n;i++) { for(j=0;j<8;j++) { P1 = REV[j]; DelayMS(25); } } } void main() { uchar N = 3;
2、双拍: 双拍工作方式就是:每次给两个线圈通电,通过改变通电的线圈从而使步进电机转动。 驱动顺序:在双拍工作方式下,线圈的通电方式依次是:12、23、34、45、51; 3、单双拍(较为复杂的一种,但是速度稳定) 单双拍工作方式就是单拍工作方式和双拍工作方式交替进行。 驱动顺序:1、12、2、23、3、34、4、41; 在 C51 编程中,我们常常采用如图 3 所示的接线方式,利用一个 P 口的后四位或者前 四位作为 1、2、3、4 接线口的接口。 通过对 P1 整体赋值,达成驱动方式。
图 3:常用接线方式
但是由于单片机的驱动能力不够, 在设计电路时常常需要利用带负载能力强的芯片作为 过度,如图 4 所示,利用 ULN2003 作为带负载芯片进行驱动。
ቤተ መጻሕፍቲ ባይዱ图 4:实际使用下的驱动方式
在单片机的设计中, 常常带负载能力是设计需要重复考虑的, 这也是常常设计出现问题 的地方。 4. C51 完成串口通讯数据收发: 在实例程序中,单片机完成数据收发需要完成如图 5 所示的几个步骤:
图 5:串口设置
具体的 C51 程序常用初始化函数如: void UsartInit() { TMOD=0X20; //设置计数器工作方式 2 TH1=0XF3; //计数器初始值设置,注意波特率是 4800 的 TL1=0XF3; TH1=0XF3; //计数器初始值设置,注意波特率是 4800 的 TL1=0XF3; ES=1; //打开接收中断 EA=1; //打开总中断 SCON=0X50; //设置为工作方式 1 PCON=0X80; //波特率加倍,加倍后 4800 变为 9600 TR1=1; //打开计数器 }
实验五
实验要求:
串口通讯与步进电机
利用 Protues 仿真,结合 C51 程序,完成串口通讯,实现数据的收发。 利用串口进行下位机(单片机)与上位机(PC 机)之间的通讯,完成单片机控制步进电 机正反转。
实验要点:
1. 2. 3. 4. 5. 6. 7. 串口通讯原理以及各项参数的选择设置 串口调试助手的使用 单片机串口通讯的接线原则 国际性通用编码的认知 ASCII 码与 Unicode 码 步进电机的驱动方式 C51 串口通讯的实现 串口通讯控制步进电机
图 2:双极性步进电机构造
其常用的驱动方式有两种, 第一种是较为简单的单节拍式驱动, 第二种是较为复杂的双 节拍式驱动,下文将进行详细阐述: 1、单拍: 单拍工作方式就是说每次只给一个线圈通电, 通过改变每次通电的线圈从而使步进电机 转动。 一般的驱动顺序是: 1 通电其他断电-2 通电其他断电-3 通电其他断电-4 通电其他断电。