当前位置:首页 > 基于单片机步进电机调速控制系统设计论文003 - 图文
常州信息职业技术学院电子与电气工程学院 毕业设计论文
图3.8 软件的模块结构图
3.2.1主程序的设计
步进电机伺服控制器上电之后, 始进行系统的初始化,一旦用户按下控制台的相应按键,发出中断请求,响应中断请求,调用相应的显示子程序,同时在液晶显示器实时显示步进电机的运行状态(RUN STATE),及运行的速度值(SPEED),电机初始速度设定为120n/niin.系统主流程图如图3.9所示。步进电机伺服控制器部分C语言程序如下
图3.9 系统主流流程图
步进电机伺服控制器部分C语言程序:
#include
18
常州信息职业技术学院电子与电气工程学院 毕业设计论文
void delay.nms (unsigned int n);//延时函数 void int i-led (); void show.led (int); void cmd-wr (); void ShowState ();
void clock (unsigned int Delay); void DoSpeed 0 ; //计算速度 //正转值,
#define RIGHT-RUN 1 //反转值
#define LEFT-RUN 0 #define LCD.DATA PI sbit RS=P0A0; sbit RW=P0A1; sbit E=P0A2; sbit P2.1=P2A1; sbit P2.0-P2A0; sbit P1_7=P1A7; sbit aO=P2A2; sbit al=P2A3; sbit a2=P2A4; sbit a3=P2A5; sbit a4=P2A6; sbit a5=P2A7;
char SpeedChar [] = {\(n/min): char StateChar[] = {\STATE:\char STATE—CW[] = {\char STATE-CCW[]?(\char SPEED [3] = {%unsigned int RunSpeed=50; //速度
unsigned char RunState-RIGHT_RUN; //运行状态 “oid main () { EA=1;
//开中断
19
常州信息职业技术学院电子与电气工程学院 毕业设计论文
IT0=1;
//脉冲方式
EXO^l;
//开外部中断0:加速
IT1=1;
//脉冲方式
EX1 = 1;
//开外部中断1:减速
inti-lcd (); DoSpeed (); ShowState (); whi le (1) {
P2_l=P2_lA0x01; clock (RunSpeed); }}
//中断0:加速程序 void INT_0 () interrupt 0 { }
void INT_1 () interrupt 2 { }
int delay () //判断LCD是否忙
{ int a; start: RS=0; RW-1; E=0;
for (a=0; a<2; a++); E=l; Pl=0xff;
20
常州信息职业技术学院电子与电气工程学院 毕业设计论文
if (Pl_7==0) return 0; else goto start;}
void clock (unsigned int Delay) //1ms 延时程序 { unsigned int i; for (; Delav>0; Delay一) for (i=0; i <124; i++); }
void DoSpeed () {
SPEED[0]=(1000*6/RunSpeed/100)+48; SPEED[l]=1000*6/RunSpeed%l 00/10+48; SPEED[2]=1000*6/RunSpeed%l0+48; }
3.2.2系统调速模块的设计
系统调速模块主要是通过改变输入到步进电机驱动器的脉冲频率的快慢来实现。单片机控制步进电机加减速运转的方法有硬件法和软件法两种,软件法是指用延时程序来改变输出脉冲频率。硬件法是用一个定时器来实现,在每次进入定时中断后,改变定时器的定时常数。从而实现变速控制。在步进电机伺服系统中,采用软件法进行加减速的控制。根据步进电机的启动频率为3000PPS,系统编程时设定的频率值为2000PPS,通过改变软件程序中延时程序的值,来控制步进电机的脉冲.频率值,实现步进电机的加速、减速的控制。 3.2.3按键显示模块的设计
按键处理程序实时扫描P2. 2-P2. 7端口的电平值的变化,当用户按下相应按键,按键值变为低电平,程序扫描到低电平信号,就会发出相应的外部中断请求,则执行相应的模块子程序,同时在L⑶上实时显示系统的速度与状态信息,直到按下停下按键后,系统将处于停止状态。按键显示模块流程图如图3.10所示。 LCD显示程序部分代码如下: void ShowState() //显示状态与速度 { int i=0;
while(SpeedChar[i]!=‘\\0’) {delay ();
show_lcd(SpeedChar Li):
21
共分享92篇相关文档