步进电机角度控制

  • 格式:doc
  • 大小:81.00 KB
  • 文档页数:12

下载文档原格式

  / 12
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

步进电机角度控制

1.编程控制步进电机顺时针行走,180度(角度显示在七段LED上),3秒后行走45度(显示角度),3秒后行走90度(显示角度),3秒后行走180度,依次循环。

#include

#define uchar unsigned char

#define uint unsigned int

#define PA 0x60

#define PB 0x61

#define PC 0x62

#define CTRL 0x63

uchar pai[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};

uchar teble[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

uint m=0;

uchar a3,a2,a1,a0=0;

void delay(uint xms)

{

uint i,j;

for(i=xms;i>0;i--){

for(j=110;j>0;j--);}

}

void display()

{

outp(PA,teble[a0]);

outp(PB,0x07);

delay(10);

outp(PA,teble[a1]);

outp(PB,0x0b);

delay(10);

outp(PA,teble[a2]);

outp(PB,0x0d);

delay(10);

outp(PA,teble[a3]);

outp(PB,0x0e);

delay(10);

}

void zhuan(uint zz)

{

uint temp,i,j;

a3=zz/1000

a2=(zz%1000)/100;

a1=(zz%100)/10;

a0=(zz%10);

temp=(uint)(zz/15*4);

for(i=temp;i>0;i--)

{

for(j=3;j>0;j--)

display();

outp(PC,pai[m]);

m++;

if(m>7)

m=0;

}

}

void main()

{

int i;

outp(CTRL,0x88);

while(1)

{

zhuan(180);

for(i=75;i>0;i--)

display();

zhuan(45);

for(i=75;i>0;i--)

display();

zhuan(90);

for(i=75;i>0;i--)

display();

}

}

2.完成A/D转换实验并把转换结果在七段LED上显示出来。

#include

#define uchar unsigned char

#define uint unsigned int

#define PA 0x60

#define PB 0x61

#define PC 0x62

#define CTRL 0x63

#define AD 0x00

uchar pai[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; uchar teble[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; uint m=0;

uchar a3,a2,a1,a0;

void delay(uint xms)

{

uint i,j;

for(i=xms;i>0;i--){

for(j=110;j>0;j--);}

}

void display()

{

outp(PA,teble[a0]);

outp(PB,0x07);

delay(10);

outp(PA,teble[a1]);

outp(PB,0x0b);

delay(10);

outp(PA,teble[a2]);

outp(PB,0x0d);

delay(10);

outp(PA,teble[a3]);

outp(PB,0x0e);

delay(10);

}

void main()

{

int temp=0;

outp(CTRL,0x88);

while(1)

{

temp=inp(AD);

a3=0;

a2=0;

a1=temp/16;

a0=(temp%16);

display();

}

}

3.如实验指导书(3)。

#include

#define uchar unsigned char

#define uint unsigned int

#define PA 0x60

#define PB 0x61

#define PC 0x62

#define CTRL 0x63

#define AD 0x00

uchar pai[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //正转电机时序

uchar pai_fan[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //反转电机时序

uchar teble[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, //数码管段选

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

uint jiao[]={0,0,0}; //贮存三次设置的电机角度

uint m=0; //记录电机相序

uint disp; //数码管显示的数值

uint set_flag,jiao_max,jiao_now,change_flag=1,zhuan_flag;

uint qian,bai,shi,ge;

void delay(uint xms) //延时函数,约一毫秒

{

uint i,j;

for(i=xms;i>0;i--){

for(j=110;j>0;j--);}

}

void display() //显示子程序

{

uchar a3,a2,a1,a0;

uint temp1,temp;

if(change_flag==0) //如果change_flag=0;显示实时AD转换后对应的角度

{ //否则显示disp