嵌入式课程设计报告文档

更新时间:2024-05-09 16:24:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

课程设计

课程名称嵌入式系统

题目名称基于 ARM 的步进电机控制系统的设计与实现 学生学院 自动化学院 专业班级物联网工程13级(1)班 学 号 3213001582 学生姓名李晓青

合作者 梁志成、田靖汶 指导教师王涛

2015 年 12月30日

1

一、 课题研究意义、现状及应用分析

随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个行业的

控制领域都将有广泛应用。单片机、C语言等前沿学科的技术的日趋成熟与实用化,使得步进电机的控制系统有了新的的研究方向与意义。在现代工业生产中,生产机械一般都用电动机拖动。为了提高生产率和保证产品质量,大量的生产机械要求步进电机以不同的速度工作。

步进电机具有较好的控制性能,其启动、停车、反转及其它任何运行方式的改变都可在少数脉冲内完成,且可获得较高的控制精度,因而得到了广泛的应用。步进电机是一种将电脉冲信号转换成直线位移或角位移的执行元件。步进电机具有转子惯量低、定位精度高、无累积误差、控制简单等特点,已成为运动控制领域的主要执行元件之一。ARMSTM32是近年来发展非常迅速的处理器,有很好的应用前景。将其应用于步进电机的调速控制,有极大的使用价值。以脉宽调制技术为代表的电机数字驱动技术也在迅猛发展,将计算机应用于这一领域正好可以发挥其在数字控制方面的优势。

二、 课题总体方案设计及功能模块介绍:

1) ARM嵌入式开发板:

此次课程设计使用的是ALIENTEK MiniSTM32开发板,CPU是STM32F103RCT6,FLASH容量为256K,SRAM容量为48K;并配备:

1 个标准的 JTAG/SWD 调试下载口 1 个电源指示灯(蓝色)

2 个状态指示灯(DS0:红色,DS1:绿色) 1 个红外接收头,配备一款小巧的红外遥控器

1 个 IIC 接口的 EEPROM 芯片,24C02,容量 256 字节

1 个 SPI FLASH 芯片,W25Q64,容量为 8M 字节(即 64M bit) 1 个 DS18B20/DS1820 温度传感器预留接口

1 个标准的 2.4/2.8/3.5/4.3/7 寸 LCD 接口,支持触摸屏 1 个 OLED 模块接口(与 LCD 接口部分共用) 1 个 USB 串口接口,可用于程序下载和代码调试 1 个 USB SLAVE 接口,用于 USB 通信 1 个 SD 卡接口

1 个 PS/2 接口,可外接鼠标、键盘 1 组 5V 电源供应/接入口 1 组 3.3V 电源供应/接入口 1 个启动模式选择配置接口 1 个 2.4G 无线通信接口

1 个 RTC 后备电池座,并带电池

1 个复位按钮,可用于复位 MCU 和 LCD 3 个功能按钮,其中 WK_UP 兼具唤醒功能 1 个电源开关,控制整个板的电源

2

(ARM嵌入式开发板)

2) 步进电机:

工作原理:步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

步进电机驱动方式: ① 1 相励磁法:每一瞬间只有一个线圈导通,其他线圈休息。其特点是励磁方法简单,耗

电低,精确度良好。但是力矩小、震动大,每次励磁信号走的角度是标称角度。

② 2 相励磁法:每一瞬间有两个线圈同时导通,特点是力矩大、震动较小,每次励磁转动

角度是标称角度。

③ 1-2 相励磁法:1 相和 2 相轮流交替导通,精度较高,且运转平滑。每送一个励磁信号转动二分之一标称角度。有称为半步驱动。4 相电机中,1、2 种方式称 4 相 4 拍,3 种称 4 相8 拍。

(步进电机)

3) 按键:

在 MiniSTM32 开发板上的按键 KEY0

连接在 PC5 上、KEY1 连接在 PA15 上、WK_UP 连接在 PA0 上。如图所示:

3

(按钮连接图)

三、 系统硬件平台及接口设计

