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

上传人:b****2 文档编号:2316556 上传时间:2022-10-28 格式:DOCX 页数:12 大小:116.25KB
下载 相关 举报
嵌入式步进电机课程设计实验.docx_第1页
第1页 / 共12页
嵌入式步进电机课程设计实验.docx_第2页
第2页 / 共12页
嵌入式步进电机课程设计实验.docx_第3页
第3页 / 共12页
嵌入式步进电机课程设计实验.docx_第4页
第4页 / 共12页
嵌入式步进电机课程设计实验.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

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

《嵌入式步进电机课程设计实验.docx》由会员分享,可在线阅读,更多相关《嵌入式步进电机课程设计实验.docx(12页珍藏版)》请在冰豆网上搜索。

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

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

课程设计

 

课程名称_嵌入式系统原理

题目名称_基于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();//初始化motor

EXTI_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();//motorstop

while

(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|=1<<2;//使能PORTA时钟

RCC->APB2ENR|=1<<4;//使能PORTC时钟

JTAG_Set(SWD_ENABLE);//关闭JTAG,开启SWD

GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入

GPIOA->CRL|=0X00000008;

GPIOA->CRH&=0X0FFFFFFF;//PA15设置成输入

GPIOA->CRH|=0X80000000;

GPIOA->ODR|=1<<15;//PA15上拉,PA0默认下拉

GPIOC->CRL&=0XFF0FFFFF;//PC5设置成输入

GPIOC->CRL|=0X00800000;

GPIOC->ODR|=1<<5;//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|=1<<2;//使能PORTA时钟

RCC->APB2ENR|=1<<5;//使能PORTD时钟

GPIOA->CRL&=0X0000FFFF;

GPIOA->CRL|=0X11110000;//PA8推挽输出PA2LED推挽输出

GPIOA->CRH&=0XFFFFFFF0;

GPIOA->CRH|=0X00000001;

GPIOA->ODR|=1<<8;

GPIOA->ODR|=1<<4;//PA8输出高

GPIOA->ODR|=1<<5;

GPIOA->ODR|=1<<6;//PA8输出高

GPIOA->ODR|=1<<7;

GPIOD->CRL&=0XFFFFF0FF;

GPIOD->CRL|=0X00000300;//PD.2

GPIOD->ODR|=1<<2;//PD.2

LED8=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=1<<0;//清除LINE0上的中断标志位

}

//外部中断9~5服务程序

voidEXTI9_5_IRQHandler(void)

{

delay_ms(10);//消抖

if(KEY

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1