机电系统计算机控制应用实例
S0 (3)PLC接线图 3 接线图 S1 S2 S3 S4 SB5 SB6 S7 S8
I0.0 I0.1 I0.2 I0.3 I0.4 I0.5 I0.6 I0.7 I1.0
Q0.0 Q0.1 Q0.2 M
1L IM 2M M DC24V L
DC24V
3.程序设计 程序设计 (1)转速控制 接通S1,再接 再接S0,快速 接通 再接 快速 接通S2 再接 慢速1 再接S0,慢速 接通 2,再接 慢速1 接通S3 再接 慢速3 再接S0,慢速 接通 3,再接 慢速3 三相绕组的通电顺序: AB 三相绕组的通电顺序:A CA A (2)反转控制 接通S4, 接通 ,再重复上述过程 三相绕组的通电顺序: BA 三相绕组的通电顺序:B CB B (3)步数控制 10步接 、100步接 ,再接 步接S7、 0步接S6,再接S0 步接
机电系统计算机控制应用实例
第1节 步进电机控制
• 步进电机是一种以数字脉冲信号控制的电机装置, 步进电机是一种以数字脉冲信号控制的电机装置,将 相对的信号转变为输出的旋转角度, 相对的信号转变为输出的旋转角度,每一个基本旋转角度 称为一个步进角度,此乃步进电机名称的由来, 称为一个步进角度,此乃步进电机名称的由来,因此它可 以做精确的定位。常见的步进角度为1 若输入200 以做精确的定位。常见的步进角度为1.8度,若输入200 个控制脉冲即可令电机旋转一圈。步进电机的主要特性: 个控制脉冲即可令电机旋转一圈。步进电机的主要特性: 1.电机的旋转角度与输入脉冲数成比例 角度的误差小, 电机的旋转角度与输入脉冲数成比例, 1.电机的旋转角度与输入脉冲数成比例,角度的误差小, 而且不会产生累积的误差。 而且不会产生累积的误差。 2.可以数字脉冲控制信号做开路方式控制 可以数字脉冲控制信号做开路方式控制, 2.可以数字脉冲控制信号做开路方式控制,避免使用复杂 的反馈控制电路,降低系统制作成本。 的反馈控制电路,降低系统制作成本。 3.利用输入脉冲的频率高低即可做转速的调整 利用输入脉冲的频率高低即可做转速的调整。 3.利用输入脉冲的频率高低即可做转速的调整。 4.电机的启动 停止、加速、减速、正反转反应快, 电机的启动、 4.电机的启动、停止、加速、减速、正反转反应快,容易 控制。 控制。 5.直接连至负载如轮子 做超低速同步运转。 直接连至负载如轮子, 5.直接连至负载如轮子,做超低速同步运转。 6.步进电机的结构简单 可靠性高, 步进电机的结构简单, 6.步进电机的结构简单,可靠性高,几乎不须要太多的保 使用寿命长。 养,使用寿命长。
• • • • • •
1.2步进电机控制方式
• 一般步进电机的驱动方式可以采用以下3 种方式: • 1.单相激磁控制 • 2.二相激磁控制 • 3.半步激磁控制
1.2.1单相激磁控制
1.2.2.二相激磁控制
1.2.3 半步激磁控制
1.3 步进电机应用
•
•
• • • •
;****************************步进电机的驱动 步进电机的驱动*************************************** 步进电机的驱动 ; 步进电机的驱动信号必须为 脉冲信号 转动的速度和脉冲的频率成正比 脉冲信号!!! 转动的速度和脉冲的频率成正比!!! ; 本步进电机步进角为 7.5度 . 一圈 360 度 , 需要 48 个脉冲完成 个脉冲完成!!! 度 ;--------------------------------------------------------------------------------; A组线圈对应 P2.4 组线圈对应 ; B组线圈对应 P2.5 组线圈对应 ; C组线圈对应 P2.6 组线圈对应 ; D组线圈对应 P2.7 组线圈对应 ; 正转次序 AB组--BC组--CD组--DA组 (即一个脉冲 正转 7.5 度) 正转次序: 即一个脉冲,正转 组 组 组 组 即一个脉冲 ;----------------------------正转 正转-------------------------正转 ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV R3,#144 正转 3 圈共 144 脉冲 START: JZ START 对 A 的判断 当 A = 0 时则转到 START 的判断,当 MOV R0,#00H MOV P2,A START1: LCALL DELAY MOV P2,#00H INC R0 MOV A,R0 DJNZ R3,START1 MOV DPTR,#TABLE MOV P2,#00H MOVC A,@A+DPTR
单片机驱动电路2
• • • •
•
•
•
#include <AT89X51.h> static unsigned int count; static unsigned int endcount; void delay(); void main(void) { count = 0; P1_0 = 0; P1_1 = 0; P1_2 = 0; P1_3 = 0; //允许 允许CPU EA = 1; //允许CPU 中断 //设定时器 设定时器0 TMOD = 0x11; //设定时器0和1为 16位模式 位模式1 16位模式1 //定时器 定时器0 ET0 = 1; //定时器0 中断允许 TH0 = 0xFC; //设定时每隔 TL0 = 0x18; //设定时每隔 1ms中断一次 1ms中断一次 //开始计数 TR0 = 1; //开始计数 startrun:
输出设备 A 步进 电机 B 绕组 C
输出点编号 Q0.0 Q0.1 Q0.2
定时器计数器 T37---快速 周期为0.1 T37---快速,周期为0.1S 快速, T38---慢速1,周期为1S 慢速1 周期为1 慢速 T39---慢速2,周期为10 慢速2 周期为10 10S 慢速 C0 ---100步控制记数 步控制记数 C1 ---10步控制记数 步控制记数
• }
• •
void forward(void) {
• • • • • • • • • • • • • •
P3Test=P3&07; if ( P3Test==1||P3Test==2)no=4; if ( P3Test==4) no=8; for (i=0;i<no;i++) { if (P3Test==1) P1=STEP1[i]; if (P3Test==2) P1=STEP2[i]; if (P3Test==4) P1=STEP3[i]; while(S1Flag); } }
B
BC
C
A
AC
C
2.2 全自动洗衣机控制系统
启动 按钮 停止 按钮 排水 按钮 低水位 开关 外桶 高水位 开关
内桶
洗涤 电机
ห้องสมุดไป่ตู้
拨盘
• 1.控制要求(流程图)
• /P1.0~P1.3口接一排步进电机A,B,NA.NB四个驱动器的输入端 P3.0~P3.2接3个开关 控制三种运行方式 P3.3 P3.4分别控制正反 转 • #include "reg51.h" • unsigned char i,c,no,P3Test; • #define uchar unsigned char; • #define uint unsigned int; • //unsigned int m; • uchar data STEP1[]={1,2,4,8}; • uchar data STEP2[]={9,3,6,12}; • uchar data STEP3[]={1,3,2,6,4,12,8,9}; • bit S1Flag=0; • void t100msint() interrupt 3 • • • • { TL0=-5000%256; TH0=-5000/256; S1Flag=~S1Flag;
1.4 直流电机驱动
• 1.控制方式 • PWM 脉冲调宽式 • PFM 脉冲调频式
典型生产过程的PLC 第二节 典型生产过程的PLC 实例
2.1 三相步进电机控制
步进电机: 步进电机:将电脉冲信号变换成相应的角位移的执 行元件. 行元件. 1.控制要求 控制要求 (1)转速控制 (2)正、反转控制 (3)步数控制 2.硬件设计 硬件设计 选择PLC型号 (1)选择 型号 CPU224(I14/O10) ( (2)I/O地址分配 地址分配
•P1_3 = 0; P1_0 = 1; delay(); P1_0 = 0; P1_1 = 1; delay(); P1_1 = 0; P1_2 = 1; delay(); P1_2 = 0; P1_3 = 1; delay(); goto startrun; } //定时器0中断处理 void timeint(void) interrupt 1 { TH0=0xFC; TL0=0x18; //设定时每隔1ms中断一次 count++; } void delay() { endcount=2; count=0; do{}while(count<endcount); }
输入设备 起动开关S0 起动开关 快速开关S1 快速开关 慢速开关S2 慢速开关
输入点编号 I0.0
I0.1 I0.2 I0.3 慢速开关S3 慢速开关 正反转开关S4 I0.4 正反转开关 单步开关SB5 I0.5 单步开关 100步开关 步开关S6 I0.6 步开关 I0.7 10步开关 步开关S7 步开关 I1.0 暂停开关S8 暂停开关
• void reverse(void) • { • P3Test=P3&07; • if ( P3Test==1||P3Test==2)no=4; • if ( P3Test==4) no=8; • for (i=no;i>=1;i--) • { • if (P3Test==1) • P1=STEP1[i-1]; • if (P3Test==2) • P1=STEP2[i-1]; • if (P3Test==4) • P1=STEP3[i-1]; • while(S1Flag); • } • }