1、 摘 要现代汽车中,中控门锁越来越普及,给驾驶员带来很大的方便。所谓中控锁全称是“中央控制车门锁”,其作用是驾驶员控制驾驶侧车门锁开关的同时,全车的车门锁受中控锁控制,与驾驶侧车门锁同时开启和上锁。仅驾驶座一侧的门锁开关有中控锁的功能,其它的门锁在开启和锁上的时候,不会影响的别的车门锁。ARM处理器体积小,低功耗,成本低,性能高,能很好兼容8位,16位器件。大量使用寄存器,指令执行速度更快,大多数数据操作都在寄存器中完成。寻址方式灵活简单,执行效率高并且指令长度固定。是今后主流的处理器。本设计是利用ARM架构的LPC2103作为主控芯片以及数码管来模拟汽车中控门直流电机控制系统关键词:中控锁
2、直流电机 ARM处理器 数码管 uC/OS II操作系统目录1.绪论11.1课题名称11.2课题研究意义11.3 uC/OS II操作系统简介12 .中控门锁的工作原理23 .ARM及主控芯片LPC2103的简介33.1 LPC2103特性33.2 ARM管脚信息43.3定时器153.3.1匹配输出53.3.2PWM输出74.系统的硬件及软件设技94.1.器件表的生成94.2按键电路设计94.3指示LED电路的设计94.4数码管电路的设计104.5软件的概述104.6电机数码管及LED模块114.7按键输入模块114.8控制模块114.9显示模块124.10定时模块124.11主函数125.硬
3、件电路的焊接及调试135.1软件的焊接135.2软件的调试146.未来拓展166.1利用电机正反转控制电路16总结17致谢18参考文献19附录201.绪论1.1课题名称带操作系统的汽车中控门直流电机控制设计在这个项目中,我的主要任务是完成直流电机对中控锁的控制设计,设计一个模拟汽车中控门直流电机控制系统设计的电路图和使用器件表,包括1个汽车中控门直流电机1个数码管,完成模拟汽车中控门直流电机控制设计。1.2课题研究意义中控门锁控制装置,早在上世纪70年代已经装配在轿车上,经过二十余年时间,已经应用得比较普遍了,且功能也越来越强大。但是“中控门锁”控制装置在国内商用车上的应用却发展较慢,直到上世
4、纪90年代末才有少量几款商用车开始装配中控门锁系统。随着国内汽车行业的飞速发展,如今中控门锁系统也在商用车上得到了广泛的应用和发展。现代汽车多数都选择安装了中控门锁,他可以使驾驶员更加方便,安全的使用汽车。1.3 uC/OS II操作系统简介uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的、可裁减的、抢占式、实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,适合很多商业操作系统性能相当的实时操作系统(RTOS)。为了提供最好的移植性能,uC/OS II最大程度上使用ANSI C语言进行开发,并且已经移植到近40多种处
5、理器体系上,涵盖了从8位到64位各种CPU(包括DSP)。 uC/OS II可以简单的视为一个多任务调度器,在这个任务调度器之上完善并添加了和多任务操作系统相关的系统服务,如信号量、邮箱等。其主要特点有公开源代码,代码结构清晰、明了,注释详尽,组织有条理,可移植性好,可裁剪,可固化。内核属于抢占式,最多可以管理60个任务。从1992年开始,由于高度可靠性、移植性和安全性,uC/OS II已经广泛使用在从照相机到航空电子产品的各种应用中。2 .中控门锁的工作原理(1)当数码管显示数字1是直流电机电机开始反转,意味着门锁自动打开。(2)当数码管显示数字6时电机直流电机停止转动,意味着门锁自动落锁。
6、2-1接线原理图3 .ARM及主控芯片LPC2103的简介ARM公司自1990年正式成立以来, 在32位RISC (Reduced Instruction Set Computer CPU)开发领域不断取得突破,其结构已经从V3发展到V7。由于ARM公司自成立以来,一直以IP(Intelligence Property)提供者的身份向各大半导体制造商出售知识产权,而自己从不介入芯片的生产销售,加上其设计的芯核具有功耗低、成本低等显著优点,因此获得众多的半导体厂家和整机厂商的大力支持,在32位嵌入式应用领域获得了巨大的成功,已经占有75%以上的32位RISC嵌入式产品市场。在低功耗、低成本的嵌入
7、式应用领域确立了市场领导地位。设计、生产ARM芯片的国际大公司已经超过50多家,国内中兴通讯和华为通讯等公司也已经购买ARM公司的芯核用于通讯专用芯片的设计。LPC2103是一个基于支持实时仿真的16/32位ARM7 TDMI-S CPU的微控制器,并带有32kB的嵌入高速Flash存储器,128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行。 较小的封装和极低的功耗使LPC2103适用于访问控制器和POS机等小型应用系统中;由于内置了宽范围的串行通信接口(2个UART、SPI、SSP和2个I2C)和8KB的片内SRAM,LPC2103也适合用在通信网关和协议转换器中。
8、32/16位定时器、增强型10位ADC、定时器输出匹配PWM特性、多达13个边沿、电平触发的外部中断、32条高速GPIO,使得LPC2103微控制器特别适用于工业控制和医疗系统中。 3.1 LPC2103特性(1)16/32位ARM7 TDMI-S微控制器,超小LQFP48封装; (2)8KB的片内静态RAM和32KB的片内Flash程序存储器。128位宽度接口/加速器可实现高达70 MHz工作频率; (3)通过片内boot装载程序实现在系统/在应用编程(ISP/IAP)。单个Flash扇区或整片擦除时间为100ms,256字节编程时间为1ms; (4)嵌入式ICE RT通过片内RealMon
9、itor软件提供实时调试; (5)10位A/D转换器提供8路模拟输入(每个通道的转换时间低至2.44us),以及特定的结果寄存器来最大限度地减少中断开销; (6)2个32位定时器/外部事件计数器(带7路捕获和7路比较通道); (7)2个16位定时器/外部事件计数器(带3路捕获和7路比较通道); (8)低功耗实时时钟(RTC)具有独立的电源和特定的32KHz时钟输入; (9)多个串行接口,包括2个UART(16C550协议标准)、2个高速I2C总线(400 Kbit/s)、SPI和具有缓冲作用和数据长度可变功能的SSP; (10)向量中断控制器(VIC),可配置优先级和向量地址; (11)多达3
10、2个通用I/O口(可承受5V电压); (12)多达13个边沿、电平触发的外部中断管脚; 3.2 ARM管脚信息图3-1 ARM管脚图3.3定时器13.3.1匹配输出定时器1匹配输出方波示例应用如下所示,定时时间为0.2秒。用户需要短接JP4的P0.19端口,控制LED闪烁。 #include config.h #define LED (1 19) /* * 函数名称:Timer1Init * 函数功能:定时器1初始化 * 输入参数:无 * 输出参数:无 */ void Timer1Init(void) T1TCR = 0x02; /* 定时器1复位 */ T1PR = 0; /* 不设时钟分频
11、 */ T1MCR = 0x02; /* 设置T1MR1匹配后复位T1TC */ T1EMR = 0x03 8; /* 匹配翻转 */ T1MR0 = Fpclk / 5; /* 设置0.2秒匹配值 */ T1IR = 0x01; /* 清除中断标志 */ T1TCR = 0x01; /* 启动定时器1 */ /* * 函数名称:main * 函数功能:定时器1匹配输出翻转主程序 * 输入参数:无 * 输出参数:无 */ int main (void) PINSEL1 = PINSEL1 & (0x03 6) ; /* 选择MAT1.2输出 */ PINSEL1 = PINSEL1 | (0x
12、02 6); /* 选择MAT1.2输出 */ Timer1Init(); /* 定时器1初始化 */ IRQEnable(); /* IRQ中断使能 */ while(1); return 0; 图3-2 匹配输出波形3.3.2PWM输出定时器0、1可匹配输出PWM波形,波形的占空比自行设定。在本应用示例中,P0.19输出的波形占空比为50,P0.20输出的占空比为25。 定时器PWM输出应用,示例如程序清单2所示。产生波形如图4.30所示。#include config.h /* * 函数名称:Timer1Init * 函数功能:定时器1初始化 * 输入参数:无 * 输出参数:无 */ v
13、oid Timer1Init(void) T1TCR = 0x02; /* 定时器0复位 */ T1PR = 0; /* 不设时钟分频 */ PWM1CON= 0x0C; /* 使能PWM输出 */ T1MCR = 0x02; /* 设置T0MR0匹配后复位T0TC */ T1MR0 = Fpclk / 2000; /* 设置PWM输出的周期 */ T1MR2 = (Fpclk / 2000) / 2; /* 设置PWM1.2输出占空比为50 */ T1MR3 = (Fpclk / 2000) / 4) * 3; /* 设置PWM1.3输出占空比为25 */ T1TCR = 0x01; /*
14、启动定时器0 */ /* * 函数名称:main * 函数功能:定时器1PWM输出 * 输入参数:无 * 输出参数:无 */ int main (void) PINSEL1 = (PINSEL1 & (0x03 6) | (0x02 6); /* 选择MAT1.2输出 */ PINSEL1 = (PINSEL1 & (0x03 8) | (0x02 8); /* 选择MAT1.3输出 */ Timer1Init(); /* 定时器1初始化 */ while(1); return 0; 图3-3 匹配输出波形4.系统的硬件及软件设技4.1.器件表的生成本设计要模拟汽车中控锁,首先需要用到1个直流
15、电机,用这个电机代表司机旁边的中控锁。同时门边用两个LED,一个红色,一个绿色,分别代表车门锁的开关以及电机的状态。门旁还有一个按键作为门锁的开关,司机还有一个打开所有门的按键。为了指示电机动作完成,我们通过数码管显示的数字可以直观的看到显示结果。据此,生成了一下器件表:表4-1 器件表器件数量器件数量 LPC2013芯片1直流电机1红色LED1数码管1绿色LED1按钮3焊接板1烧写器14.2按键电路设计为了控制系统,设计了几个按键,这里直接把按键的一个引脚接在单片机的IO口上,另一个引脚接在地上。IO口设置为上拉输入,在按键按下后,IO口电平就会被拉低,通过程序中检测IO口电平状态就能知到按
16、键是否被按下4.3指示LED电路的设计由于使用的LED功率小,电流低,可以直接用IO口的电流来驱动,这里我直接把每个LED的正极接在一个IO口,负极接在地,配置IO口输出,当IO口输出高时,就能点亮LED。4.4数码管电路的设计要显示电机是在什么时间开始转动以及什么时间停止,需要用到数码管,课题中我需要用到一个直流电机,所以使用了一位数码管,用来显示电机动作是的时间,为了节约IO,这里采用动态扫描的方式,把位选接IO,所有用到的段选相应的接在一起,再接在不同的IO口上。显示原理是这样的 数码管首先从上到右,到下到左,到中间,最后到小数点分别标记为a b c d e f g dp八段其中小数点位
17、DP为最高位,a段为最低位,要想显示什么字符只需要使对应的段发光即可,一般的习惯是单片机的端口的最低位接a段,次低位接b段,.最高位(如p0.7)接dp,显示码从高往低表示为为 dp g f e d c b a如要显示“1”,只需要将b、c段点亮即可,若是共阴极,片选是低电平选中,某一段输出高电平点亮,即显示码为00000110 即0x06,其他的依照该方法类推图4-2 数码管脚图4.5软件的概述由于LPC2103的寄存器较多,编程起来比较复杂。官方写了一套库函数,我就直接在官方的库函数上进行开发。整个系统用到了单片机的GPIO模块来控制按键,电机和LED。为了控制电机运行的时间和数码管显示的
18、时间,用到了定时中断Tim模块,首先把每个初始化模块放在一起,在主函数最初调用。把控制模块和显示模块分别写成两个函数,在主函数里的大循环里调用。为了使整体程序结构合理,代码风格好,稳定性高,便于调试,我把这几个模块分成几个文件来写,每一个模块写一个C文件和一个H文件,只需要被调用的函数放入H文件中,同时还要保证每个函数的高内聚,低耦合的特性。4.6电机数码管及LED模块本设计里所用到的电机和LED都是利用IO口的输出来实现,所以我把他们放在一起。首先打开这些模块的系统时钟,然后用结构体GPIO_InitTypeDef来初始化这些IO口为推挽输出,输出速度为50MHZ,然后按照结构体初始化IO口
19、。对于控制LED的IO口,为了使用方便,直接用一个宏定义来控制。对于控制电机的部分,把他们封装成电机正转,电机反转和电机停止的函数,程序里用一个标志位来表示当前锁的状态。数码管部分作出显示每个数字所对应的IO口状态,然后据此编写显示一位的函数,传入参数为位数和数字。4.7按键输入模块本设计里用到的按键和拨动开关都是直接连接IO口和地的,在软件里,首先要初始化这些IO口,为了防干扰,这里初始化为上拉输入。首先打开相应口的时钟,然后利用结构体GPIO_InitTypeDef初始化这些IO口为上拉输入。对于模拟车速的拨动开关,直接在控制函数里最初进行检测。4.8控制模块整个系统的逻辑都在这个控制模块
20、里,我用一个全局变量来指示几个个门锁的开与锁,首先检测速度拨动开关是否达到高速,如果为真,再检测指示状态的变量,看是否全部关闭,如果没有全部关闭,就调用每个关闭函数,把没有关闭的门锁关闭,电机转动一段时间,然后通过数码管显示的时间进行提示。然后函数返回,这样就禁用了按键。拨动开关没有达到高速的时候,才能用按键进行控制,检测到司机的门为开,并且按下按键时,所有门锁全部锁上。有锁住的门锁,再检测到全部打开的按键按下后,就打开所有的门锁。其余的情况,检测到按键按下后,就改变门锁的状态,更新标志位。4.9显示模块为了指示当前门锁的状态,所有门锁用了一个绿色LED来指示是否锁住。当锁住时,绿色LED不亮
21、,当没有锁住时,绿色LED点亮。所以在这里,只需要读取每个变量的值,然后进行逻辑判断,在根据结果点亮或熄灭相应的LED就行了。为了指示当前电机工作运行的时间,用到了一位数码管,传入时间和电机信号,就能在相应的数码管上显示相应的数字。当某一数值显示的时候电机就会转动,同理,另一数字显示的时候电机会停止。4.10定时模块为了精确控制电机的运行时间,这里用到了单片机的定时器1,首先初始化一组定时器,设定定时中断,并设置相应的参数,封装成函数,并在主函数里调用,同时还要编写定时中断函数,在中断里对一些标志变量和一些时间变量进行控制。4.11主函数由于其他模块都已经封装好,所以主函数里就直接调用那些函数
22、就行,这样显得简单,整齐。首先,先把三个标志位清0,然后调用IO初始化,然后初始化数码管不显示数字,再初始化按键。这样就初始化了所有配置,然后来一个大循环,循环体内放控制函数和显示函数。这样就能不断检测按键,进行控制和刷新显示。5.硬件电路的焊接及调试5.1软件的焊接5-1 硬件结果显示图5-2硬件显示图5.2软件的调试要完成整个设计,硬件的调试必不可少,非常的重要,首先我要通过CodeWorrior for ARM Developer Suite检测程序并烧写到LPC2103芯片当中图5-3 程序检测图5-4 添加J-LINK5-5 配置J-LINK6.未来拓展6.1利用电机正反转控制电路
23、五线马达是主锁,除了有马达以外还多了一个三线的状态开关,并且是和锁马达联动的,其中一根开锁的时候和第二根导通,闭锁的时候和第三根导通,门锁控制器就从它的状态得知门锁是开还是关,保证四个门同步开闭。 图6-1 直流电机接线原理图总结本设计设利用ARM芯片模拟汽车中控门直流电机,通过GPIO的输出控制指示LED。通过GPIO的上拉输入来检测按键和拨动开关。通过定时器TIM模块定时中断来确定时间。软硬件的有机结合,使得整个系统能够正常工作。设计时,首先选择元器件,然后看元器件的数据手册,设计硬件电路,用C语言编写程序,调试程序直到成功实现功能。采用C语言的编程方式,C语言是一种结构化的高级语言,可读
24、性好,移植容易,更容易模块化,并且有严格的句法检查,出错少,便于调试。而且即使在该设计完成投入使用后,需要升级增加功能,也只需要重新烧写程序就能够完成,极大的方便了用户和设计者。通过这次的努力,终于彻底做完了毕业设计当中老师分配给我的各项任务。在老师的指导下,我能够运用已经学过的知识解决所需要的问题,最终完成本课题的需求,实现控制如下:当数码管显示1到5时,电机反转,当数码管显示6到0时,电机停止转动。在这次设计中,我查阅了很多资料,也掌握了一些查阅资料的方法,同时还丰富了我的知识储备,提高了我的专业涵养,使我整个能力得到不少的提高。这次的设计的硬件焊接以及软件调试都使我受益匪浅。在硬件设计时
25、,要考虑很多东西,需要用到哪些原件,以及整个布局都要提前想好。在设计中,我还发现,以前在书本上学到的东西还是和实际有一点出入的,对待问题要更深入的研究,就会收获更多知识,对问题的认识程度也会更上一层楼。总体来说,硬件设计还是相对简单的,最重要的是软件的设计。做软件时,一定要先有一个整体的架构,要了解我的整个设计总体都需要哪些模块,整个程序的架构要提前想好,然后还要有良好的代码风格,这样不仅写起来有条理逻辑不会乱,而且对于后期的维护以及让他人阅读都有很大的帮助。对于这次的设计,由于本人的经历和时间有限,考虑问题也不够全面,所掌握的知识也不是很多,或多或少会存在着一些缺点,设计难免存在一些不足之处
26、。我的这些不足,在今后学习和工作中会不断改善。最重要的是,这次的设计使我懂得了学习的重要性,在今后,我会一直学习下去,我会一直坚持和努力。致谢经过了小半年的时间,终于完成了我的毕业设计,心里还是有点小激动的,十分的渴望能在大学的最后交出一份满意的答卷,希望这份答卷获得一个正面的评价,能为我的大学画上一个完美的句号。在不知不觉中大学四年就过去了,这四年我成长了,都说大学是通往社会的一个门槛,我真的学习到了许多,还记得大一刚刚入学时的懵懵懂懂,还记得大学的每一个清晨,终于在大学的最后交出了一份满意的答卷。首先还是应该感谢我的导师刘老师,刘老师给我了很多的帮助,没有刘老师的帮助,这个毕设题目也没办法
27、完成的这么顺利,这么快。没有老师的细心教导,我也不可能在学到这么多,这么全的专业课程知识。同时我也需要也需要感谢一起做毕业设计的所有同学,感谢陪伴我走过了大学的最后六个月的时光,同学间的友情十分珍贵。希望这份友情能够天长地久,永远长存。我还需要感觉和我朝夕相伴四年的室友们,四年的情谊,四年的照顾弥足珍贵。愿同学们友谊长存。在未来的道路上,我还会继续努力,在科研的道路上获得新的成就。参考文献1 陈大钦.电子技术基础实验(第二版):机械工业出版社。2 胡学海.单片机原理及应用系统设计:京电子工业出版社。3 李广弟.单片机基础:北航出版社。4 周立功.单片机基础实验指导书:广州周立功单片机发展有限公
28、司出版社。5 吴黎明.单片机原理及应用技术:科学出版社。6 陈光东.单片微型计算机原理及其C语言程序设计:华中理工大学出版社。7 袁志勇 嵌入式系统原理及应用 北京航天航空大学出版社。8 刘彦文 嵌入式系统原理及接口技术 清华大学出版社。9 李宥谋 嵌入式系统开发 清华大学出版社。10 广州周立功公司 嵌入式系统原理教程。11 刘波文 嵌入式实时操作系统uC/OS-II经典实例 北京航天航空大学出版社。12 肖广兵 ARM嵌入式开发实例基于stm32的系统设计 电子工业出版社 。13 刘敦放 使用ARM定时器对十字路口交通灯控制的探讨 重庆科技学院学报。附录/*Copyright (c)* *
29、 * *-File Info-* File name:main.c* Last modified Date: 2013-10-31* Last Version:1.0* Descriptions:The main() function example template*-* Created by:Chenmingji* Created date:2004-09-16* Version:1.0* Descriptions:The original version*-* Modified by:* Modified date:* Version:* Descriptions:*/#include
30、main.h#include config.h#define LED1 (1 0)#define LED2 (1 1)#define LED3 (1 2)#define LED4 (1 3)#define LED5 (1 4)#define LED6 (1 5)#define LED7 (1 6)#define LED8 (1 7)#define LED9 (1 8)#define LED10 (1 0; uiDly-)for(i = 0; i 50000; i+);void Timer1Init(void)T1TCR = 0x02; /* 定时器0复位 */T1PR = 0; /* 不设时钟分频 */PWM1CON= 0x0C; /* 使能PWM输出 */T1MCR = 0x02; /* 设置T0MR0匹配后复位T0TC */T1MR0 = Fpclk / 2000; /* 设置PWM