系统硬件平台主要由一块STM32平台、步进电机驱动模块构成,以STM32为核心,包括电机驱动、电机、LCD显示等模块。STM32作为主控芯片,通过I/O端口来控制步进电机驱动芯片,从而实现对步进电机的控制。

接口特色设计:

① 定义 PA 4~8 为推挽输出,作为步进电机的信号输入口;

② 定义 PA0 为”输入”作为按钮”开始/停止”入口,PC5 为”输出”作为按钮”二档/三档”的入口。

3.1步进电机驱动模块设计:

本次使用的步进电机因自带驱动模块,因此只需知道模块上的各个引脚功能并将其连接到stm32上完成步进电机的驱动。

步进电机原理图

由电机原理图可以看出,通过对S1、S2、S3和S4四条线的轮流通电达到使电机驱动的目的。采用8拍的模式,电机的码表如下:

4

S1 1 1 0 0 0 0 0 1 S2 0 1 1 1 0 0 0 0 S3 0 0 0 1 1 1 0 0 S4 0 0 0 0 0 1 1 1

根据以上码表,在stm32上利用GPIO做相应的输出并加上时延,完成步进电机的驱动。并由ARMSTM32提供步进电机5V的电压的作驱动。接口电路如图:

PA4 VCC

PA5 S1 S步 TS2 PA6 进 M电 PA7 3S3 机

2 S4 PA8 四、 系统软件功能设计,程序流程图及代码实现,包括必要

5

4.1主程序流程图:

4. 2代码实现,包括必要的注释

/按键初始化函数

5. //PA0.15和PC5 设置成输入 6. void KEY_Init(void) 7. {

6

8. 9.

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

//关闭JTAG,开启SWD

10. JTAG_Set(SWD_ENABLE); 12. GPIOA->CRL|=0X00000008;

11. GPIOA->CRL&=0XFFFFFFF0; //PA0设置成输入 13. GPIOA->CRH&=0X0FFFFFFF; //PA15设置成输入 14. GPIOA->CRH|=0X80000000; 15. GPIOA->ODR|=1<<15;

//PA15上拉,PA0默认下拉

16. GPIOC->CRL&=0XFF0FFFFF; //PC5设置成输入 17. GPIOC->CRL|=0X00800000; 18. GPIOC->ODR|=1<<5; 19. } //按键处理函数

20. u8 KEY_Scan(u8 mode) 21. {

22. static u8 key_up=1;//按键按松开标志 23. if(mode)key_up=1; //支持连按 25. { 26. 27. 28. 29. 30.

delay_ms(10);//去抖动 key_up=0;

if(KEY0==0)return KEY0_PRES; else if(KEY1==0)return KEY1_PRES; else if(WK_UP==1)return WKUP_PRES;

24. if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))

//PC5上拉

31. }else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1; 32. return 0;// 无按键按下 33. }

//外部中断定义及初始化程序 //外部中断0服务程序

