控制步进电机C语言代码解释

Python015

控制步进电机C语言代码解释,第1张

我之前做过一个,步进电机模拟电梯运行的控制程序,是那种发一个信号走一步的那种,步进角比较大,好像是15度左右,我当时的做法就是加入系统延时,让程序给步进电机发送信号,通过控制延时来决定单位时间内步进电机转动的次数

我用的是永磁式步进电机,不知道你用的是什么样的,我使用的这种,步进角比较大,步进电机都是一步步转的,转快了就看不出步进电机是一步步转了

而当是步进电机正转是按这样的顺序发送信号,abcd,反转是dcba

转多少圈,就是循环给步进电机发送信号,使用程序控制发送信号的次数,至于怎么控制只要知道接口函数什么的还是不难的。

如果还是不大明白,我倒是可以帮你看看程序

中断2,启动-停止切换(通过切换flag_status),显示状态。do-while是延时。

中断1,计数器count增1,如果达到预设的数值tab[sp],计数器归零,标志flag置1。这个好像与速度有关。通过调整延时时间来调整速度。

中断0,读键盘。没有scan_key()的源代码,不知道里面有些什么操作。

while(1){...}循环是电机运转,flag_status是状态,1转动,0停止。

没有看到与正转反转有关的代码。也许在motor_cw_ccw()函数里面,这个就是电机动一下的函数。

原程序不完整,没有相应函数、变量的定义及意义说明。难以确切理解。

#include <reg52.h>

sbit P0_0=P0^0

sbit P0_1=P0^1

unsigned char codes[2][8]={{0x02,0x06,0x04,0x0c,0x08,0x09,0x01,0x03}, //9,18,36,45,54,63,72,81度 顺时针

{0x0b,0x09,0x0d,0x0c,0x0e,0x06,0x07,0x03}} //9,18,36,45,54,63,72,81度 逆时针

unsigned char counts,flag,t

//度数,正/反转,速度控制

delay(unsigned char x) //延时

{

unsigned char i

for( i=0i<xi++)

}

main()

{

TMOD=0x01 //定时器初始化

TH0=(65536-5000)/256

TL0=(65536-5000)%256

EA=1

ET0=1

TR0=1

while(1)

{

if(P0_0==0) //判断正转按键是否按下

{

delay(5)

if(P0_0==0) flag=0 //判断是否真正按下

}

if(P0_1==0) //判断反转按键是否按下

{

delay(5)

if(P0_1==0) flag=1 //判断是否真正按下

}

}

}

void motor() interrupt 1

{

t++ //控制速度

if(t==8)

{

t=0

P1=codes[flag][counts] //转动

counts++

if (counts==8) counts=0 //角度重置

}

TF0=0 //重新计时

TH0=(65536-5000)/256

TL0=(65536-5000)%256

}