嵌入式大作业_第1页
嵌入式大作业_第2页
嵌入式大作业_第3页
嵌入式大作业_第4页
嵌入式大作业_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、键盘控制电机转动圈数设计0 引言0.1 嵌入式系统嵌入式系统是不同于常见计算机的一种计算机系统,嵌入式系统不以独立设备的形态出现。嵌入式系统的组件根据主体设备以及应用的需要,嵌入在主体设备内部,发挥着运算、处理、储存以及控制等等作用。从体系结构看,嵌入式系统主要由嵌入式处理器、外围硬件和嵌入式软件组成。其中嵌入式处理器通常是单芯片或微控制器,一般是8位或16位,目前32位正在占据主流地位。外围硬件主要包括储存组件,如ROM、RAM、闪存(Flash Memory)等,通信组件,如USB接口、网络接口等,显示组件,如VGA显示卡、液晶显示组件等、I/O接口,如RS232接口、键盘等等。不少嵌入式

2、系统的外围硬件中还提供模拟信号与数字信号之间的转换组件。嵌入式软件包括支持硬件的驱动软件、操作系统、支持软件以及应用中介软件,如通讯协议、图形接口、数据库系统和浏览器等等。0.2 JX44B0嵌入式教学实验系统本篇工作基于嵌入式JX44B0教学实验系统进行。JX44B0教学实验系统是一套硬件、软件集成的,基于ARM的完整的教学实验系统,系统包含丰富的硬件资源、完善而优越的调试手段和详尽的教学实验教程。ADT IDE采用了一个通用的界面,可以非常方便地进行工程管理、编辑、编译、链接和调试,使得我们可以很快地进入到具体的实验中,含多种外设接口,采用模块化设计,便于硬件升级换代,并提供丰富的扩展槽以

3、便扩充外部接口,专门为嵌入式系统教学定制。JX44B0目标处理器采用三星的S3C44B0X处理器,开发平台采用武汉创维特信息技术有限公司的ADT集成开发环境(以下简称ADT IDE),嵌入式开发的所有过程都可以在该环境下完成。JX44B0系列教学实验箱是实验系统的主要硬件平台,它包含一系列嵌入式教学实验方案:(1)JX44B0-1B教学实验箱:硬件系统包含了嵌入式系统开发应用所需的大部分接口,如:以太网、USB口、音频接口、LCD以及触摸屏、键盘。是一款经济型的ARM教学实验平台。(2)JX44B0-1/JX44B0-2/JX44B0-3教学实验箱:除了包含JX44B0-1B的所有硬件接口以外

4、,JX44B0-1另外添加了多个高级接口:如CF卡接口、IDE接口、标准计算机打印口等;JX44B0-2在JX44B0-1的基础上添加GPRS无线通讯模块,可以进行通话和短信等高级实验;JX44B0-3在JX44B0-2的基础上又添加了GPS全球定位模块。且JX44B0-1/JX44B0-2/JX44B0-3采用模块化设计,可任意选配和升级高级模块(ARM核心板、GPRS模块和GPS模块)。本篇工作基于JX44B0-3教学实验箱完成。图1 JX44B0-3教学实验箱0.3 步进电机在电气时代的今天,电动机一直在现代的生产和生活起着十分重要的作用。据资料统计,现在有以上的动力源来自于电动机,我国

5、生产的电能大约有用于电动机。电动机与人们的生活密切相关。步进电动机作为机电一体化的关键产品之一,是一种专门用于位置和速度精确控制的特种电机。其最大特点是“数字性”,在控制器的推动下运转一个角度,称为一步或步矩角,非常适合微机和单片机控制。随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在国民经济各个领域都有应用。鉴此,设计开发了一种基于单片机的步进电机控制系统。步进电机是一种进行精确步进运动的机电执行元件,它广泛应用于工业机械的数字控制,为使系统的可靠性、通用性、可维护性以及性价比最优,根据控制系统功能要求及步进电机应用环境,确定了设计系统硬件和软件的功能划分,从而实现了基于ARM的四

