%fr/min\n",(-b+a)/2.0);
//计算速度(初值未减完)
elseprintf("thespeedis:
%fr/min\n",(-b+a+1024)/2.0);
//计算速度(初值已减完)
a=b;
c=0;
}
d--;
}
}
voidmain()
{
BYTEdata,x;
intbuf=0x33,d;//设置buff则表示线圈初始相为0011
printf("--------------------EXP27_19_BJDJ---------------------\n");
printf("1.8255(PA0-PA3)===BJDJ(BA-BD)\n");
printf("2.I/O(288-28F)===8255(CS)\n");
printf("3.8255(PC0-PC7)===TPC(K0-K7)\n");
printf("4.BJDJ(J5)===(BJDJ)\n");
printf("Pressanykeytobegin!
\n\n");
getch();
printf("K0-K6arespeedcontrol\n");
printf("K0isthelowestspeed\n");
printf("K6isthehighestspeed\n");
printf("K7isthedirectcontrol\n");
printf("pressanykeytoreturn!
\n");
if(!
Startup())/*打开设备*/
{
printf("ERROR:
OpenDeviceError!
\n");
return;
}
PortWriteByte(8255CTL,0x8b);/*设置8255工作方式,C口输入,A口输出*/
PortWriteByte(8253CTL,0x16);//设置8253计数器0控制字00010110
PortWriteByte(8253CTL,0x76);//设置8253计数器1控制字01110110
PortWriteByte(82530,200);//设置8253计数器0初值为200
PortWriteByte(82531,00);//设置8253计数器1初值低八位
PortWriteByte(82531,0x04);//设置8253计数器1初值高八位
while(!
kbhit())
{
PortReadByte(8255C,&data);//判断8255C口状态
if(data&1)d=1200;//设置K0延时时间
elseif(data&2)d=100;//设置K1延时时间
elseif(data&4)d=900;//设置K2延时时间
elseif(data&8)d=800;//设置K3延时时间
elseif(data&16)d=700;//设置K4延时时间
elseif(data&32)d=500;//设置K5延时时间
elseif(data&64)d=300;//设置K6延时时间
elsed=0;
if(d!
=0)
{
Payoff(d);//调用延时测速程序
if(data&128)//判断K7状态
buf=((buf&1)<<7)|(buf>>1);//线圈相位变为1001,顺时针转动
else
buf=((buf&128)>>7)|(buf<<1);//线圈相位变为0110,顺时针转动
PortWriteByte(8255A,buf);//从8255A口输出
}
else
PortWriteByte(8255A,0xff);
}
Cleanup();/*关闭设备*/
}
六、结论
实验实现了步进电机的控制和测速,通过开关k0-k5设置不同的转速,K7设置电机的转向,8253定时器0确定脉冲改变的频率,由8255查询定时时间是否到,输出相应的脉冲,以实现转速控制。
在电机转动时,光电传感器每转输出6个脉冲,8253的定时器1,2负责计数,以测速。
通过8255的C口输入不同的延时从而得到不同的脉冲频率,从8255A口输出来实现步进电机的转速。
初始的的脉冲频率由8253的计数器0来决定,其输入的时钟脉冲为1MHZ。
同时实验中的测速部分由光耦合器来输出脉冲(每转输出6个脉冲),8253的计数器1来计数。
由速度计算公式来计算速度。
七、心得体会
经过一个星期的实验,小组很成功地把课程设计完成,让我对C++语言更深入的了解,以及对可编程并行接口8255,可编程定时计数器8253在实际应用中的作用有了一定的认识,在程序的编写、电路的搭接方面得到了很大的锻炼。
团队的协作能力也有了很大的提高,但是在C++跟汇编语言的转换上还有很大的缺陷,希望以后更进一步。
八、意见与建议
以后可以多进行类似的实验型课程的学习这样更有利于我们将理论与实践结合起来,对知识的理解可能会更加深刻。
九、存在的问题
1.实验中的遇到的困难莫过于程序的编写,初次调试使用的是汇编语言,然而对于汇编语言的掌握程度还不够熟练,所以当整合控制和测速程序时,没有成功。
于是小组决定改成C++语言进行编写,这次的C++程序一部分由自己编写,一部分借鉴了网上程序,比如其中的速度计算公式的由来初步认为是
,计算速度的时间为5s。
当然借鉴的同时,大家也对其进行了仔细的分析,完全弄清程序逻辑,然后再对本次设计进行思想类似编写。
2.同样的程序,同样的线路,电脑没有正常运行,换到别的电脑上就可以了,不知道问题出在哪里。