湖南大学课程设计步进电机控制器_第1页
湖南大学课程设计步进电机控制器_第2页
湖南大学课程设计步进电机控制器_第3页
湖南大学课程设计步进电机控制器_第4页
湖南大学课程设计步进电机控制器_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单 片 机 课 程 设 计 报 告题目: 步进电机控制器专业:电气工程及其自动化班级:学号:姓名:指导老师: 目 录一、开发板按键说明2二、步进电机控制实验计说明3(一)设计要求3(二)硬件电路41、CPU42、步进电机53、LCD6(三)流程图71、步进电机控制模式7 2、速度显示模式.83、时间设置模式8(四)源程序9三、课程设计心得体会19一、 开发板键盘使用说明1、键盘按键ABCDA键:初次按下,进入时间设置模式;再次按下另光标左右移动,选择时、分进行设置;在电机控制模式可以控制电机启动,停止。B键:在时间设置模式中,对时间数值进行加法运算,可以调节时间;在电机控制模式中,控制电机正反

2、转。C键:在电机控制模式控制电机加减速。D键:初次按下可退出时间设置模式;在电机控制模式可以控制电机归零。AB键:A、B键同时按下,可以退出电机控制模式,进入时间设置模式。二、 步进电机设计说明(一)设计要求显示方式:1602LCD编程语言:c语言1、任务设计一个步进电机控制器。2、要求1)可同时控制一至多台步进电机能按某种差补算法联动运行2)同过小键盘,能分别给定步进电机的运行速度,要求可供选择的步进速度有十种,且多台电机能以不同的速度运行3)步进电机可分别正转、反转4)按下“回零”命令键后,步进电机能准确返回到原点5)可分别显示多台步进电机运行的速度和当前状态6)显示北京时间,可调整3、硬

3、件配置a、接通插针9以驱动步进电机;b、插针10下面两脚接跳线帽,作为独立按键输入。c、开发板上的步进电机接口从上至下依次为D、C、B、A,最后两脚为DVDD,使用时连接步进电机相应接口即可。d、实验盒的步进电机从右至左分别是+5V,D,B,C,A(二)硬件电路1、CPU2、步进电机3、LCD(三)流程图1、步进电机控制模式2、速度显示模式开始进入电机控制模式是否是电机控制模式? N Y同步显示速度 3、时间设置模式开始进入时间设置模式是否设置? N Y按下A键选择时或分按下D键按下B键设置数值显示修改的时间进入电机控制模式是否退出时间设置? YN(四)源程序#include#define W

4、rite_Data 1#define Write_Command 0bit Run_flag = 0; /启动/停止标志位bit Driection_Flag = 0; /正/反转标志位unsigned char Speed_Flag; /速度控制变量char counter=0; /脉冲计数器unsigned char code table = 0x01,0x02,0x04,0x08,0x08,0x04,0x02,0x01; /电机正反转I/O口高低电平对照表unsigned char hou=23,min=59,sec=0 ;unsigned char code table1 = 0123

5、456789;unsigned char idata table26;unsigned char code table3 = Speed:State:Time:;sbit E = P33; /液晶使能端(E)sbit RW = P35; /液晶读写选择端(RW)sbit RS = P36; /液晶数据指令选择端(RS)unsigned char CT=0;unsigned char code table4 = Welcome!Push1:TSOther:MC;bit ch_time=0;/时间设置选择位void Delay2(void)unsigned char i;for(i = 0;i 5

6、0;i+);void Check_Busy(void)P0 = 0xff; /P0口作为输入Delay2();RS = 0;RW = 1;E = 1;Delay2();while(P0&0X80);E = 0;RW = 0;P0 = 0X00;void Write_Lcd(bit Com_Data,unsigned char Dat)Check_Busy();if(Com_Data)/若为写数据指令RS = 1;elseRS = 0;RW = 0;P0 = Dat;Delay2();E = 1;Delay2();E = 0;void Init_Lcd(void)E = 0;RW = 0;RS

7、= 0;Write_Lcd(Write_Command,0x38); /设置16x2显示,5x7点阵,8位数据接口Write_Lcd(Write_Command,0x0c); /开显示,不显示光标Write_Lcd(Write_Command,0x06); /地址指针加1,且光标加1,整屏显示不移动Write_Lcd(Write_Command,0x01); /清屏void delay(unsigned char n) /延时函数unsigned int i,j;for(i = 0;i n;i+)for(j = 0;j =0)Table_Begin=4;while(counter)for(i

8、= 0 + Table_Begin;(i 4 + Table_Begin)&counter!=0;i+,counter-)P2 = tablei; /读取控制电机转动I/O口表delay(80);/根据速度控制函数返回值调节延时时间elseTable_Begin=0;while(counter)for(i = 0 + Table_Begin;(i 4 + Table_Begin)&(counter!=0);i+,counter+)P2 = tablei; /读取控制电机转动I/O口表delay(80);/根据速度控制函数返回值调节延时时间P2 &= 0xf0;Run_flag = 0; voi

9、d GetKey(void)static unsigned char KeyHaveFree = 1;unsigned char temp;P1 &= 0xf0; /P1口低四位作为数字输入时应往相应引脚写0temp = P1&0x0f; if(KeyHaveFree) if(temp != 0x0f) / P1口低四位不全为1,则有键被按下 delay(2); / 消抖 if(temp = (P1&0x0f) if(P1&0x0f) = 0x0e) / 启动/停止键按下Run_flag = Run_flag; / 启动/停止标识取反else if(P1&0x0f) = 0x0d)/ 正/反转

