1、基于52单片机的三维平台控制技术方案重庆邮电大学堂下考试答卷1目 录1系统总体设计思路 .22系统硬件部分具体实现 .22.1 主控制模块的设计与实现 22.2 驱动电路的设计与实现 52.3 显示电路的设计与实现 72.4 键盘电路的设计与实现 82.5 测速模块的设计与实现 92.6 限位反馈电路的设计与实现 93.系统软件部分具体实现 .10附录 .13附录 1:源代码 .13附录 2:单片机控制板原理图 .27附录 3:THB7128 驱动板原理图 28附录 4:单片机控制板元件清单 .29附录 5:THB7128 驱动板元件清单 30重庆邮电大学堂下考试答卷21系统总体设计思路本系统
2、采用STC89C52单片机对三维平台上三个步进电机进行控制,初步实现的功能有:系统启动与停止控制,三轴联动,三轴的加、减速控制,三轴正、反转控制,X轴的启动与停止控制、X轴与Y轴的限位控制、三轴的转速检测与显示,最高1/128电流细分等功能,其系统框图如图1.1所示:S T C 8 9 C 5 2单 片 机T H B 7 1 2 8T H B 7 1 2 8T H B 7 1 2 8MMMX 轴 步 进 电 机Y 轴 步 进 电 机Z 轴 步 进 电 机+ 5 V D C + 1 2 V D C显 示 电 路矩 阵 键 盘晶 振 电 路复 位 电 路光 电 编 码 器光 电 编 码 器光 电
3、编 码 器图1.1 三维平台步进电机控制系统框图2系统硬件部分具体实现2.1 主控制模块的设计与实现本设计选用STC89C52单片机作为主控制模块。STC89C52单片机是一种低功耗、高性能CMOS 8位微控制器,具有8K可编程Flash存储器,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,3个16位定时器/计数器,全双工串行口。STC89C52单片机作为主控芯片,在本设计中主要实现以下几个工作:(1)接收矩阵键盘输入的控制信号;(2)输出PWM脉冲控制三轴步进电机工作,包括输出PWM脉冲信号和方向信号; 重庆邮电大学堂下考试答卷3(3)处理给定转速信号和测速反馈转速信号;(
4、4)在八个八段数码管上显示电机的给定转速和实时转速;(5)接收限位反馈并做逻辑判断;主控制器的引脚分配表如表1.1所示:I/0口 引脚号 对应元件 功能 输入/输出P0.0P0.7 3932 SB1SB12 矩阵键盘输入 输入(上拉电阻)P1.0P1.2 13 74HC138 3-8译码器控制信号 输出P1.3 4 THB7128 X轴方向信号 输出P1.4 5 THB7128 Y轴方向信号 输出P1.5 6 THB7128 Z轴方向信号 输出P1.6 7 限位开关X_1 限位信号 输入P1.7 8 限位开关X_2 限位信号 输入P3.0 10 限位开关Y_1 限位信号 输入P3.1 11 限
5、位开关Y_2 限位信号 输入P3.5 15 THB7128 X轴脉冲输出 输出P3.6 16 THB7128 Y轴脉冲输出 输出P3.7 17 THB7128 Z轴脉冲输出 输出P2.0P2.7 2128 八个八段数码管 数码管段选信号 输出XTAL1XTAL2 1918 晶振电路 时钟信号 输入RST 9 复位电路 复位信号 输入P3.2(INT0) 12 X轴光电编码器 转速信号 输入P3.3(INT1) 13 Y轴光电编码器 转速信号 输入P3.4 14 Z轴光电编码器 转速信号 输入重庆邮电大学堂下考试答卷4主控制器原理图,如图2.1.1所示:重庆邮电大学堂下考试答卷5R310KVC+
6、uESTp2AB46Y79-8UDIOHFLMP位*.kGNW/dXcom图2.1.1 主控制器原理图重庆邮电大学堂下考试答卷62.2 驱动电路的设计与实现驱动电路采用THB712步进电机驱动芯片对三位平台上的三个步进电机进行驱动。THB7128是一款专业的两相步进电机驱动芯片,它内部集成了细分、电流调节、CMOS功率放大等电路,配合外围电路可实现高性能、多细分、大电流的驱动电路。其主要参数和性能指标如下: 单芯片两相细分步进电机驱动; 直接采用单脉冲和方向信号译码控制模式; 双全桥MOSFET驱动,低导通电阻 ;0.53onR 可实现正反转控制; 通过3位选择8档细分控制(1,1/2,1/4
7、,1/8,1/16,1/32,1/64,1/128); 最高耐压40V DC; 高输出电流 ;3.outIA HZIP19封装; 有复位和使能管脚; 芯片内部有过热保(TSD)和过流检测电路。重庆邮电大学堂下考试答卷7驱动电路原理图如图2.2.1所示:123456A B C D654321DCBATitleNumberRevisionSizeBDate:2-Jun-2011Sheetof File:G:THB7128.DDBDrawn By:VREFC4100pC2104M1M2M3NFA NFBC1104VMCLKCWWENOUTIAOUT2AOUT1BOUT2BOSC1VCCOUT1A13
8、NFB8OUT2A11OUT1B9NFA12OUT2B7SGND6VREF5VCC 15GND1OSC14CLK3CW/CWW2VM 14ENABLE19M318M217M116PGND10U1THB7128123654S1R75KR83K3VREFR110KR210KR310KM1M2M3VCCVCCR110.2 / 1%R120.2 /1%12345678U26N1371234U3P521R9270R13270R42K7R151K C3471C5471 VCCVCC CLKCWW123456 J2 123456 J1CPCPCP-CP-U/DU/DU/D-U/D-FREFRE- OUTIA
9、OUT2AOUT1BOUT2BVMGNDC7100UF/50VC8220UF/50VC9104C6104VCCVM1234U4P521R14270R161K VCCENFREFRE-D1LED R53K3Vin3ADJ1+Vout2U5LM317R171K2R183K6C11104R1910KR2010KR2110KR2210KD2IN5819图2.2.1 驱动电路原理图重庆邮电大学堂下考试答卷8驱动器细分设定(M1、M2、M3)如表2.2.1所示。表2.2.1 驱动器细分设定M1 M2 M3 细分数L L L 1H L L 1/2L H L 1/4H H L 1/8L L H 1/16H L
10、 H 1/32L H H 1/64H H H 1/1282.3 显示电路的设计与实现本设计采用八个八段数码管实现转速显示功能,其中高4位数码管为给定转速显示,通过编程实现X、Y、Z三轴转速循环显示,低4位数码管为测速反馈的转速显示,显示方式同高4位。STC89C52单片机内部采用查表法对转速信号进行数值处理,通过P2.0P2.7口输出段选信号,通过P1.0P1.2输出3路位选信号到74HC138中,通过3-8译码器对八个八段数码管进行选择。具体显示模块的硬件电路如图2.3.1所示:重庆邮电大学堂下考试答卷9A1B2C3S456Y70-8UDIROEHPV.kFGL位图2.3.1 显示模块的硬件
11、电路2.4 键盘电路的设计与实现本设计中的键盘电路采用“4*4”矩阵键盘,采用键盘扫描的方式对按键信号进行捕获,并输入到STC89C52单片机的P0口中。具体键盘功能如表2.4.1所示。表2.4.1 矩阵键盘功能L1 L2 L3 L4H4 系统启动 系统停止 X轴启动 X轴停止H3 X轴加速 X轴减速 X轴减速 X轴减速H2 Y轴加速 Y轴减速 Y轴减速 Y轴减速H1 Z轴加速 Z轴减速 Z轴减速 Z轴减速重庆邮电大学堂下考试答卷102.5 测速模块的设计与实现本设计采用E6B2-CWZ6C光电编码器对三轴步进电机的转速进行实时检测,并反馈到单片机中用作转速的实时显示。E6B2-CWZ6C光电
12、编码器有以下特点: 对应电源电压DC 524V; 外径 40具备2000P/R的分辨率; 具备使Z相对简单化的原点位置显示功能; 实现轴负重、径向30N、推力相20N; 附有逆接、负荷短路保护回路,改善了可靠性。E6B2-CWZ6C的输出方式为NPN集电极开路输出方式,共有红、白、橙三路转速信号输出,本设计中只采用其一路测速信号输入到单片机的外部中断口或T1计数器外部脉冲输入端进行转速检测。E6B2-CWZ6C内部结构如图2.5.1所示:图2.5.1 E6B2-CWZ6C内部结构2.6 限位反馈电路的设计与实现限位开关工作原理是,当三维平台没有接近限位开关时,限位开关输出为高电平;当三维平台接
13、近限位开关时,限位开关输出为低电平;利用单片机I/O口去捕获限位开关输出电平,当限位开关输出为低电平时,控制电机方向信号,使电机反转。本设计中限位开关是采用LJ8A3-1-Z型,实物如图2.6.1所示。重庆邮电大学堂下考试答卷11图2.6.1 限位开关实物图3.系统软件部分具体实现STC89C52单片机内部共有三个定时器/计数器资源分别是T0、T1、T2,两个外部中断输入口INT0和INT1,本设计中单片机的内部资源分配如表3.1所示。表3.1 单片机内部资源分配:内部资源 工作模式 功 能T0 16位计数器 接收X轴脉冲输入T1 16位定时器 记50ms时间作为转速计算的参考T2 16位定时
14、器 输出可调PWM脉冲信号INTO 外部中断 接收Y轴脉冲输入INT1 外部中断 接收Z轴脉冲输入重庆邮电大学堂下考试答卷12系统工作程序流程图如图3.1所示:扫描键盘执行 i n i t ( )判断启动键还是停止键按下三轴方向信号初始化定时器 T 0 工作模式设置和初值设置定时器 T 1 工作模式设置和初值设置定时器 T 2 工作模式设置和初值设置开中断显示初始化启动键按下输出 P W M 脉冲更新 I / O 输出图3.1 系统工作程序流程图转速检测模块程序流程图如图3.2所示:计数器 T 0 中断查表并显示I N T 1 中断c o l l e c t _ y + +查表并显示c o l
15、 l e c t _ y + +I N T 0 中断c o l l e c t _ x + +查表并显示图3.2 转速检测模块程序流程图重庆邮电大学堂下考试答卷13限位检测模块程序流程图如图3.3所示:限位 X _ 1 判断f x = f x _ xX 轴方向信号输出01限位 X _ 2 判断f x = f x _ xX 轴方向信号输出10限位 Y _ 1 判断f x = f x _ yX 轴方向信号输出01限位 Y _ 2 判断f x = f x _ yX 轴方向信号输出10图3.3 限位检测模块程序流程图重庆邮电大学堂下考试答卷14附录附录 1:源代码#include#include /*
16、I/O口分配*/sbit cp_x=P35; /驱动脉冲信号输出xsbit cp_y=P36; /驱动脉冲信号输出ysbit cp_z=P37; /驱动脉冲信号输出zsbit fx_x=P13; /x轴方向信号sbit fx_y=P14; /y轴方向信号sbit fx_z=P15; /z轴方向信号sbit x_xianwei1=P16; /x轴限位sbit x_xianwei2=P17; /x轴限位sbit y_xianwei1=P30; /y轴限位sbit y_xianwei2=P31; /y轴限位sbit LHJ_A = P10; /74HC138(3-8)译码器输入控制信号线sbit L
17、HJ_B = P11;sbit LHJ_C = P12;sfrT2MOD=0xC9; /T2定时器工作模式unsigned char x_speed=8,y_speed=8,z_speed=8; /给定x,y,z三轴初始化转速unsigned char count_x=0,count_y=0,count_z=0; /记录三轴给定脉冲重庆邮电大学堂下考试答卷15数变量unsigned int collect_x=0,collect_y=0,collect_z=0; /三轴测速脉冲数存储变量unsigned char t1_flag=0,t2_flag=0,t3_flag=0,t4_flag=0;
18、 /定时器T1 10ms标志位unsigned int x_tmpdate8=0,0,0,0,0,0,0,0;/定义数组变量unsigned int y_tmpdate8=0,0,0,0,0,0,0,0;unsigned int z_tmpdate8=0,0,0,0,0,0,0,0;code unsigned char table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; /共阴数码管 0-9 a-f 表/*数码管位选*/#define SMG_1 LHJ_C=0;LHJ_B
19、=0;LHJ_A=0 /译码器的输入脚,全0选择第一位数码管。#define SMG_2 LHJ_C=0;LHJ_B=0;LHJ_A=1 /译码器的输入脚,001选择第二位数码管。#define SMG_3 LHJ_C=0;LHJ_B=1;LHJ_A=0#define SMG_4 LHJ_C=0;LHJ_B=1;LHJ_A=1#define SMG_5 LHJ_C=1;LHJ_B=0;LHJ_A=0#define SMG_6 LHJ_C=1;LHJ_B=0;LHJ_A=1#define SMG_7 LHJ_C=1;LHJ_B=1;LHJ_A=0#define SMG_8 LHJ_C=1;LHJ
20、_B=1;LHJ_A=1void keyscan(void); /扫描键盘void delay(void) /延时子函数,5个空指令_nop_();_nop_();重庆邮电大学堂下考试答卷16_nop_();_nop_();_nop_();void init()fx_x=1;fx_y=1;fx_z=1;TL1=(65536-50000)%256;TH1=(65536-50000)/256;TL0=(65536-1)%256;TH0=(65536-1)/256;TMOD=0x15;T2MOD=0x00;T2CON=0x00;IP=0x20; /外部中断0和外部中断1设置优先级IT0=1; /外部
21、中断0为下降沿触发IT1=1; /外部中断1为下降沿触发EX0=1; /开外部中断0EX1=1; /开外部中断1TR0=1; /开计数器1,准备测速 ET0=1;TR1=1; /开定时器1,记50msET1=1;TL2=(65536-1000)%256;TH2=(65536-1000)/256;x_tmpdate0=0xf6;重庆邮电大学堂下考试答卷17y_tmpdate0=0xe6;z_tmpdate0=0xdb;/ x_tmpdate4=0xf6; /第五个数码管显示/ y_tmpdate4=0xe6;/ z_tmpdate4=0xdb;void display(unsigned int
22、*lp)/显示P2=0; /端口2为输出SMG_1; /第一位数码管P2=lp0; /查表法得到要显示数字的数码段delay(); /延时5个空指令P2=0; /清0端口,准备显示下位P2=0; /端口2为输出SMG_2; /第二位数码管P2=tablelp1; /查表法得到要显示数字的数码段delay(); /延时5个空指令P2=0; /清0端口,准备显示下位SMG_3; /第三位数码管P2=tablelp2; /查表法得到要显示数字的数码段delay(); /延时5个空指令P2=0; /清0端口,准备显示下位出,否则进位影响到第四位数据SMG_4; /第四位数码管重庆邮电大学堂下考试答卷1
23、8P2=tablelp3; /查表法得到要显示数字的数码段delay(); /延时5个空指令P2=0;/清0端口,准备显示下位/ P2=0; /端口2为输出/ SMG_5; /第五位数码管/ P2=lp4; /查表法得到要显示数字的数码段/ delay(); /延时5个空指令/ P2=0; /清0端口,准备显示下位P2=0; /端口2为输出SMG_6; /第六位数码管P2=tablelp5; /查表法得到要显示数字的数码段delay(); /延时5个空指令P2=0; /清0端口,准备显示下位SMG_7; /第七位数码管P2=tablelp6; /查表法得到要显示数字的数码段delay(); /
24、延时5个空指令P2=0; /清0端口,准备显示下位出SMG_8; /第八位数码管P2=tablelp7; /查表法得到要显示数字的数码段delay(); /延时5个空指令P2=0; /清0端口void main() 重庆邮电大学堂下考试答卷19init();while(1)if(x_xianwei1=0) /限位开关控制fx_x=fx_x;while(x_xianwei1=0);if(x_xianwei2=0) fx_x=fx_x;while(x_xianwei2=0);if(y_xianwei1=0) fx_y=fx_y;while(y_xianwei1=0);if(y_xianwei2=0
25、) fx_y=fx_y;while(y_xianwei2=0); / if(y_xianwei=0)/ fx_y=fx_y;/ if(z_xianwei=0)/ fx_z=fx_z;/*给定转速数据*/重庆邮电大学堂下考试答卷20x_tmpdate1=15/10/x_speed; /百位x_tmpdate0=60000000/1000(T2初值)/200/x_speed/2/100x_tmpdate2=15/1/x_speed/1%10; /十位x_tmpdate1=60000000/1000/200/x_speed/2/10%10x_tmpdate3=150/1/x_speed%10; /个
26、位x_tmpdate2=60000000/1000/200/x_speed/2%10y_tmpdate1=15/10/y_speed/1; /百位y_tmpdate2=15/1/y_speed/1%10; /十位y_tmpdate3=150/1/y_speed%10; /个位z_tmpdate1=15/10/z_speed/1; /百位z_tmpdate2=15/1/z_speed/1%10; /十位z_tmpdate3=150/1/z_speed%10; /个位keyscan(); /扫描键盘if(t2_flag=1) /当1s时间到达时t2_flag=0; /标志位置0/*分辨率360时测
27、定转速数据*/x_tmpdate5=1*collect_x/6/100; /百位60*collect_x/360/100;x_tmpdate6=1*collect_x/6/10%10; /十位x_tmpdate7=1*collect_x/6%10; /个位y_tmpdate5=1*collect_y/6/100; /百位y_tmpdate6=1*collect_y/6/10%10; /十位y_tmpdate7=1*collect_y/6%10; /个位重庆邮电大学堂下考试答卷21z_tmpdate5=1*collect_z/6/100; /百位z_tmpdate6=1*collect_z/6/
28、10%10; /十位z_tmpdate7=1*collect_z/6%10; /个位/* if(x_speed4)x_tmpdate5=x_tmpdate5/2;x_tmpdate6=x_tmpdate6/2;x_tmpdate7=x_tmpdate7/2;*/ /*计数变量置位*/collect_x=0;collect_y=0;collect_z=0; if(t4_flag=1)display(x_tmpdate);if(t4_flag=2)display(y_tmpdate);if(t4_flag=3)display(z_tmpdate); 重庆邮电大学堂下考试答卷22 void keys
29、can() /读键盘值unsigned char k,k_temp;k=0xfe;doP0=k;k_temp=P0;if(k!=k_temp)switch(k_temp)case 0x7e:EA=1;TR2=1;ET2=1;x_speed=8,y_speed=8,z_speed=8;fx_x=1;fx_y=1;fx_z=1; break; /启动case 0x7d:EA=0;TR2=0;ET2=0;x_speed=200;y_speed=200,z_speed=200;break; /停止case 0x7b:x_speed=200; break; /x停止case 0x77:x_speed=8
30、; break; /x启动case 0xbe: /x轴加速 while(P0=0xbe);if(x_speed1)x_speed=x_speed/2;break; 重庆邮电大学堂下考试答卷23break;case 0xbd:while(P0=0xbd);if(x_speed1)y_speed=y_speed/2;break; break;case 0xdd: while(P0=0xdd);if(y_speed1)z_speed=z_speed/2;break; break;case 0xed: while(P0=0xed);if(z_speed64)count_x=0;if(count_y64
31、)count_y=0;if(count_z64)count_z=0;if(count_x=x_speed)cp_x=cp_x;count_x=0;if(count_y=y_speed)cp_y=cp_y;count_y=0;if(count_z=z_speed)cp_z=cp_z;count_z=0;重庆邮电大学堂下考试答卷26void T1ISR(void) interrupt 3 /T1定时器,记50ms时间TL1=(65536-50000)%256;TH1=(65536-50000)/256;t1_flag+;if(t1_flag=20)t2_flag=1;t1_flag=0; t3_f
32、lag+;if(t3_flag=40)t4_flag=1; if(t3_flag=80)t4_flag=2; if(t3_flag=120)t4_flag=3;t3_flag=0; 重庆邮电大学堂下考试答卷27void ISR0(void) interrupt 0 /x轴测速脉冲输入collect_x+;void ISR1(void) interrupt 2 /y轴测速脉冲输入collect_y+;void T0ISR(void) interrupt 1 /T0计数器,记录z轴测速脉冲TL0=(65536-1)%256;TH0=(65536-1)/256;collect_z+;重庆邮电大学堂下
33、考试答卷28附录 2:单片机控制板原理图 R310KVC+uESTpAB456Y79-8UDIOHFLMP位*.kGNW/dXcom重庆邮电大学堂下考试答卷29附录 3:THB7128 驱动板原理图123456A B C D654321DCBATitleNumberRevisionSizeBDate:2-Jun-2011 Sheet of File:G:THB7128.DDBDrawnBy:VREFC4100pC2104M1M2M3NFA NFBC1104VMCLKCWWENOUTIA OUT2AOUT1BOUT2BOSC1VCCOUT1A13NFB8OUT2A11OUT1B9NFA12OUT
34、2B7SGND6VREF5VCC 15GND1OSC14CLK3CW/CWW2VM 14ENABLE19M318M217M116PGND10U1THB7128123654S1R75KR83K3VREFR110KR210KR310KM1M2M3VCCVCCR110.2 / 1%R120.2 /1%12345678U26N1371234U3P521R9270R13270R42K7R151K C3471C5471 VCCVCC CLKCWW123456 J2 123456 J1CPCPCP-CP-U/DU/DU/D-U/D-FREFRE- OUTIAOUT2AOUT1BOUT2BVMGNDC7100UF/50VC8220UF/50VC9104C6104VCCVM1234U4P521R14270R161K VCCENFREFRE-D1LED R53K3Vin3ADJ1+Vout2U5LM317R171K2R183K6C11104R1910KR2010KR2110KR2210KD2IN5819