嵌入式步进电机课程设计实验

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

课程设计课程名称_嵌入式系统原理题目名称_基于ARM的步进电机的实现学生学院_自动化学院专业班级_13级物联网工程1班学号_学生姓名指导教师张小波2015年12月25日一、课题应用现状及应用分析随着微电子和计算机技术的发展,步进电机的要求量与日俱增,它广泛用于打印机、电动玩具等消费类产品以及数控机床、工业机器人、医疗器械等机电产品中,其在各个国名经济领域都有应用。研究步进电机的控制系统,对提高控制精度和响应速度、节约能源等都具有重要意义。本控制系统的设计,有硬件设计和软件设计两部分组成。其中,硬件设计主要包括单片机最小系统、键盘控制模块、步进电机驱动模块、数码显示模块等功能模块的设计,以及硬件电路在电路板上的实现。软件设计包括主程序以及各个模块的控制程序,最总实验对步进电机转动方向及转动速度的控制,并且将步进电机的转动速度动态显示在LED数码管上。二、功能模块介绍及总体设计;(一)模块介绍:1、ARM嵌入式开发板本课程设计所用到的是ALIENTEKMiniSTM32开发板,该开发板采的的是STM32F103RCT6芯片;SPIFLASH芯片是W25Q64,容量为8M字节;配备有LCD模块接口和三个功能按钮。2、步进电机(1)工作原理:步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。(2)驱动方式:①相励磁法:每一瞬间只有一个线圈导通,其他线圈休息。其特点是励磁方法简单,耗电低,精确度良好。但是力矩小、震动大,每次励磁信号走的角度是标称角度。②相励磁法:每一瞬间有两个线圈同时导通,特点是力矩大、震动较小,每次励磁转动角度是标称角度。③相励磁法:1相和2相轮流交替导通,精度较高,且运转平滑。每送一个励磁信号转动二分之一标称角度。有称为半步驱动。4相电机中,1、2种方式称4相4拍,3种称4相8拍。•按钮:在MiniSTM32开发板上的按键KEY0连接在PC5上、KEY1连接在PA15上、WK_UP连接在PA0上。如图所示:•LCD实现流程:(二)、方案设计:分配五个输出IO口给步进电机控制,三个按键分别输入“转动/停止”、“一档/二档”、“正传/反转”信号,记录电机当前运行状态输出到LCD模块。三、系统硬件平台及接口设计;硬件平台:ALIENTEKMiniSTM32开发板接口色合计:•定义PA4~8为推挽输出,作为步进电机的信号输入口;•定义PA0为‘输入’作为按钮“开始/停止”入口,PC5为‘输出’作为按钮“一档/二档”的入口,PA15为‘输入’作为按钮“正转/反转”的入口;•LCD接口:LCD_LED对应PC10;LCD_CS对应PC9;LCD_RS对应PC8;LCD_WR对应PC7;LCD_RD对应PC6;LCD_D[17:1]对应PB[15:0];四、流程图及相关代码(一)程序流程图:1、主程序及主循环:u8modle[20]=MODE:null;u8ifplay[15]=STATE:stop;intmain(void){Stm32_Clock_Init(9);//系统时钟设置delay_init(72);//延时初始化uart_init(72,9600);//串口初始化MOTOR_Init();//初始化motorEXTI_Init();//外部中断初始化LCD_Init();LED8=1;POINT_COLOR=BLACK;LCD_ShowString(30,40,200,24,24,STATE:stop);LCD_ShowString(30,70,200,24,24,MODE:clockwise);LCD_ShowString(30,91,200,24,24,SPEED:0);POINT_COLOR=RED;LCD_ShowString(101,40,200,24,24,stop);LCD_ShowString(101,70,200,24,24,clockwise);LCD_ShowString(101,91,200,24,24,0);key1=0;MOTOR_Stop();//motorstopwhile(1){printf(OK\r\n);while(key2==0){MOTOR_Stop();}switch(key0){case0:play();break;case1:oplay();break;}}2、按钮初始化及其中断程序://按键初始化函数//PA0.15和PC5设置成输入voidKEY_Init(void){RCC-APB2ENR|=12;//使能PORTA时钟RCC-APB2ENR|=14;//使能PORTC时钟JTAG_Set(SWD_ENABLE);//关闭JTAG,开启SWDGPIOA-CRL&=0XFFFFFFF0;//PA0设置成输入GPIOA-CRL|=0X00000008;GPIOA-CRH&=0X0FFFFFFF;//PA15设置成输入GPIOA-CRH|=0X80000000;GPIOA-ODR|=115;//PA15上拉,PA0默认下拉GPIOC-CRL&=0XFF0FFFFF;//PC5设置成输入GPIOC-CRL|=0X00800000;GPIOC-ODR|=15;//PC5上拉}u8KEY_Scan(u8mode){staticu8key_up=1;//按键按松开标志if(mode)key_up=1;//支持连按if(key_up&&(KEY0==0||KEY1==0||WK_UP==1)){delay_ms(10);//去抖动key_up=0;if(KEY0==0)returnKEY0_PRES;elseif(KEY1==0)returnKEY1_PRES;elseif(WK_UP==1)returnWKUP_PRES;}elseif(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;return0;//无按键按下}3、步进电机初始化及正转函数:voidMOTOR_Init(void){RCC-APB2ENR|=12;//使能PORTA时钟RCC-APB2ENR|=15;//使能PORTD时钟GPIOA-CRL&=0X0000FFFF;GPIOA-CRL|=0X11110000;//PA8推挽输出PA2LED推挽输出GPIOA-CRH&=0XFFFFFFF0;GPIOA-CRH|=0X00000001;GPIOA-ODR|=18;GPIOA-ODR|=14;//PA8输出高GPIOA-ODR|=15;GPIOA-ODR|=16;//PA8输出高GPIOA-ODR|=17;GPIOD-CRL&=0XFFFFF0FF;GPIOD-CRL|=0X00000300;//PD.2GPIOD-ODR|=12;//PD.2LED8=1;}voidMOTOR_Stop(void){MOTOR1=0;MOTOR2=0;MOTOR3=0;MOTOR4=0;}voidplay(){MOTOR1=1;MOTOR2=0;MOTOR3=0;MOTOR4=0;delay_ms(key1);MOTOR1=1;MOTOR2=1;MOTOR3=0;MOTOR4=0;delay_ms(key1);MOTOR1=0;MOTOR2=1;MOTOR3=0;MOTOR4=0;delay_ms(key1);MOTOR1=0;MOTOR2=1;MOTOR3=1;MOTOR4=0;//LED8=!LED8;delay_ms(key1);MOTOR1=0;MOTOR2=0;MOTOR3=1;MOTOR4=0;delay_ms(key1);MOTOR1=0;MOTOR2=0;MOTOR3=1;MOTOR4=1;delay_ms(key1);MOTOR1=0;MOTOR2=0;MOTOR3=0;MOTOR4=1;delay_ms(key1);MOTOR1=1;MOTOR2=0;MOTOR3=0;MOTOR4=1;delay_ms(key1);}voidoplay(){同理将play()里端顺序反过来就行}3、LCD显示程序://外部中断0服务程序voidEXTI0_IRQHandler(void){delay_ms(10);//消抖if(WK_UP==1)//WK_UP按键{key2=!key2;if(key2==0){LED=1;LCD_ShowString(101,40,200,24,24,stop);LCD_ShowString(101,91,200,24,24,0);}else{LED=0;LCD_ShowString(101,40,200,24,24,work);if(key1==3){LCD_ShowString(101,91,200,24,24,quick);}elseif(key1==10){LCD_ShowString(101,91,200,24,24,slow);}}}EXTI-PR=10;//清除LINE0上的中断标志位}//外部中断9~5服务程序voidEXTI9_5_IRQHandler(void){delay_ms(10);//消抖if(KEY0==0)//按键0{if(key0==0){key0=1;LCD_ShowString(101,70,200,24,24,anticlockwise);}elseif(key0==1){key0=0;LCD_ShowString(101,70,200,24,24,clockwise);}}EXTI-PR=15;//清除LINE5上的中断标志位}//外部中断15~10服务程序voidEXTI15_10_IRQHandler(void){delay_ms(10);//消抖if(KEY1==0)//按键1{if(key2==1){if(key1==10){key1=3;LCD_ShowString(101,91,200,24,24,quick);}else{key1=10;LCD_ShowString(101,91,200,24,24,slow);}}}EXTI-PR=115;//清除LINE15上的中断标志位}//外部中断初始化程序//初始化PA0,PC5,PA15为中断输入.voidEXTI_Init(void){KEY_Init();Ex_NVIC_Config(GPIO_A,0,RTIR);//上升沿触发Ex_NVIC_Config(GPIO_C,5,FTIR);//下降沿触发Ex_NVIC_Config(GPIO_A,15,FTIR);//下降沿触发MY_NVIC_Init(2,2,EXTI0_IRQn,2);//抢占2,子优先级2,组2MY_NVIC_Init(2,1,EXTI9_5_IRQn,2);//抢占2,子优先级1,组2MY_NVIC_Init(2,0,EXTI15_10_IRQn,2);//抢占2,子优先级0,组2}五、实验测试、结果分各个功能均实现,运行正常,经老师检查通过。六、总结、心得体会经过这个学期对ARM的学习,并且在老师的悉心指导下和严格要求下,我们总于完成了步进电机设计课程。从书本上的知识到自己亲手的课程设计,每一步对我们来说无疑是巨大的尝试和挑战。七、附主要的参考文献[1]楚荣珍,周向宁,张鹏嵌入式步进电机控制系统的设计与实现”;[2]百度百科词条—“嵌入式系统”;[3]百度百科词条—“步进电机”;

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功