嵌入式大作业资料解读.docx
《嵌入式大作业资料解读.docx》由会员分享,可在线阅读,更多相关《嵌入式大作业资料解读.docx(30页珍藏版)》请在冰豆网上搜索。
嵌入式大作业资料解读
键盘控制电机转动圈数设计
0引言
0.1嵌入式系统
嵌入式系统是不同于常见计算机的一种计算机系统,嵌入式系统不以独立设备的形态出现。
嵌入式系统的组件根据主体设备以及应用的需要,嵌入在主体设备内部,发挥着运算、处理、储存以及控制等等作用。
从体系结构看,嵌入式系统主要由嵌入式处理器、外围硬件和嵌入式软件组成。
其中嵌入式处理器通常是单芯片或微控制器,一般是8位或16位,目前32位正在占据主流地位。
外围硬件主要包括储存组件,如ROM、RAM、闪存(FlashMemory)等,通信组件,如USB接口、网络接口等,显示组件,如VGA显示卡、液晶显示组件等、I/O接口,如RS232接口、键盘等等。
不少嵌入式系统的外围硬件中还提供模拟信号与数字信号之间的转换组件。
嵌入式软件包括支持硬件的驱动软件、操作系统、支持软件以及应用中介软件,如通讯协议、图形接口、数据库系统和浏览器等等。
0.2JX44B0嵌入式教学实验系统
本篇工作基于嵌入式JX44B0教学实验系统进行。
JX44B0教学实验系统是一套硬件、软件集成的,基于ARM的完整的教学实验系统,系统包含丰富的硬件资源、完善而优越的调试手段和详尽的教学实验教程。
ADTIDE采用了一个通用的界面,可以非常方便地进行工程管理、编辑、编译、链接和调试,使得我们可以很快地进入到具体的实验中,含多种外设接口,采用模块化设计,便于硬件升级换代,并提供丰富的扩展槽以便扩充外部接口,专门为嵌入式系统教学定制。
JX44B0目标处理器采用三星的S3C44B0X处理器,开发平台采用武汉创维特信息技术有限公司的ADT集成开发环境(以下简称ADTIDE),嵌入式开发的所有过程都可以在该环境下完成。
JX44B0系列教学实验箱是实验系统的主要硬件平台,它包含一系列嵌入式教学实验方案:
(1)JX44B0-1B教学实验箱:
硬件系统包含了嵌入式系统开发应用所需的大部分接口,如:
以太网、USB口、音频接口、LCD以及触摸屏、键盘。
是一款经济型的ARM教学实验平台。
(2)JX44B0-1/JX44B0-2/JX44B0-3教学实验箱:
除了包含JX44B0-1B的所有硬件接口以外,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教学实验箱完成。
图1JX44B0-3教学实验箱
0.3步进电机
在电气时代的今天,电动机一直在现代的生产和生活起着十分重要的作用。
据资料统计,现在有90%以上的动力源来自于电动机,我国生产的电能大约有60%用于电动机。
电动机与人们的生活密切相关。
步进电动机作为机电一体化的关键产品之一,是一种专门用于位置和速度精确控制的特种电机。
其最大特点是“数字性”,在控制器的推动下运转一个角度,称为一步或步矩角,非常适合微机和单片机控制。
随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在国民经济各个领域都有应用。
鉴此,设计开发了一种基于单片机的步进电机控制系统。
步进电机是一种进行精确步进运动的机电执行元件,它广泛应用于工业机械的数字控制,为使系统的可靠性、通用性、可维护性以及性价比最优,根据控制系统功能要求及步进电机应用环境,确定了设计系统硬件和软件的功能划分,从而实现了基于ARM的四相步进电机的开环控制系统。
控制系统通过ARM存储器、中断、键盘、扩展、步进电机的环形分频器、驱动及保护电路、人机接口电路、中断系统及复位电路、单电压驱动电路等的设计,实现了四相步进电机的正反转,启停等功能。
随着嵌入式技术的不断发展,嵌入式系统在日用电子产品中的应用越来越广泛,自六十年代初期以来,步进电机的应用得到很大的提高。
人们用它来驱动时钟和其他采用指针的仪器,打印机、绘图仪,磁盘光盘驱动器、各种自动控制阀、各种工具,还有机器人等机械装置。
此外作为执行元件,步进电机是机电一体化的关键产品之一,被广泛应用在各种自动化控制系统中,随着微电子和计算机技术的发展,它的需要量与日俱增,在各个国民经济领域都有应用。
步进电机是机电数字控制系统中常用的执行元件,由于其精度高、体积小、控制方便灵活,因此在智能仪表和位置控制中得到了广泛的应用,大规模集成电路的发展以及单片机技术的迅速普及,为设计功能强,价格低的步进电机控制驱动器提供了先进的技术和充足的资源。
研究步进电机的控制系统,对提高控制精度和响应速度、节约能源等都具有重要意义。
0.4本篇工作介绍
本控制系统的设计,有硬件设计和软件设计两部分组成。
其中,硬件设计主要包括RAM7系统、键盘控制模块、步进电机驱动模块、数码显示模块等功能模块的设计,以及硬件电路在电路板上的实现。
软件设计包括主程序以及各个模块的控制程序,最终实验完成对步进电机转动方向及转动速度的控制,并且将对应的按键数字或字母动态显示在LED数码管上。
本系统具有智能性、实用性及可靠性的特点。
1功能综述
本次设计是在原有电机控制程序基础上加以改进的并增加了LED数码管显示数字和字母功能,通过控制键盘来控制电机转动的圈数、速度和方向,当按键为1时,电机开始转动1圈后停止,以此类推,当按键为9时,电机开始转动9圈后停止。
按键Enter(E)控制电机的转动和停止,按键0控制电机转动的方向,按下减速键(E)电机减速转动,按下加速键(F)电机加速转动。
此外,LED数码管上会同时显示按键对应的数字或字母。
2硬件设计
2.1硬件组成
实验系统的硬件部分包括:
基本模块、调试模块、通讯模块、人机交互模块。
基本模块:
SDRAM存储器。
主板包含8MBSDRAM。
由一片16位数据宽度的SDRAM存储器组成,地址从0x0c000000~0x0c800000。
S3C44B0X微处理器内部集成了8KBRAM,它既可作为RAM用,也可以作为高速缓存即cache使用,我们通常将它配置为Cache以提高系统性能;FLASH存储器:
主板包含4MBFLASH存储器,内部存放启动代码Bootloader、uCLinux内核映象、uC/OS-II演示程序代码、IIS测试声音文件等。
其数据宽度为16位,地址从0x00000000~0x00400000;串行通讯口:
主板包含2个UART接口:
UART0和UART1,UART0在Bootloader、演示程序、uCLinux和多个实验中用于人机交互(通过超级终端)以及文件传输;外部中断测试:
一个按键用于外部中断0的测试;复位按键:
按键用于CPU复位;五个PWM定时器和一个内部定时器。
调试模块:
标准JTAG接口。
14针标准JTAG接口,该接口用于高速仿真调试简易JTAG调试接口,直连标准计算机并口;调试接口,该接口用于简易仿真调试。
人机交互模块:
按键为4X4按键。
步进电机驱动模块:
两相步进电机驱动。
2.2工作原理
2.2.1步进电机工作原理
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。
在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。
这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点,使得在速度、位置等控制领域用步进电机来控制变的非常的简单。
步进电机是一种能够将电脉冲信号转换成角位移或线位移的机电元件,它实际上是一种单相或多相同步电动机。
单相步进电动机有单路电脉冲驱动,输出功率一般很小,其用途为微小功率驱动。
多相步进电动机有多相方波脉冲驱动,用途很广。
使用多相步进电动机时,单路电脉冲信号可先通过脉冲分配器转换为多相脉冲信号,在经功率放大后分别送入步进电动机各项绕组。
每输入一个脉冲到脉冲分配器,电动机各相的通电状态就发生变化,转子会转过一定的角度(称为步距角)。
正常情况下,步进电机转过的总角度和输入的脉冲数成正比,连续输入一定频率的脉冲时,电动机的转速与输入脉冲的频率保持严格的对应关系,不受电压波动和负载变化的影响。
由于步进电动机能直接接收数字量的输入,所以特别适合于微机控制。
目前常用的步进电机有三类:
1)反应式步进电动机(VR)。
它的结构简单,生产成本低,步距角可以做的相当小,但动态性能相对较差。
2)永磁式步进电动机(PM)。
它的出力大,动态性能好,但步距角一般比较大。
3)混合步进电动机(HB)。
它综合了反映式和永磁式两者的优点,步距角小,出力大,动态性能好,是性能较好的一类步进电动机。
现以反应式三相步进电机为例说明其工作原理。
定子铁心上有六个形状相同的大齿,相邻两个大齿之间的夹角为60度。
每个大齿上都套有一个线圈,径向相对的两个线圈串联起来成为一相绕组。
各个大齿的内表面上又有若干个均匀分布的小齿。
转子是一个圆柱形铁心,外表面上圆周方向均匀的布满了小齿,转子小齿的齿距是和定子相同的,设计时应使转子齿数能被二整除。
当某一相绕组通电,而转子可自由旋转时,该相两个大齿下的各个小齿将吸引相近的转子小齿,使电动机转动到转子小齿与该相定子小齿对齐的位置,而其它两相的各个大齿下的小齿必定和转子的小齿分别错开正负1/3的齿距,形成“齿错位”,从而形成电磁引力使电动机连续的转动下去。
和反应式步进电动机不同,永磁式步进电动机的绕组电流要求正、反向流动,故驱动电路一般要做成双极性驱动。
混合式步进电动机的绕组电流也要求正、反向流动,故驱动电路通常也要做成双极性。
步进电机有一个技术参数:
空载启动频率,即步进电机在空载情况下能够正常启动的脉冲频率,如果脉冲频率高于该值,电机不能正常启动,可能发生丢步或堵转。
在有负载的情况下,启动频率应更低。
如果要使电机达到高速转动,脉冲频率应该有加速过程,即启动频率较低,然后按一定加速度升到所希望的高频(电机转速从低速升到高速)。
本教学实验系统中使用的步进电机为四相式步进电机,但工作模式为两相四拍。
系统中采用一路I/O进行脉冲输出,通过CPLD控制器进行脉冲分配,在通过功率放大后,进入步进电机的各相绕组。
教学实验系统中的电机有两种工作模式:
半步模式,整步模式。
整步模式下的步距角为18度,半步模式则为9度,各模式下的脉冲分配信号如下:
1)半步模式
表1半步模式下的脉冲分配信号
序号
当前状态
正转脉冲
反转脉冲
1
0101
0001
0100
2
0001
1001
0110
3
1001
1000
0010
4
1000
1010
1010
5
1010
0010
1000
6
0010
0110
1001
7
0110
0100
0001
8
0100
0101
0101
信号分配图如下:
图2半步模式脉冲信号图
2)整步模式
表2整步模式下的脉冲分配信号
序号
当前状态
正转脉冲
反转脉冲
1
0101
1001
0110
3
1001
1010
1010
5
1010
0110
1001
7
0110
0101
0101
信号分配图如下:
2.2.2矩阵键盘工作原理
JX44B0教学实验系统的键盘电路由一块74HC273锁存器和74LVCH244缓
冲器完成键盘识别。
在没有按键情况下,ROW0~ROW3通过上拉保持高电平。
图5JJ44B0教学实验系统键盘电路
检测时通过将COL0~COL3中的某一列输入低电平,如果该列没有键按下时,通过74LVCH244读取到的行值应该为高电平,如果该列某行位置有键按下,那么该行读取到的值应该为低电平。
因此,采用轮询方式检测键盘的方法为:
循环往各列输入低电平,然后读取行值,如果为全高电平,则判断下一列,否则,该行有键按下,此时已经读取到了该键的行值和列值,然后根据行值和列值得到键码。
2.2.3LED数码管工作原理
发光二极管数码显示器简称LED显示器。
LED显示器具有耗电省、成本低廉、配置简单灵活、安装方便、耐振动、寿命长等优点,目前广泛应用于嵌入式系统中。
7段LED由7个发光二极管按“日”字形排列,所有发光二极管的阳极连在一起称共阳极接法,阴极连在一起称为共阴极接法。
一般共阴极可以不需外接电阻,但共阳极接法中发光二极管必须外接电阻。
LED的结构及连接图如下图所示。
图6LED结构及连接图
当选用共阴极的LED显示器时,所有发光二极管的阴极连在一起接地,当某个发光二极管的阳极加入高电平时,对应的二极管点亮。
因此要显示某字形就应使此字形的相应段的二极管点亮,也就是送一个用不同电平组合代表的数据字来控制LED的显示,此数据称为字符的段码。
字符0、1、2…F与LED码段A、B、C…F以及DP(小数点)的关系如下表3所示:
表3LED字符与码段对应表
字符
DP
G
F
E
D
C
B
A
段码(共阴)
段码(共阳)
0
0
0
1
1
1
1
1
1
3FH
C0H
1
0
0
0
0
0
1
1
0
06H
F9H
2
0
1
0
1
1
0
1
1
5BH
A4H
3
0
1
0
0
1
1
1
1
4FH
B0H
4
0
1
1
0
0
1
1
0
66H
99H
5
0
1
1
0
1
1
0
1
6DH
92H
6
0
1
1
1
1
1
0
1
7DH
82H
7
0
0
0
0
0
1
1
1
07H
F8H
8
0
1
1
1
1
1
1
1
7FH
80H
9
0
1
1
0
1
1
1
1
6FH
90H
A
0
1
1
1
0
1
1
1
77H
88H
B
0
1
1
1
1
1
0
0
7CH
83H
C
0
0
1
1
1
0
0
1
39H
C5H
D
0
1
0
1
1
1
1
0
5EH
A1H
E
0
1
1
1
1
0
0
1
79H
86H
F
0
1
1
1
0
0
0
1
71H
8EH
-
0
1
0
0
0
0
0
0
40H
BFH
.
1
0
0
0
0
0
0
0
80H
7FH
熄灭
0
0
0
0
0
0
0
0
00H
FFH
其中,共阴的LED,被选中时的段为高电平有效,熄灭的段码为00H;共阳的LED,被选中时的段为低电平有效.熄灭的段码为FFH。
本实验系统中采用的是动态显示接口,其中数码管扫描控制地址为0x02000006,位0-位5每位分别对应一个数码管,将其中某位清0来选择相应的数码管,地址0x02000004为数码管的数据寄存器。
数码管采用共阳方式,向该地址写一个数据就可以控制LED的显示。
其原理图如下图7所示:
图7教学实验系统LED原理图
3软件设计
3.1软件总体设计(包括启动部分)
软件主要由矩阵键盘扫描与查表、键值功能设置、步进电机驱动3部分组成。
软件主流程图如下:
图8软件主流程图
3.2软件流程图(自编部分)及工作原理
图9TICK中断处理程序流程图
图10按键处理程序流程图
TICK中断处理程序是在原有电机控制程序中自行改编的,加入了是否j/100=x的判断和j++,用了判断电机是否转够按键设定的数的十倍,按键程序中加入了对1到9的键判断和对x赋值。
按键为1时,电机应该是开始转10圈然后停止,按键位2时,电机应该是转20圈然后停止,以此类推,按键为9时,电机转90圈停止转动,在演示时可以先按E键把电机转速降下来在安数字键,使演示现象能明显,不至于转速太快而难观察转速。
4实验结果
预期实现现象已经成功,电机能够较稳定得在按键的操作下完成任务。
5总结
本篇工作基于嵌入式JX44B0教学实验系统进行,结合嵌入式实验中的数码管显示实验、步进电机实验和键盘输入实验,围绕键盘扫描技术,将数码管显示、步进电机的控制等功能融为一体,利用键盘,能够快捷方便的实现上述功能。
本文首先对键盘的扩展应用进行了功能综述,对键盘各个按键对应实现功能简要进行了介绍。
接着对硬件设计,包括硬件的组成部分及各部分的工作原理进行了阐释;对软件设计进行了说明,包括软件的总体设计,流程图以及各部分软件设计的工作原理。
然后给出运行的实验结果,结果证明该程序可执行,可完成预先设计的功能。
通过本次的大作业,对ARM的硬件资源有了一定的了解。
在编程、编译、连接、下载、运行、调试过程中增强了从理论到实践的操作能力,深刻认识到实践能力的重要性,同时在调试过程中,纠错能力也得到了很大的提高。
由于时间的限制和能力的有限,本次设计功能较简单,希望在以后学习中能进一步提高编程和实践能力。
6附录软件清单(自编部分)
/****************************************************************************/
/**/
/*FILENAMEVERSION*/
/**/
/*STEPPER.C1.0*/
/**/
/*DESCRIPTION*/
/**/
/*JX44B0(S3C44B0X)步进电机实验*/
/**/
/**/
/*DATASTRUCTURES*/
/**/
/*FUNCTIONS:
*/
/*在JX44B0教学实验箱进行步进电机控制的实验*/
/**/
/*DEPENDENCIES*/
/*JX44B0-1*/
/*JX44B0-2*/
/*JX44B0-3*/
/**/
/**/
/*NAME:
*/
/*REMARKS:
*/
/**/
/*Copyright(C)2003WuhanCVTECHCO.,LTD*/
/****************************************************************************/
/****************************************************************************/
/*学习JX44B0实验箱中的步进电机控制方法:
*/
/****************************************************************************/
/*包含文件*/
#include"44b.h"
#defineSTEP_INTERVALE0x40
#defineSTEPER_VALUE_MIN0x40
#defineSTEPER_VALUE_MAX0x1000
#defineSTEPER_MOTOR_ENABLE1
#defineSTEPER_MOTOR_DISABLE0
#defineSTEPER_MOTOR_CLOCKWISE0
#defineSTEPER_MOTOR_ANTICLOCKWISE1
#definetrue1
#definefalse0
#defineSTEPER_ENABLE0x01
#defineSTEPER_SINGLE0x02
#defineSTEPER_REVERSE0x04
#defineMIN_STEPER_PLUSE_FREQ0x300
#defineMAX_STEPER_PLUSE_FREQ0x100000
#defineSET_STEPER_ENABLE(X)\
{\
if(X)\
steper_control_mask|=(1<<3);\
else\
steper_control_mask&=~(1<<3);\
*(unsignedchar*)0x0a000006=steper_control_mask;\
}
#defineSET_STEPER_REVERSE(X)\
{\
if(X)steper_control_mask|=(1<<2);\
elsesteper_control_mask&=~(1<<2);\
*(unsignedchar*)0x0a000006=steper_control_mask;\
}
#defineGEN_PLUSE_HIGH(){rPDATC|=(1<<11);}
#defineGEN_PLUSE_LOW(){rPDATC&=(~(1<<11));}
typedef(*ISR_ROUTINE_ENTRY)(void);
charkey_get_char(introw,intcol);
voidinit_interrupt_handler(unsignedintirq_handler);
voidinstall_isr_handler(intirq_no,void*irq_routine);
voidtimer1_isr(void);
voidIsrIRQ()__attribute__((interrupt("IRQ")));
staticintsteper_control_mask=0xf8;
intstep_status;/*当前步进电机的工作状态*/
intstep_mode;/*模式:
单步或循环,正反转*/
intstep_freq;/*步进频率*/
intm=0;
intn=0;
intj=0;
intx=100;
/****************************************************************************/
/*显示码表*/
/*七段数码管结构:
*/
/*A*/
/*--------*/
/*||*/
/*F||B*/
/*|G|*/
/*--------*/
/*||*/
/*E||C*/
/*||*/
/*--------*/
/*D*/
/**/
/*七段数码管显示原理:
*/
/*JX44B0采用共阳方式连接,为1时点亮、为0时熄灭*/
/**/
/*七段数码管字符与码段对应表*/
/*字符DPGFEDCBA段码(共阴)段码(共阳)*/
/*0001111113FHC0H*/
/*10000011006HF9H*/
/*2