6、相步进电机的开环控制系统。控制系统通过ARM存储器、中断、键盘、扩展、步进电机的环形分频器、驱动及保护电路、人机接口电路、中断系统及复位电路、单电压驱动电路等的设计,实现了四相步进电机的正反转,启停等功能。随着嵌入式技术的不断发展,嵌入式系统在日用电子产品中的应用越来越广泛,自六十年代初期以来,步进电机的应用得到很大的提高。人们用它来驱动时钟和其他采用指针的仪器,打印机、绘图仪,磁盘光盘驱动器、各种自动控制阀、各种工具,还有机器人等机械装置。此外作为执行元件,步进电机是机电一体化的关键产品之一,被广泛应用在各种自动化控制系统中,随着微电子和计算机技术的发展,它的需要量与日俱增,在各个国民经济领

7、域都有应用。步进电机是机电数字控制系统中常用的执行元件,由于其精度高、体积小、控制方便灵活,因此在智能仪表和位置控制中得到了广泛的应用,大规模集成电路的发展以及单片机技术的迅速普及,为设计功能强,价格低的步进电机控制驱动器提供了先进的技术和充足的资源。研究步进电机的控制系统,对提高控制精度和响应速度、节约能源等都具有重要意义。0.4 本篇工作介绍本控制系统的设计,有硬件设计和软件设计两部分组成。其中,硬件设计主要包括RAM7系统、键盘控制模块、步进电机驱动模块、数码显示模块等功能模块的设计,以及硬件电路在电路板上的实现。软件设计包括主程序以及各个模块的控制程序,最终实验完成对步进电机转动方向及

8、转动速度的控制,并且将对应的按键数字或字母动态显示在LED数码管上。本系统具有智能性、实用性及可靠性的特点。1 功能综述本次设计是在原有电机控制程序基础上加以改进的并增加了LED数码管显示数字和字母功能,通过控制键盘来控制电机转动的圈数、速度和方向,当按键为1时,电机开始转动1圈后停止,以此类推,当按键为9时,电机开始转动9圈后停止。按键Enter(E)控制电机的转动和停止,按键0控制电机转动的方向,按下减速键(E)电机减速转动,按下加速键(F)电机加速转动。此外,LED数码管上会同时显示按键对应的数字或字母。2 硬件设计2.1 硬件组成实验系统的硬件部分包括:基本模块、调试模块、通讯模块、人

9、机交互模块。基本模块:SDRAM存储器。主板包含8MB SDRAM。由一片16位数据宽度的SDRAM存储器组成,地址从0x0c0000000x0c800000。S3C44B0X微处理器内部集成了8KB RAM,它既可作为RAM用,也可以作为高速缓存即cache使用,我们通常将它配置为Cache以提高系统性能;FLASH存储器:主板包含4MB FLASH存储器,内部存放启动代码Bootloader、uCLinux内核映象、uC/OS-II演示程序代码、IIS测试声音文件等。其数据宽度为16位,地址从0x000000000x00400000;串行通讯口:主板包含2个UART接口:UART0和UAR

10、T1,UART0在Bootloader、演示程序、uCLinux和多个实验中用于人机交互(通过超级终端)以及文件传输;外部中断测试:一个按键用于外部中断0的测试;复位按键:按键用于CPU复位;五个PWM定时器和一个内部定时器。调试模块:标准JTAG接口。14针标准JTAG接口,该接口用于高速仿真调试简易JTAG调试接口,直连标准计算机并口;调试接口,该接口用于简易仿真调试。人机交互模块:按键为4X4按键。 步进电机驱动模块:两相步进电机驱动。2.2 工作原理2.2.1步进电机工作原理步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信

11、号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点,使得在速度、位置等控制领域用步进电机来控制变的非常的简单。步进电机是一种能够将电脉冲信号转换成角位移或线位移的机电元件,它实际上是一种单相或多相同步电动机。单相步进电动机有单路电脉冲驱动,输出功率一般很小,其用途为微小功率驱动。多相步进电动机有多相方波脉冲驱动,用途很广。使用多相步进电动机时,单路电脉冲信号可先通过脉冲分配器转换为多相脉冲信号,在经功率放大后分别送入步进电动机各项绕组。每输入一个脉冲到脉冲分配器,电动机各相的通电状态就发生变化

12、,转子会转过一定的角度(称为步距角)。正常情况下,步进电机转过的总角度和输入的脉冲数成正比,连续输入一定频率的脉冲时,电动机的转速与输入脉冲的频率保持严格的对应关系,不受电压波动和负载变化的影响。由于步进电动机能直接接收数字量的输入,所以特别适合于微机控制。目前常用的步进电机有三类:1) 反应式步进电动机(VR)。它的结构简单,生产成本低,步距角可以做的相当小,但动态性能相对较差。2) 永磁式步进电动机(PM)。它的出力大,动态性能好,但步距角一般比较大。3) 混合步进电动机(HB)。它综合了反映式和永磁式两者的优点,步距角小,出力大,动态性能好,是性能较好的一类步进电动机。现以反应式三相步进

13、电机为例说明其工作原理。定子铁心上有六个形状相同的大齿,相邻两个大齿之间的夹角为60 度。每个大齿上都套有一个线圈,径向相对的两个线圈串联起来成为一相绕组。各个大齿的内表面上又有若干个均匀分布的小齿。转子是一个圆柱形铁心,外表面上圆周方向均匀的布满了小齿,转子小齿的齿距是和定子相同的,设计时应使转子齿数能被二整除。当某一相绕组通电,而转子可自由旋转时,该相两个大齿下的各个小齿将吸引相近的转子小齿,使电动机转动到转子小齿与该相定子小齿对齐的位置,而其它两相的各个大齿下的小齿必定和转子的小齿分别错开正负1/3 的齿距,形成“齿错位”,从而形成电磁引力使电动机连续的转动下去。和反应式步进电动机不同,

14、永磁式步进电动机的绕组电流要求正、反向流动,故驱动电路一般要做成双极性驱动。混合式步进电动机的绕组电流也要求正、反向流动,故驱动电路通常也要做成双极性。步进电机有一个技术参数:空载启动频率,即步进电机在空载情况下能够正常启动的脉冲频率,如果脉冲频率高于该值,电机不能正常启动,可能发生丢步或堵转。在有负载的情况下,启动频率应更低。如果要使电机达到高速转动,脉冲频率应该有加速过程,即启动频率较低,然后按一定加速度升到所希望的高频(电机转速从低速升到高速)。本教学实验系统中使用的步进电机为四相式步进电机,但工作模式为两相四拍。系统中采用一路I/O 进行脉冲输出,通过CPLD控制器进行脉冲分配,在通过

15、功率放大后,进入步进电机的各相绕组。教学实验系统中的电机有两种工作模式:半步模式,整步模式。整步模式下的步距角为18度,半步模式则为9度,各模式下的脉冲分配信号如下:1) 半步模式表1 半步模式下的脉冲分配信号序 号当 前 状 态正 转 脉 冲反 转 脉 冲10101000101002000110010110310011000001041000101010105101000101000600100110100170110010000018010001010101 信号分配图如下:图2 半步模式脉冲信号图2) 整步模式表2 整步模式下的脉冲分配信号序 号当 前 状 态正 转 脉 冲反 转 脉 冲

16、1010110010110310011010101051010011010017011001010101信号分配图如下:2.2.2矩阵键盘工作原理JX44B0教学实验系统的键盘电路由一块74HC273锁存器和74LVCH244缓冲器完成键盘识别。在没有按键情况下,ROW0ROW3通过上拉保持高电平。ARM微处理器Samsung S3C44BOXLCD显示模块蜂鸣器矩阵键盘JTAG端口图5 JJ44B0教学实验系统键盘电路检测时通过将COL0COL3中的某一列输入低电平,如果该列没有键按下时,通过74LVCH244读取到的行值应该为高电平,如果该列某行位置有键按下,那么该行读取到的值应该为低电平

17、。因此,采用轮询方式检测键盘的方法为:循环往各列输入低电平,然后读取行值,如果为全高电平,则判断下一列,否则,该行有键按下,此时已经读取到了该键的行值和列值,然后根据行值和列值得到键码。2.2.3 LED数码管工作原理发光二极管数码显示器简称LED显示器。LED显示器具有耗电省、成本低廉、配置简单灵活、安装方便、耐振动、寿命长等优点,目前广泛应用于嵌入式系统中。7段LED由7个发光二极管按“日”字形排列,所有发光二极管的阳极连在一起称共阳极接法,阴极连在一起称为共阴极接法。一般共阴极可以不需外接电阻,但共阳极接法中发光二极管必须外接电阻。LED的结构及连接图如下图所示。图6 LED结构及连接图

18、当选用共阴极的LED显示器时,所有发光二极管的阴极连在一起接地,当某个发光二极管的阳极加入高电平时,对应的二极管点亮。因此要显示某字形就应使此字形的相应段的二极管点亮,也就是送一个用不同电平组合代表的数据字来控制LED的显示,此数据称为字符的段码。字符0、1、2F与LED码段A、B、CF以及DP(小数点)的关系如下表3所示:表3 LED字符与码段对应表字符DPGFEDCBA段码(共阴)段码(共阳)0001111113FHC0H10000011006HF9H2010110115BHA4H3010011114FHB0H40110011066H99H5011011016DH92H6011111017

19、DH82H70000011107HF8H8011111117FH80H9011011116FH90HA0111011177H88HB011111007CH83HC0011100139HC5HD010111105EHA1HE0111100179H86HF0111000171H8EH-0100000040HBFH.1000000080H7FH熄灭0000000000HFFH其中,共阴的LED,被选中时的段为高电平有效,熄灭的段码为00H;共阳的LED,被选中时的段为低电平有效熄灭的段码为FFH。本实验系统中采用的是动态显示接口,其中数码管扫描控制地址为0x02000006,位0位5每位分别对应一个

20、数码管,将其中某位清0来选择相应的数码管,地址0x02000004为数码管的数据寄存器。数码管采用共阳方式,向该地址写一个数据就可以控制LED的显示。其原理图如下图7所示:图7 教学实验系统LED原理图3 软件设计3.1 软件总体设计(包括启动部分)软件主要由矩阵键盘扫描与查表、键值功能设置、步进电机驱动3部分组成。软件主流程图如下:图8 软件主流程图3.2 软件流程图(自编部分)及工作原理图9 TICK中断处理程序流程图图10 按键处理程序流程图TICK中断处理程序是在原有电机控制程序中自行改编的,加入了是否j/100=x的判断和j+,用了判断电机是否转够按键设定的数的十倍,按键程序中加入了

21、对1到9的键判断和对x赋值。按键为1时,电机应该是开始转10圈然后停止,按键位2时,电机应该是转20圈然后停止,以此类推,按键为9时,电机转90圈停止转动,在演示时可以先按E键把电机转速降下来在安数字键,使演示现象能明显,不至于转速太快而难观察转速。4 实验结果预期实现现象已经成功,电机能够较稳定得在按键的操作下完成任务。5 总结本篇工作基于嵌入式JX44B0教学实验系统进行,结合嵌入式实验中的数码管显示实验、步进电机实验和键盘输入实验,围绕键盘扫描技术,将数码管显示、步进电机的控制等功能融为一体,利用键盘,能够快捷方便的实现上述功能。本文首先对键盘的扩展应用进行了功能综述,对键盘各个按键对应

22、实现功能简要进行了介绍。接着对硬件设计,包括硬件的组成部分及各部分的工作原理进行了阐释;对软件设计进行了说明,包括软件的总体设计,流程图以及各部分软件设计的工作原理。然后给出运行的实验结果,结果证明该程序可执行,可完成预先设计的功能。 通过本次的大作业,对ARM的硬件资源有了一定的了解。在编程、编译、连接、下载、运行、调试过程中增强了从理论到实践的操作能力,深刻认识到实践能力的重要性,同时在调试过程中,纠错能力也得到了很大的提高。由于时间的限制和能力的有限,本次设计功能较简单,希望在以后学习中能进一步提高编程和实践能力。6 附录 软件清单(自编部分)/*/* */* FILE NAME VER

23、SION */* */* STEPPER.C 1.0 */* */* DESCRIPTION */* */* JX44B0(S3C44B0X)步进电机实验 */* */* */* DATA STRUCTURES */* */* FUNCTIONS : */* 在JX44B0教学实验箱进行步进电机控制的实验 */* */* DEPENDENCIES */* JX44B0-1 */* JX44B0-2 */* JX44B0-3 */* */* */* NAME: */* REMARKS: */* */*Copyright (C) 2003 Wuhan CVTECH CO.,LTD */*/*/*

24、学习JX44B0实验箱中的步进电机控制方法: */*/* 包含文件 */#include "44b.h"#define STEP_INTERVALE0x40#define STEPER_VALUE_MIN 0x40#define STEPER_VALUE_MAX 0x1000#define STEPER_MOTOR_ENABLE 1#define STEPER_MOTOR_DISABLE 0#define STEPER_MOTOR_CLOCKWISE 0 #define STEPER_MOTOR_ANTICLOCKWISE 1 #define true1#define fa

25、lse0#define STEPER_ENABLE0x01#define STEPER_SINGLE0x02#define STEPER_REVERSE0x04#define MIN_STEPER_PLUSE_FREQ0x300#define MAX_STEPER_PLUSE_FREQ0x100000#define SET_STEPER_ENABLE(X) if(X)steper_control_mask |= (1<<3); else steper_control_mask &= (1<<3);*(unsigned char *)0x0a000006 = st

26、eper_control_mask; #define SET_STEPER_REVERSE(X) if(X)steper_control_mask |= (1<<2); else steper_control_mask &= (1<<2);*(unsigned char *)0x0a000006 = steper_control_mask; #define GEN_PLUSE_HIGH()rPDATC |= (1<<11);#define GEN_PLUSE_LOW()rPDATC &= (1<<11);typedef (*ISR