34. void EXTI0_IRQHandler(void) 35. { int speed;

36. delay_ms(10); //消抖 37. if(WK_UP==1) //WK_UP按键 38. { 39. 40. 41. 42. 43. 44. } 46. }

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

47. void EXTI9_5_IRQHandler(void)

7

//LED=!LED; if(speed==100000) else

{speed=100000;LED=1;}

{LED=0;speed=20;}

45. EXTI->PR=1<<0; //清除LINE0上的中断标志位

48. {

//按键0

49. delay_ms(10); //消抖 50. if(KEY0==0) 51. {LED=0;speed=3;}

52. EXTI->PR=1<<5; //清除LINE5上的中断标志位 53. }

54. //外部中断15~10服务程序 55. void EXTI15_10_IRQHandler(void) 56. {

//按键1

57. delay_ms(10); //消抖 58. if(KEY1==0) 59. {LED=0;speed=7;}

60. EXTI->PR=1<<15; //清除LINE15上的中断标志位 61. }

62. //外部中断初始化程序

63. //初始化PA0,PC5,PA15为中断输入. 64. void EXTI_Init(void) 65. {

66. KEY_Init();

67. Ex_NVIC_Config(GPIO_A,0,RTIR); 68. Ex_NVIC_Config(GPIO_C,5,FTIR);

69. Ex_NVIC_Config(GPIO_A,15,FTIR); 70. MY_NVIC_Init(2,2,EXTI0_IRQn,2); 71. MY_NVIC_Init(2,1,EXTI9_5_IRQn,2); 72. MY_NVIC_Init(2,0,EXTI15_10_IRQn,2); 73. }

//步进点击初始化函数

74. void MOTOR_Init(void) 75. {

76. RCC->APB2ENR|=1<<2; //使能PORTA时钟 77. RCC->APB2ENR|=1<<5; //使能PORTD时钟 78. GPIOA->CRL&=0X0000FFFF;

79. GPIOA->CRL|=0X11110000;//PA8 推挽输出 PA2 LED推挽输出 80. GPIOA->CRH&=0XFFFFFFF0; 81. GPIOA->CRH|=0X00000001; 82. GPIOA->ODR|=1<<8; 84. GPIOA->ODR|=1<<5;

85. GPIOA->ODR|=1<<6; //PA8 输出高 86. GPIOA->ODR|=1<<7;

87. GPIOD->CRL&=0XFFFFF0FF; 88. GPIOD->CRL|=0X00000300;//PD.2 89. GPIOD->ODR|=1<<2; //PD.2 90. }

8

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

//上升沿触发 //下降沿触发 //下降沿触发

//步进点击停止函数

91. void MOTOR_Stop(void) 92. {

93. MOTOR1=0; 94. MOTOR2=0; 95. MOTOR3=0; 96. MOTOR4=0; 97. int main(void) 98. {

99. Stm32_Clock_Init(9);//系统时钟设置 100. delay_init(72); //延时初始化 101. uart_init(72,9600); //串口初始化 102. MOTOR_Init(); 103. EXTI_Init(); 104. speed=100000; 105. MOTOR_Stop(); 106. while(1) 107. { 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 122. 124. 125. 126. 127. 128. 129. } 130. }

printf(\//delay_ms(1000); {delay_ms(100);}

MOTOR1=1;MOTOR2=0;MOTOR3=0;MOTOR4=0; delay_ms(speed);

MOTOR1=1;MOTOR2=1;MOTOR3=0;MOTOR4=0; delay_ms(speed);

MOTOR1=0;MOTOR2=1;MOTOR3=0;MOTOR4=0; delay_ms(speed);

MOTOR1=0;MOTOR2=1;MOTOR3=1;MOTOR4=0; LED8=!LED8; delay_ms(speed); delay_ms(speed); delay_ms(speed);

MOTOR1=0;MOTOR2=0;MOTOR3=0;MOTOR4=1; delay_ms(speed);

MOTOR1=1;MOTOR2=0;MOTOR3=0;MOTOR4=1; delay_ms(speed);

while(speed==100000)

//motor stop

//初始化motor //外部中断初始化

121. MOTOR1=0;MOTOR2=0;MOTOR3=1;MOTOR4=0; 123. MOTOR1=0;MOTOR2=0;MOTOR3=1;MOTOR4=1;

五、 实验测试、结果分析

9

实验结果如图:

结果分析:

实验结果基本完成本课题实验要求,实现的步进电机的的运转。但由于时间关系未能加入ADC模块,实现电机的转向等的控制。

六、 总结、心得体会

通过此次课程设计,使得我对ARMSTM32的基本知识有了深一步的认识,同时增

加了嵌入式开发的经验。在课设过程中遇到了一些小麻烦,就是调试的过程中,由于编程基础不是很深厚,检测不出问题,实现不了要求,后来在同学的帮忙下,改了ministm32的io端口,才成功实现的;这也让我懂得,做技术的一定要多实践,光有理论是不行的。

七、 主要参考文献

《嵌入式系统原理、设计及开发》清华大学出版社

《ARM嵌入式系统基础教程》 北京航空航天大学出版社 STM32不完全手册V2.3 周立功ARM培训精华(全套)

谭浩强C程序设计清华大学出版社

10

本文来源:https://www.bwwdw.com/article/bz8g.html

Top