一、设计目标:
设计以单片机为下位机,PC机为上位机的模拟转辙机控制系统。
二、设计内容和要求:
- 运行控制转辙机定位或反位操作及转辙机状态检测软件,根据上位机的指令,改变转辙机的定反位状态并将转辙机的状态反馈给上位机。
- 界面程序:上位PC机,运行转辙机控制界面程序。界面显示转辙机当前定反位状态。并可通过发送指令给下位机,实现转辙机位置的变化。
- 上位下位机通过RS232串口进行通信。
三、设计内容:
- 硬件设计:在proteus中绘制以单片机为核心的模拟转辙机仿真电路。
- 软件设计:keilC中设计下位机控制软件和串行通信软件、基于C#的上位PC机串行通信软件和控制界面软件。
四、方案设计
以下内容摘取自本人课设论文
(一)、系统总体结构
单片机模拟转辙机控制系统由三部分组成:上位机、下位机和转辙机。上位机为搭载有配套控制软件的计算机,下位机为AT89C51单片机,上位机通过RS232总线与下位机通信,下位机通过电力电缆、通信电缆控制转辙机动作及监测转辙机的状态。
(二)、转辙机仿真结构图
转辙机仿真模型由单片机、步进电机、步进电机驱动器、模拟限位开关、RS232串行接口、转辙机状态表示灯等组成。
单片机通过RS232接收到上位机发出的控制信号后,经过逻辑处理,输出驱动信号,信号经过ULN2003A芯片放大后驱动步进电机转动,完成转辙机转换道岔的动作。道岔转换完毕后,单片机将检测转辙机当前的状态,并回传到上位机中。也可以从上位机发送转辙机状态查询指令,单片机接收到查询指令后,将查询转辙机的状态并将结果回传到上位机中。
模拟限位开关可模拟转辙机是否转动到了相应的位置,到达正确的位置后,相应的表示灯将点亮。
(三)RS232串口通信模块COMPIM简介
RS-232是美国电子工业协会EIA(Electronic Industry Association)制定的一种串行物理接口标准。RS是英文“推荐标准”的缩写,232为标识号。RS-232是对电气特性以及物理特性的规定,只作用于数据的传输通路上,它并不内含对数据的处理方式。RS232电缆通常由9条不同的电线组成,尽管在某些连接器中使用了25条电线。 每条线在数据传输中都有不同的用途。 RS485电缆只有三根电线,两根用于数据传输,另一根用于接地。双向传输-RS232是全双工的,这意味着它可以双向发送和接收数据。RS232的通信距离一般在15m以内,超过这个距离可能会导致通信失败。
COMPIM模型是串口的物理接口模型,里面封装了RS232串行端口和电平转换芯片,可以直接与单片机相连而不需要额外的元器件辅助。传入的串行数据被缓冲并呈现给电路作为数字信号,同时在PC的物理COM端口处出现CPU或UART模型生成的串行数字数据。 COMPIM有八个引脚:TXD,RXD,CTS,RTS,DSR,DTR,DCD和RI,TXD,RTS和DTR输入设备,并在物理端口上变为输出。各个引脚的定义如下表所示。
(四)ULN2003A步进电机驱动器简介
ULN2003A,是一种高压大电流的共发射极达林顿晶体管数组集成电路,内含7组达林顿对管,如图5(a)所示,每组对管的电流容量是500mA,输出的电压最高50V。该集成电路还集成了7只共阴极形式连接的续流二极管,用于电感性负载的开关动作的电流续流。ULN2003的引脚功能如表3所示。
ULN2003在电子电路里的主要特点是大电流容量和高电压输出。常作为驱动器使用,每组达林顿对管可并联使用以达成更大的电流容量,甚至可以几颗集成电路芯片堆叠并联使用。步进马达一般需要驱动器件有大电流输出的能力,而微控制器等小电流的集成电路是不能直接驱动马达的,因此可用作步进马达的驱动器。ULN2003内部的7组达林顿对管可以独立操作,因为它们的电路连接上除了发发射极是一并接地共享E/GND引脚、续流二极管是共阴极接法共享一个COM引脚以外,集电极
1C-7C以及基极1B-7B的引脚都是独立对应的7组。若作为步进马达驱动器,则COM一端需要与步进马达的公共供电端连接,为马达的反电动势提供电流续流能力。
器件主要参数:
(1)、单个集电极电流容量有500mA
(2)、输出电压达50V(另有支持100V输出的版本)
(3)、集成续流二极管
(4)、输出可兼容于TTL以及5V的CMOS逻辑电平
(5)、基极最低输入电压仅0.7V,常规也仅需2V左右
(五)步进电机
1、步进电机简介
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点,使得步进电机在速度、位置等控制领域的控制操作非常简单。虽然步进电机应用广泛,但它并不像普通的直流和交流电机那样在常规状态下使用,它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用。
(1)步进电机的静态指标
1)相数—电机内部的线圈组数。目前常用的有二相、三相、四相、五相步进电机。电机相数不同,其步距角也不同。一般二相电机的步距角为0.9°/1.8°,三相为0.75°/1.5°、五相为0.36°/0.72°。在没有细分驱动器时,用户主要靠选择不同相数的步进电机来满足自己步距角的要求.如果使用细分驱动器,则“相数”将变得没有意义,用户只需在驱动器上改变细分数,就可以改变步距角。
2)步距角—表示控制系统每发一个步进脉冲信号,电机所转动的角度。电机出厂时给出了一个步距角的值,如86BYG250A型电机的值为0.9°/1.8°(表示半步工作时为0.9°、整步工作时为1.8°),这个步距角可称为“电机固有步距角”,它不一定是电机实际工作时的真正步距角,真正的步距角和驱动器有关。
3)拍数—完成一个磁场周期性变化所需脉冲数或导电状态.或指电机转过一个步距角所需脉冲数。以四相电机为例,有四相四拍运行方式,即AB-BC-CD-DA-AB:四相八拍运行方式,即A-AB-B-BC-C-CD-D-DA-A
4)定位转矩—电机在不通电状态下,转子自身的锁定力矩(由磁场齿形的谐波以及机械误差造成)。
5)保持转矩—步进电机通电但没有转动时,定子锁住转子的力矩。它是步进电机最重要的参数之一,通常步进电机在低速时的力矩接近保持转矩。由于步进电机的输出力矩随速度的增大而不断衰减,输出功率也随速度的增大而变化,所以保持转矩就成了衡量步进电机最重要参数之一。比如,当人们说2N·m的步进电机时,在没有特殊说明的情况下,是指保持转矩为2N·m的步进电机。
(2)本项目中应用的步进电机
在本项目中的步进电机是四相步进电机。为了使步进电机的带负载能力更强,并且运行能够做到又平又稳,选用八拍驱动方式。四相八拍方式的通电顺序为:A相线圈最先开始通电,随后转换为A、B两相线圈同时通电,再单独通电给B相,之后对BC两相线圈同时通电……即按A→AB→B→BC→C→CD→D→DA→A…顺序进行。当步进电机定子绕组按一定顺序轮流通电时,转子就沿一定方向一步步转动起来。
2、步进电机驱动电路
如图8所示,四相步进电机的A、B、C、D四相分别接入单片机的P2.0、P2.1、P2.2、P2.3接口。步进电机采用四相步进电机,工作方式为八拍驱动。如表4所示,单片机P2口输出脉冲序列{0x02,0x06,0x04,0x0c,0x08,0x09,0x01,0x03},经过ULN2003A放大后即可使步进电机转动一圈。当需要反转时,只需反序列输出脉冲信号即可实现步进电机反向旋转。
(六)模拟限位开关
在实际应用中,单片机通过检测转辙机上的限位开关状态判断转辙机是否转动到位,在仿真模拟中,模拟限位开关的动作是困难的。这里用到的方法是,单片机经过端口输出高电平,经过Q1、Q2放大器放大信号后使继电器RL1、R2吸合。
如图9所示,继电器RL1的励磁电路与单片机P3.2口相连接,继电器触点一端接地,另外一端与单片机P3.4相连接。当转辙机转动到定位时,单片机P3.2置“1”,输出的高电平经过Q1放大器放大后,电流流过继电器RL1的线圈,驱动继电器吸合。继电器动静触点相连接,单片机的P3.4口经过继电器的接点接地,变为“0”,此时检测P3.4的状态,如果P3.4为低电平,说明转辙机已经转动到了定位,表示灯电路动作,定位表示灯亮起。反位的模拟限位开关同理。
(七)程序设计
1、程序流程图
2、程序代码
[hide]
/**************************************************************************************
基于单片机和RS232串行通信的模拟转辙机设计仿真
作者:Kanoer 日期:2021年07月07日
***************************************************************************************/
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define OUT P2
sbit dw_out = P3^2; //模拟定位到达输出口
sbit fw_out = P3^3; //模拟反位到达输出口
sbit dw_over = P3^4; //限位开关定位到达
sbit fw_over = P3^5; //限位开关反位到达
sbit dwd = P1^0; //定位表示灯
sbit fwd = P1^1; //反位表示灯
uchar a,b,rec;
uchar code turn[] = {0x02,0x06,0x04,0x0c,0x08,0x09,0x01,0x03}; //电机旋转一周脉冲组 //code,将数组turn存储在ROM中,节省RAM资源
uchar code turnres[] = {0x03,0x01,0x09,0x08,0x0c,0x04,0x06,0x02}; //反转
void delay(unsigned int n) //延迟函数,用于步进电机调速
{
unsigned i=0,j=0;
for(i=0;i<n;i++)
{
for(j=0;j<120;j++);
}
}
void forward() //电机正转(反位转定位)
{
if (fw_over==0) //如果转辙机处于反位状态
{
fwd=0; //转辙机动作,反位表示灭灯
for (b=0;b<=4;b++)
{
for(a=0;a<=7;a++)
{
OUT = turn[a];
delay(100);
}
}
fw_out=0;
dw_out=1; //转辙机转到定位
}
}
void reverse() //电机反转(定位转反位)
{
if (dw_over==0) //如果转辙机处于定位状态
{
dwd=0; //转辙机动作,定位表示灭灯
for (b=0;b<=4;b++)
{
for(a=0;a<=7;a++)
{
OUT = turnres[a];
delay(100);
}
}
dw_out=0;
fw_out=1; //转辙机转到了反位
}
}
void com_start() //串口通信初始化,波特率9600,晶振11.0592 MHz
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1;
}
void machine_status() //模拟转辙机初始状态设定
{
dw_out=0;
fw_out=0;
fwd=0;
dwd=0;
fw_out=1; //设定转辙机初始状态为反位
}
void light() //转辙机状态表示灯
{
if (dw_over==0) {dwd=1;} else {dwd=0;} //定位表示判断
if (fw_over==0) {fwd=1;} else {fwd=0;} //反位表示判断
}
void main()
{
com_start();
machine_status();
while(1)
{
light();
if(RI)
{
RI=0;
rec=SBUF; //读取接收到的串口数据
if (rec=='D') {forward();light();SBUF='D';while(TI==0);TI=0;} //反位转定位
if (rec=='F') {reverse();light();SBUF='F';while(TI==0);TI=0;} //定位转反位
if (rec=='C') //查询转辙机状态
{
if (dwd==1) //定位灯亮起
{
SBUF='D';
while(TI==0);
TI=0;
}
if (fwd==1) //反位灯亮起
{
SBUF='F';
while(TI==0);
TI=0;
}
}
}
}
}
[/hide]
五、仿真结果
(一)上电初始化
(二)反位转定位
(三)定位转反位
(四)状态查询
六、参考文献及资料
石斐. 基于Keil的永磁减速步进电机控制系统的设计及实现[D].苏州大学,2015.
余逸风. 二相混合式步进电机细分控制技术研究及驱动器的设计[D].广西科技大学,2015.
袁晓溪. 基于单片机的LED显示系统[D].吉林大学,2015.
化腾飞. 基于高性能单片机的无线LED彩灯控制系统的设计与实现[D].太原理工大学,2015.
古志坚. 基于单片机的步进电机控制系统研究[D].华南理工大学,2013.
王静. 基于单片机的数据串口通信[D].长江大学,2013.
马晓云. 基于串口通信的上/下位机控制系统软硬件设计[D].苏州大学,2013.
汪姝. 基于单片机的步进电机驱动控制系统的设计与实现[D].南昌大学,2012.
蔡晶晶. 基于单片机的步进电机伺服控制器的设计[D].内蒙古农业大学,2012.
周建春. 基于单片机和PC串口通信的温度采集系统设计[D].苏州大学,2010.
方爱平. 基于单片机的步进电机控制系统的设计与实现[D].浙江工业大学,2009.
PC 机与单片机通信(RS232 协议):https://blog.csdn.net/m0_46202433/article/details/109085815
51单片机+ESP8266-01通过串口通信控制LED灯:https://blog.csdn.net/qq_41984175/article/details/104566513
实验二:串行通信实验:
51单片机串口通信的发送与接收:http://www.51hei.com/bbs/dpj-78339-1.html
C51语言:https://blog.csdn.net/mars_ljh/article/details/106049555
51单片机实验1——串行通信(TX/RX)——数码管显示串行口接收的字符的ASCII码:https://blog.csdn.net/weixin_42532989/article/details/107526004
【实验】实验课总结4 实验三:https://blog.csdn.net/qq_43710355/article/details/106223124
keil中C51关键字code用法:https://blog.csdn.net/m0_46559794/article/details/108006698
七、感谢
https://convertio.co 提供了MP4转GIF转换服务
https://www.online-convert.com/fr 提供了PDF转SVG服务
https://app.diagrams.net 提供了流程图在线绘制服务
Comments 2 条评论
看看是什么代码
|´・ω・)ノ