|
实验19
步进电机实验
步进电机是将电脉冲信号转变为角位移或线位移的控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响。
步进电机必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用。因此用好步进电机却非易事,它涉及到机械、电机、电子及计算机等许多专业知识。
步进电机的主要特性:1、步进电机必须加驱动才可以运转, 驱动型号必须为脉冲信号,没有脉冲的时候, 步进电机静止,
如果加入适当的脉冲信号, 就会以一定的角度(称为步角)转动。转动的速度和脉冲的频率成正比。
2、本步进电机的步进角度为7.5度,一圈360度, 需要48个脉冲完成。
3、步进电机有瞬间启动和急速停止的优越特性。
4、改变脉冲的顺序, 可以改变转动的方向。
XL2000套件采用的是12v步进电机,为了演示的方便,
我们为他提供了5v的电源,此时转动力矩较小,读者也可自行把他应用为12v。该步进电机的耗电流为200ma左右, 采用
uln2003驱动,驱动端口为p1.0,p1.1,p1.2,p1.3.
由于uln2003本身是一个反向器,因此在实际应用中我们在他前面设计了一个74ls14的反向器。使他最终的结果还是同相。
相关原理:

程序运行照片:

接线方法:用一根4PIN排线一端插入P1.0-1.3,另一端插入步进电机JP31口
|
正转
|
|
步数 |
p1.0 |
p1.1 |
p1.2 |
p1.3 |
|
03h |
1 |
1 |
1 |
0 |
0 |
|
09h |
2 |
1 |
0 |
0 |
1 |
|
0ch |
3 |
0 |
0 |
1 |
1 |
|
06h |
4 |
0 |
1 |
1 |
0 |
|
反转
|
|
步数 |
p1.0 |
p1.1 |
p1.2 |
p1.3 |
|
03h |
1 |
1 |
1 |
0 |
0 |
|
06h |
2 |
0 |
1 |
1 |
0 |
|
0ch |
3 |
0 |
0 |
1 |
1 |
|
09h |
4 |
1 |
0 |
0 |
1 |
|
程序流程图:

汇编语言参考程序:
org 0080h
x1:mov r3,#250
start:mov r0,#00h
start1:
mov p1,#0ffh
mov a,r0
mov dptr,#table
movc a,@a+dptr
jz start
cpl a
mov p1,a
call delay
inc r0
djnz r3,start1
mov r3,#250
start2:
mov p1,#0ffh
mov r0,#05
start3:mov a,r0
mov dptr,#table
movc a,@a+dptr
jz start2
cpl a
mov p1,a
call delay
inc r0
djnz r3,start3
jmp x1
delay: mov r5,#40;延时。
d1: mov r6,#10
d2: mov r7,#18
djnz r7,$
djnz r6,d2
djnz r5,d1
ret
table:
db 03h,09h,0ch,06h
db 00
db 06h,0ch,09h,03h
db 00
end
c语言参考程序:
#include<reg51.h> //头文件
#define uchar unsigned int //宏定义,为方便编程
#define uint unsigned int
#define MOTORSTEP P1 //宏定义,定义P1口为步进电机驱动端口
uchar code step[]={0x03,0x09,0x0c,0x06}; //步进电机驱动值数组
void delay() //步进电机每一步间延迟函数
{
uchar i=4000;
while(i--);
}
char code SST516[3] _at_ 0x003b; //仿真插入代码
main() //主函数
{
uchar i=0;
while(1)
{
for(i=0;i<4;i++) //4步一个循环
{
MOTORSTEP=step[i]; //取值赋给P1驱动口
delay(); //延迟
}
}
} |