77范文网 - 专业文章范例文档资料分享平台

4步进电机定位控制实验 - 图文(2)

来源:网络收集 时间:2019-07-30 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

backup[i][j] = KeySta[i][j]; //刷新前一次的备份值 } } } }

/* 按键扫描函数,需在定时中断中调用,推荐调用间隔1ms */ void KeyScan() {

unsigned char i;

static unsigned char keyout = 0; //矩阵按键扫描输出索引 static unsigned char keybuf[4][4] = { //矩阵按键扫描缓冲区 {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF} };

//将一行的4个按键值移入缓冲区

keybuf[keyout][0] = (keybuf[keyout][0] << 1) | KEY_IN_1; keybuf[keyout][1] = (keybuf[keyout][1] << 1) | KEY_IN_2; keybuf[keyout][2] = (keybuf[keyout][2] << 1) | KEY_IN_3; keybuf[keyout][3] = (keybuf[keyout][3] << 1) | KEY_IN_4; //消抖后更新按键状态

for (i=0; i<4; i++) //每行4个按键,所以循环4次 {

if ((keybuf[keyout][i] & 0x0F) == 0x00)

{ //连续4次扫描值为0,即4*4ms内都是按下状态时,可认为按键已稳定的按下

KeySta[keyout][i] = 0; }

else if ((keybuf[keyout][i] & 0x0F) == 0x0F)

{ //连续4次扫描值为1,即4*4ms内都是弹起状态时,可认为按键已稳定的弹起

KeySta[keyout][i] = 1; } }

//执行下一次的扫描输出

keyout++; //输出索引递增 keyout = keyout & 0x03; //索引值加到4即归零

switch (keyout) //根据索引,释放当前输出引脚,拉低下次的输出引脚 {

case 0: KEY_OUT_4 = 1; KEY_OUT_1 = 0; break; case 1: KEY_OUT_1 = 1; KEY_OUT_2 = 0; break; case 2: KEY_OUT_2 = 1; KEY_OUT_3 = 0; break; case 3: KEY_OUT_3 = 1; KEY_OUT_4 = 0; break; default: break;

} }

/* 电机转动控制函数 */ void TurnMotor() {

unsigned char tmp; //临时变量

static unsigned char index = 0; //节拍输出索引

unsigned char code BeatCode[8] = { //步进电机节拍对应的IO控制代码 0xE, 0xC, 0xD, 0x9, 0xB, 0x3, 0x7, 0x6 };

if (beats != 0) //节拍数不为0则产生一个驱动节拍 {

if (beats > 0) //节拍数大于0时正转 {

index++; //正转时节拍输出索引递增 index = index & 0x07; //用&操作实现到8归零 beats--; //正转时节拍计数递减 }

else //节拍数小于0时反转 {

index--; //反转时节拍输出索引递减

index = index & 0x07; //用&操作同样可以实现到-1时归7 beats++; //反转时节拍计数递增 }

tmp = P1; //用tmp把P1口当前值暂存 tmp = tmp & 0xF0; //用&操作清零低4位

tmp = tmp | BeatCode[index]; //用|操作把节拍代码写到低4位

P1 = tmp; //把低4位的节拍代码和高4位的原值送回P1 }

else //节拍数为0则关闭电机所有的相 {

P1 = P1 | 0x0F; } }

/* T0中断服务函数,用于按键扫描与电机转动控制 */ void InterruptTimer0() interrupt 1 {

static bit div = 0;

TH0 = 0xFC; //重新加载初值 TL0 = 0x67;

KeyScan(); //执行按键扫描

//用一个静态bit变量实现二分频,即2ms定时,用于控制电机

div = ~div; if (div == 1)

{ delay(speed); TurnMotor(); } }

void delay(unsigned int i) { while(i--);

②实验结果:

我们借鉴了板子的内带按键、步进电机、定时器例程程序,重新进行编写,实现了步进电机的加减速控制和正反转控制,在学习板子的过程中,我们小组遇到的问题就是对C语言的不熟悉,起码有两年没有接触C语言程序了,程序的很多函数,语句不知道该怎么使用,一些C语言的规则也记得不太清了,在学习的过程中需要不断复习,上网查资料慢慢的才把C语言重新捡回来,经过一周的学习,我们也初步掌握了C语言程序与板子之间的正常单向通信,以及板子基本模块功能的实现,在编写程序过程中,我们常遇到的问题就是编写的程序下载到单片机后,和我们的预想情况不一样,如步进电机加减速定时函数的调用,经过的反复的修改,变量的定义错误,前置声明的缺少等,修改好程序后发现电机还是不能转,经过排查才发现,板子的跳线没有调好,在设计的过程中还遇到了很多其他的问题,如按键扫描不能正常工作,按键的状态备份没有设置好等等,经过了反复的排查修改才最后调试成功,通过这两星期的学习,我们小组对51单片机的部分功能有了进一步的认识。

图1-1 单片机步进电机运行照片

(二)要求(2)(3)的实现:

我们利用实验室的PLC步进电机控制系统实现(2)(3)的要求,其步进电机的频率-时间图如图2-1所示。

图2-1 步进电机的频率-时间图

①实验过程(包括主要步骤、代码分析)

(1)了解触摸屏Touch-Win、西门子S7-200工作原理和驱动器KR-5MC 参数设置。

(2)根据实验要求,画出实验硬件接线图,如图2-2所示。

图2-2 实验硬件接线图

(3)依据实验连线图接线,同时设置电机参数:将细分调到“FULL”档(对应电机接收一个脉冲时转动0.72度);将时钟调到“1”档(对应的CW控制输出脉冲,CCW控制转向)。接线和电机参数设置无误后请老师检查是否正确。

(4)设计如图2-3所示的基于Touch-Win的人机界面,同时设置相关参数。其中量程、最大转速是需要输入的变量,分别设定为VW1和VW11。M0.1=1时电机启动,M0.0=1代表电机正转,丝杠向电机方向运动;M0.0=0代表电机反转,丝杠朝电机反方向运动。

图2-3 触摸屏工作界面

其中触摸屏中各个变量对应关系如表1所示: 表1 触摸屏中变量对应关系表 变量 M0.1 M0.0=1 M0.0=0 VW1 VW11 M0.3

(5)根据实验要求及其触摸屏的相关输入变量,设计基于西门子S7-200的PLC程序。已知控制器接收一个脉冲转动0.72度,每500个脉冲电机转一圈,丝杠的螺距是2毫米,电机转一圈丝杠前进2毫米。

名称 启动 左移 右移 行程设定值 最大转速设定值 电机图标

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库4步进电机定位控制实验 - 图文(2)在线全文阅读。

4步进电机定位控制实验 - 图文(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/jiaoyu/666500.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: