课程设计说明书院系:船舶工程学院班级:姓名:学号:机电综合课程设计设计题目:直流电机控制系统立体目的:通过本次课程设计,达到培养学生综合应用所学知识,分析和解决实际工程问题,锻炼创造能力的目的。技术要求:设计直流电机控制系统,包括:机械装配图,控制原理图和接线图,并编制相应的控制程序。完成基于89C51单片机开发板的直流电机速度控制,启停及正反转控制。一.机械系统由直流电机驱动滚珠丝杠实现滑台的平移。将电机的旋转运动通过滚珠丝杠转换为平台的直线运动。系统组成:直流电机,底板,支座,光杠,滚珠丝杠,平台等。二.电气系统1.直流电机电机采用无刷直流电机,型号为:BL-2203C。其特点是调速范围宽,低速力矩大,运行平稳,低噪声,高效率。电机接线,两股线,一股为电机线,一股为电机霍尔线。2.驱动器驱动器采用无刷直流电机驱动器。接线端子说明:驱动器由220V交流供电。驱动器调速方式(1)内部电位器调速:逆时针旋转驱动器控制面板上的电位器,电机速度减小,顺时针则转速增大:由于测速需要响应时间,速度显示会滞后。(2)外部输入调速:将外接电位器的两端分别接于驱动器的“+12”和“COM”端上,将调解段接于“AVI”上即可使用外接电位器调速,也可以通过其他控制单元输入模拟电平信号到“AVI”端实现调速。(3)多段速度选择:通过控制驱动器上的CH1—3三个端子的状态可以选择内部预先设定的几种转速。电机运行/停止控制(R/S)通过控制端子“R/S”相对于“COM”的通、断可以控制电机的运行和停止。端子“R/S”内部以电阻上拉到+12,可以配合无源触点开关使用,也可以配合集电极开路的PLC等控制单元;当“R/S”与端子“COM”断开时电机运行,反之电机停止。使用运行/停止端控制电机停止时,电机为自然停车,其运动规律与负载惯性有关;电机正/反转控制(F/R)通过控制端子“F/R”与端子“COM”的通、断可以控制电机的运转方向。端子“F/R”内部以电阻上拉到+12,可以配合无源触点开关使用,也可以配合集电极开路的PLC等控制单元;当“F/R”与端子“COM”不接通时电机顺时针运行(面对电机轴),反之则电机逆时针方向运转;为避免驱动器的损坏,在改变电机转向时应先使电机停止运动后再操作改变转向,避免在电机运行时进行运转方向控制。驱动器典型接线图使用注意事项:(1)因本驱动器220V高压输入,为确保安全在上电工作前必须接地端子(FG)可靠的与大地连接,任何情况下请不要打开机壳避免意外的损伤!(2)驱动器安装时应保证设备的通风良好;机柜内有多个驱动器并列使用时要保证相互之间的距离不小于10cm。3.LY-51S单片机开发板应用开发板上的单片机,八个独立按键,8个LED灯,两个继电器。4.控制系统基于51S单片机的直流电机控制系统。系统组成:无刷直流电机,无刷直流电机驱动器,LY-51S单片机开发板上的单片机,8个独立按键,八个LED灯,两个继电器。单片机I/O口分配:P1.0:方向信号。P1.1:启停信号。P1.2:PWM信号。独立按键P3功能P0LEDK1P3.0启动P0.7LED8K2P3.1停止P0.6LED7K3P3.2自动P0.0LED1K4P3.3手动P0.1LED2K5P3.4正转P0.2LED4K6P3.5反转P0.3LED3K7P3.6加速P0.4LED5K8P3.7减速P0.5LED6接线图见附录8个独立按键为单片机的输入,接P3口。8个LED为输出的信号显示,显示不同的工作状态,接P0口。P1.0口输出的方向信号接继电器1,控制驱动器的F/R与COM口的通断控制电机正反转。F/R与COM不接通时电机顺时针方向运转,反之则逆时针方向运转。P1.1口输出的启停信号接继电器2,控制驱动器的R/S与COM口的通断控制电机启停。R/S与COM断开时电机运行,反之则停止运行。附录控制程序程序:#includereg52.hsbitstart=P3^0;sbitstop=P3^1;sbitAUTO=P3^2;sbithand=P3^3;sbitforward=P3^4;sbitreverse=P3^5;sbitacceleration=P3^6;sbitdeceleration=P3^7;sbitled1=P0^0;//autosbitled2=P0^1;//handsbitled3=P0^2;//forwardsbitled4=P0^3;//reversesbitled5=P0^4;//accelerationsbitled6=P0^5;//deceleratesbitled7=P0^6;//onsbitled8=P0^7;//offsbitdirection=P1^0;//zhuanfansbitRS=P1^1;//onoffsbitPMW=P1^2;//kongzhi//sbitspeaker=P1^3;intCYCLE,PWM_ON,count;voidinitial(){CYCLE=20;PWM_ON=0;count=0;}/*------------------------uS延时函数,含有输入参数unsignedchart,无返回值unsignedchar是定义无符号字符变量,其值的范围是0~255这里使用晶振12M,精确延时请使用汇编,大致延时长度如下T=tx2+5uS------------------------------------------------*/voidDelayUs2x(unsignedchart){while(--t);}/*------------------------------------------------mS延时函数,含有输入参数unsignedchart,无返回值unsignedchar是定义无符号字符变量,其值的范围是0~255这里使用晶振12M,精确延时请使用汇编------------------------------------------------*/voidDelayMs(unsignedchart){while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}}/*------------------------------------------------定时器初始化子程序------------------------------------------------*/voidInit_Timer0(void){TMOD|=0x01;//使用模式1,16位定时器,使用|符号可以在使用多个定时器时不受影响TH0=(65536-2000)/256;//重新赋值2msTL0=(65536-2000)%256;EA=1;//总中断打开ET0=1;//定时器中断打开TR0=1;//定时器开关打开}/*------------------------------------------------定时器中断子程序------------------------------------------------*/voidTimer0_isr(void)interrupt1{TH0=(65536-2000)/256;//重新赋值2msTL0=(65536-2000)%256;if(count==PWM_ON)//如果定时等于on的时间说明作用时间结束,输出低电平{PMW=0;//}if(count==CYCLE)//反之低电平时间结束后返回高电平{count=0;if(PWM_ON!=0)//如果开启时间是0保持原来状态{PMW=1;}}count++;}voidaccelerate(){if(PWM_ON==CYCLE){}else{PWM_ON++;}}voiddecelerate(){if(PWM_ON==0){}else{PWM_ON--;}}main(){initial();Init_Timer0();while(1){if(!stop)//stop{DelayMs(10);if(!stop){P0=0xff;PWM_ON=0;while(start){RS=0;led7=0;led8=1;}}}if(!start)//start{DelayMs(10);if(!start)//qudou{P0=0xff;PWM_ON=0;while(stop){RS=0;led8=0;led7=1;if(!AUTO)//auto{DelayMs(10);if(!AUTO){led1=0;led2=1;PWM_ON=0;while(hand&&stop){RS=1;direction=0;PWM_ON=0;while(PWM_ON!=CYCLE&&stop&&hand){PWM_ON++;DelayMs(1000);}DelayMs(1000);while(PWM_ON!=0&&stop&&hand){PWM_ON--;DelayMs(500);}//DelayMs(1000);PWM_ON=0;direction=1;while(PWM_ON!=CYCLE&&stop&&hand){PWM_ON++;DelayMs(1000);}DelayMs(1000);while(PWM_ON!=0&&stop&&hand){PWM_ON--;DelayMs(1000);}//DelayMs(1000);//AUTORUN();}}}if(!hand)//hand{DelayMs(10);if(!hand){led2=0;led1=1;PWM_ON=0;while(AUTO&&stop){if(!forward)//forward{DelayMs(10);if(!forward){while(!forward){}direction=0;led3=0;led4=1;}}if(!reverse)//reverse{DelayMs(10);if(!reverse){while(!reverse){}direction=1;led4=0;led3=1;}}if(!acceleration)//acceleration{DelayMs(10);if(!acceleration){while(!acceleration){}accelerate();led5=0;led6=1;}}if(!deceleration)//deceleration{DelayMs(10);if(!deceleration){while(!deceleration){}decelerate();led6=0;led5=1;}}}}}}}}}}