西电微机系统课程设计——步进电机开环控制系统设计

微机系统步进电机控制实践与心得
本文详细介绍了西电微机系统课程设计中关于步进电机开环控制系统的实现,包括系统功能、设计要求、硬件连线和代码实现。通过手动调节电位器模拟水位,控制步进电机转动调节水闸。设计中涉及了A/D转换、步进电机控制、数码管显示和速度调节等功能,并分析了实际操作中遇到的问题,如步进电机速度不恒定和响应延迟。作者通过此次课程设计加深了对微机系统接口和控制原理的理解。

西电微机系统课程设计——步进电机开环控制系统设计


一、课程设计目的

1.掌握微机系统总线与各芯片管脚连接方法,提高接口扩展硬件电路的连接能力。

2.加深对 A/D 和并行接口芯片的工作方式和编程方法的理解。

3.搞懂步进电机的工作原理及控制方式,掌握开环控制系统的设计思路和实现方法。


二、课程设计的内容

手动调节电位器旋钮(0V~5V),通过 ADC0809 模拟输入水库水位 0 米~50 米,CPU收到水位信号后,根据水位高度控制步进电机(水闸)进行调节。

在这里插入图片描述


三、系统功能与设计要求

基本功能要求

手动调节电位器旋钮,步进电机根据水位实时调节水闸。设水闸全部打开需要逆时针旋转 10 圈 (10 x 360°)度。随着上游进入水库的水流量变化,水库水位不断变化(手动调节电位器旋钮),每到一定高度,步进电机顺时针(关)或逆时针(开)旋转一定的角度调节水闸开启程度,从而控制水库水位在 10~50 米之间。调节精度控制在±5%,调节规律如下:

在这里插入图片描述

步进电机采用四相八步控制,开关顺序如图:

在这里插入图片描述
步进电机不使用时要关闭,不可以停止在一个相位上时间过长,会导致发热;

发挥部分

1.增加速度调节功能。水位在 10~40 米期间,步进电机中速转动,水位低于 10 (水位过低)或高于 40 米(水位过高)时,步进电机高速转动。

2.增加实时水位显示。用数码管 DLED 高两位显示当前水位(00~50 米)。

3.增加水闸开启程度显示。用数码管 DLED 低两位实时显示水闸开启程度(00~10圈)。


四、操作步骤

  1. 首先根据题目要求选择合适的器件并参考示例代码了解各器件的操作方法:
器件名称 功能
电位器 获取0~5V的模拟量
ADC0809 模拟量转换为数字量
步进电机 模拟水闸转动
数码管 显示必要参数
LED 根据水位亮不同的灯
74HC273N 锁存器,锁存控制LED的信号
系统总线 控制其他器件
8255 将系统总线的命令传输到步进电机和数码管
  1. 阅读硬件接口手册,粗略连接各器件,并加部分的流程控制,画出大致的流程控制图:

在这里插入图片描述

  1. 对于一些实验要求的分析:
    • 由于水位可能下降也可能上升,所以步进电机要记录历史状态,根据上一次水位信息来判断正转和反转;
    • 步进电机的速度控制通过延时不同时间来实现,延时函数可以粗略地使用空循环;
    • 数码管水位信息应该随步进电机旋转动态变化,所以应该放入步进电机旋转的函数中不停得对数码管进行刷新以实现;
    • 步进电机的每次旋转停下之后的相位应该被记录,下一次旋转应该在上一次停下的相位进行继续驱动,否则会出现旋转开始时倒转的现象;
    • 步进电机正转就是根据控制图由上到下循环out给步进电机的控制端口,同样反转是由下到上循环out给步进电机的控制端口;由于步进角我们并不清楚,所以采用测验来大致确定步进角,测验结果为步进电机运行40步为旋转一圈,在代码实现中,可以通过acircle这个全局变量来修改旋转一圈的步数;

五、硬件连线图

在这里插入图片描述
在这里插入图片描述


六、代码实现

/*
	步进电机开环控制系统设计:
		电位器功能描述:
			调节电位器旋钮(0~5V)作为水位;
			动态获取模拟量并转换为数字量显示在数码管上;
			4s左右时间不旋转电位器则停止采样,进入控制水闸功能模块;
		8位数码管功能描述:
			数码管低2位显示水位(m);
			数码管高2位显示水闸开启程度,用百分比表示;
			数码管4(中间位置)显示旋转速度,1表示中速,2表示高速;
		步进电机功能描述:
			[0,10)m和[40,50]m水位时,高速旋转,每转一步60ms延时;
			[10,40)m时,中速旋转,每转一步160ms延时;
			可以根据历史水闸开启状态来关闸或开闸(即逆时针旋转和顺时针旋转);
		LED管功能描述:
        	[0,10)m水位时,黄灯闪烁;
			[10,50)m水位时,绿灯常亮;
			50m水位时,红灯闪烁;
*/
#define	u8 unsigned char
#define u16 unsigned int

/* 接口地址定义 */
#define IO8255_PC	0x272			//8255 C口地址;
#define IO8255_Con	0x273			//8255 控制字地址;
#define addr0809	0x250			//0809 地址;
#define IO273       0x230 			//74LS273地址;

/* 库函数定义 */
extern void outportb( unsigned int, char);						//写I/O;
extern char inportb( unsigned int );							//读I/O;

extern void cInitKeyDisplay();  //对键盘、数码管管理器初始化;

//将pBuffer指向的8字节缓冲区内容显示于F5区数码管上;
extern void cDisplay8(u8* pBuffer);

u8 buffer[8];			//用于显示数码管缓冲区,8个字节;
u8 SpeedNo;				//选择哪一级速度;
u8 StepDelay;			//转动一步后,延时常数;
u16 StepCount;			//转动步数;

//传给步进电机的值(四相八步);
u8 StepControl[8]={
   
   0x11, 0x99, 0x88, 0xcc, 0x44, 0x66, 0x22,
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OutlierLi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值