background image

以及利用个人计算机(PC)以程序语言产生信号再以 8255 界面卡输出。

信号产生器由于输出的信号为固定频率、振幅,因此弹性不大只适合运用在一般的检测方面;8051 与

68HC11 等单芯片制作成的单板计算机由于功能强、弹性大且价格低廉,因此常用于工业实务控制方面;至于

利用 PC 以程序语言产生信号再以 8255 界面至驱动电路的方式,由于程序撰写容易且除错方便、修改容易,

因此多为系统开发实验阶段所采用。

以程控而言,一般的做法是依照电机动作需求事先将程序撰写好,利用微电脑系统产生脉波信号,其中程序

内容包含有步进电机的起动、加速、减速、停止、归零、以及紧急情况处置等函式(Function)。我们利用以下的虚

拟程序来解释如何规划 8255 界面卡并产生脉波信号,同时利用 8255 界面卡的 A 埠(port)作为输出。由于此

程序中并未包含电机加速之功能,同时输出电流均为固定值,因此若以此程控电机运转,其运转情形就如同

以低速档驾车不但转速慢且电机容易发热。

#define Port_A 0x200 定义 8255A 端口之地址(ADDRESS)为 200

#define Port_B 0x201 定义 8255B 端口之地址为 201

#define Port_C 0x202 定义 8255C 端口之地址为 202

#define Control_Port 0x203 定义 8255 控制端口之地址为 203

#define TRUE      1

#include<dos.h>

#include<conio.h>

#include<process.h>

  

main()

{

int n, j, k;

int i[4]={0x01,0x02,0x04,0x08}; 正转脉波信号

int r[4]={0x08,0x04,0x02,0x01}; 逆转脉波信号

outportb(Control_Port,0x80); 规划 8255A.B.C 埠均为输出埠

while(j) 电机正转循环

{

for (n=0;n<4;n++)

{

outportb(Port_A,i[n]); 将脉波信号由 A 端口输出,电机正转一个步进角

if(kbhit()) 

{

j=0;

  outportb(Port_A,0x00); 将脉波信号归零,电机停止

exit(0);

}

}

}

while(k) 电机反转循环

{

for (n=0;n<4;n++)

{

outportb(Port_A,r[n]); 将脉波信号由 A 端口输出,电机反转一个步进角

  if(kbhit())