10、键按下Driection_Flag = Driection_Flag;else if(P1&0x0f) = 0x0b) /加速键按下Speed_Flag+; if(Speed_Flag = 10) Speed_Flag = 0;else if(P1&0x0f) = 0x07) replace_(); KeyHaveFree = 0; else if(temp = 0x0f)|(P1&0x0f) = 0x0f)KeyHaveFree = 1; unsigned char Speed_Ctl(void) /速度控制函数unsigned char Speed;if(Speed_Flag = 0)Sp

11、eed = 80;else if(Speed_Flag = 1)Speed = 72;else if(Speed_Flag = 2)Speed = 64;else if(Speed_Flag = 3)Speed = 56;else if(Speed_Flag = 4)Speed = 48;else if(Speed_Flag = 5)Speed = 40;else if(Speed_Flag = 6)Speed = 32;else if(Speed_Flag = 7)Speed = 24;else if(Speed_Flag = 8)Speed = 16;else if(Speed_Flag

12、= 9)Speed = 10;return Speed; void Run_Ctl(void)unsigned char Table_Begin;unsigned char i;/int b=200;if(Run_flag) /启动键按下if(Driection_Flag) /反转Table_Begin = 4;counter=counter-4;/P0=counter;if(counter=100)counter=counter-100;else;for(i = 0 + Table_Begin;i 4 + Table_Begin;i+)P2 = tablei; /读取控制电机转动I/O口表d

13、elay( Speed_Ctl();/根据速度控制函数返回值调节延时时间else /否则关闭驱动P2 &= 0xf0;void display_time(void)/显示时间unsigned char i;table20=hou/10,table21=hou%10,table22=min/10,table23=min%10,table24=sec/10,table25=sec%10;Write_Lcd(Write_Command,0x80+0x40+0x05);for(i=0;i2;i+)Write_Lcd(Write_Data,table1table2i);Write_Lcd(Write_D

14、ata,table35);for(i=2;i4;i+)Write_Lcd(Write_Data,table1table2i);Write_Lcd(Write_Command,0x80+0x40+0x0B);for(i=4;i6;i+)Write_Lcd(Write_Data,table1table2i);void time_get(void) interrupt 1/获得要显示的时间的函数TH0=(65536-50000)/256;TL0=(65536-50000)%256;if(CT+=20)/21个中断为1秒CT=0;if(sec+=59)sec=0;if(min+=59)min=0;if

15、(hou+=23)hou=0;void display_speed() /速度显示函数unsigned char i;Write_Lcd(Write_Command,0x80);for(i =0;i 6;i+)Write_Lcd(Write_Data,table3i);Write_Lcd(Write_Data,table1Speed_Flag);Write_Lcd(Write_Command,0x80+0x09);for(i =6;i 12;i+)Write_Lcd(Write_Data,table3i);Write_Lcd(Write_Data,table1Driection_Flag);W

16、rite_Lcd(Write_Command,0x80+0x40);for(i =12;i 17;i+)Write_Lcd(Write_Data,table3i);void time_set(void)/时间设置函数static unsigned char KeyHaveFree = 1;unsigned char temp;P1 &= 0xf0; /P1口低四位作为数字输入时应往相应引脚写0temp = P1&0x0f; if(KeyHaveFree) if(temp != 0x0f) / P1口低四位不全为1,则有键被按下 delay(2); / 消抖 if(temp = (P1&0x0f

17、) if(P1&0x0f) = 0x0e) ch_time=ch_time; /设置小时或者分钟else if(P1&0x0f) = 0x0d)&ch_time=0)hou+;if(hou=24)hou=0;else if(P1&0x0f) = 0x0d)&ch_time=1) min+;if(min=60)min=0; KeyHaveFree = 0; else if(temp = 0x0f)|(P1&0x0f) = 0x0f)KeyHaveFree = 1; void meun_(void)static unsigned char KeyHaveFree = 1;unsigned char

18、 temp;P1 &= 0xf0; /P1口低四位作为数字输入时应往相应引脚写0temp = P1&0x0f; if(KeyHaveFree) if(temp != 0x0f) / P1口低四位不全为1,则有键被按下 delay(2);if(temp=(P1&0x0f)if(P1&0x0f)=0x0e)while(P1&0x0f) != 0x07)TR0=0;/关闭定时器0Run_Ctl();time_set();display_speed();display_time();TR0=1;/开启定时器0elsewhile(P1&0x0f) != 0x0c)TR0=1; GetKey();Run_

19、Ctl();display_speed();display_time(); while(P1&0x0f) != 0x07)TR0=0;/关闭定时器0Run_Ctl();time_set();display_speed();display_time();TR0=1;/开启定时器0 else if(temp = 0x0f)|(P1&0x0f) = 0x0f)KeyHaveFree = 1; void main(void) PLLCON &= 0Xf8; /设置频率为12.58MHzP2 = 0x00;Init_Lcd(); TMOD=0x01;/配置定时器0为16位模式,时钟是core clock,默认为1.572864MHz IE=0x82;/使能定时器0中断和全局中断TH0=(65536-50000)/256;TL0=(65536-50000)%256; while(1)unsigned char i;Write_Lcd(Write_Command,0x84);for(i = 0;i 8;i+)Write_Lcd(Write_Data,table4i);Write_Lcd(Write_Command,0x80+0x40);for(i = 8;i 24;i+)Write_Lcd(Write_Data,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论