27、_ROUTINE_ENTRY)(void);char key_get_char(int row, int col);void init_interrupt_handler(unsigned int irq_handler);void install_isr_handler(int irq_no, void* irq_routine);void timer1_isr(void);void IsrIRQ() _attribute_ (interrupt("IRQ");static int steper_control_mask = 0xf8;int step_status;/*

28、 当前步进电机的工作状态 */int step_mode;/* 模式:单步或循环,正反转 */int step_freq;/* 步进频率 */int m=0; int n=0; int j=0;int x=100;/*/* 显示码表 */* 七段数码管结构: */* A */* - */* | | */* F| |B */* | G | */* - */* | | */* E| | C */* | | */* - */* D */* */* 七段数码管显示原理: */* JX44B0采用共阳方式连接,为1时点亮、为0时熄灭 */* */* 七段数码管字符与码段对应表 */*字符 DPGFEDC

29、BA段码(共阴)段码(共阳) */* 0001111113FH C0H */ /* 10000011006H F9H */* 2010110115BH A4H */* 3010011114FH B0H */* 40110011066H 99H */* 5011011016DH 92H */* 6011111017DH 82H */* 70000011107H F8H */* 8011111117FH 80H */* 9011011116FH 90H */* A0111011177H 88H */* B011111007CH 83H */* C0011100139H C5H */* D01011

30、1105EH A1H */* E0111100179H 86H */* F0111000171H 8EH */* -0100000040H BFH */* .1000000080H 7FH */*熄灭0000000000H FFH */*/unsigned char seg7table16 = /* 0 1 2 3 4 5 6 7*/ 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, /* 8 9 A B C D E F*/ 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e,;#define U8 uns

31、igned charvoid Test_Seg7(void); /设置LED数码管/*/ Function name: key_get_char/ Description : 根据键盘行列键值查询键/ Return type: char/ Argument : int row/ Argument : int col*/char key_get_char(int row, int col)char key;switch( row )case 0:if(col = 0x0b ) key = '0'else if(col = 0x0e) key = '7'else i

32、f(col = 0x07) key = '4'else if(col = 0x0d) key = '1'break;case 1:if(col = 0x0b ) key = 'A'else if(col = 0x0e) key = '8'else if(col = 0x07) key = '5'else if(col = 0x0d) key = '2'break;case 2:if(col = 0x0b ) key = 'B'else if(col = 0x0e) key = 

33、9;9'else if(col = 0x07) key = '6'else if(col = 0x0d) key = '3'break;case 3:if(col = 0x0b ) key = 'C'else if(col = 0x0e) key = 'D'else if(col = 0x07) key = 'E'else if(col = 0x0d) key = 'F'break;default:break;return key;/*/ Function name: stepper_con

34、trol/ Description : 步进电机使能控制/ Return type: void/ Argument : int benable/ STEPER_MOTOR_ENABLE - stepper enable/ STEPER_MOTOR_DISABLE - stepper disable*/void stepper_control(int benable) if(benable = STEPER_MOTOR_ENABLE) steper_control_mask |= (1<<3); *(unsigned char *)0x0a000006 = steper_contro

35、l_mask; else steper_control_mask &= (1<<3); *(unsigned char *)0x0a000006 = steper_control_mask; /*/ Function name: stepper_set_direct/ Description : 步进电机方向控制/ Return type: void/ Argument : int direct/ STEPER_MOTOR_CLOCKWISE - clockwise direction/ STEPER_MOTOR_ANTICLOCKWISE - anticlockwise

36、direction*/void stepper_set_direct(int direct)if(direct = STEPER_MOTOR_CLOCKWISE)steper_control_mask |= (1<<2);*(unsigned char *)0x0a000006 = steper_control_mask;elsesteper_control_mask &= (1<<2);*(unsigned char *)0x0a000006 = steper_control_mask;/*/ Function name: delay/ Description

37、 : 延时子程序/ Return type: void/ Argument : count,延时的数值*/void delay( int count )for( ; count>0; count-);/*/ Function name: Main/ Description : 步进电机驱动程序/ 键盘定义/ 1(正反转) 2(使能) 3 UP(加速)/ 4 5 6 DOWN(减速)/ 7 8 9 Cancel(退出)/ 0 . Del Enter/ Return type: void/ Argument : void*/void Main(void)int bout = 0; int i

38、nit_rTCNTB1 = STEPER_VALUE_MIN;int port_con_c, port_up_c;int row;int ascii_key,input_key0, input_key1,input_key2, key_mask = 0x0F;unsigned char*keyboard_port_scan = (unsigned char*)0x02000000;unsigned char*keyboard_port_value = (unsigned char*)0x02000002;*(unsigned char *)0x0a000006 = 0xf8;/ bakup the config of port cport_con_c = rPCONC;port_up_c = rPUPC;/ config the port crPCONC = port_con_c | (1 << 22);rPUPC = port_up_c | (1 << 11);/* 设置步进电机初始工作状态 */step_mode = step_statu

温馨提示

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

评论

0/150

提交评论