《简易智能小车设计报告.doc》由会员分享,可在线阅读,更多相关《简易智能小车设计报告.doc(23页珍藏版)》请在课桌文档上搜索。
1、目 录摘要 1第1章 绪论21.1 简易智能小车的概述21.1 主要研究工作3第2章 硬件电路设计32.1 总体方案的设计32.2 LPC2103的简介32.3 单元电路的设计52.3.1控制系统模块52.3.2键盘显示板模块62.3.3稳压电源模块72.3.4驱动电路模块8第3章 软件设计103.1 EasyJTAG-H 仿真器的使用103.2 软件程序编写10第4章 调试 184.1 电路焊接与检查184.2 键盘显示板的调试184.2 执行电路的调试18第5章 结论19致谢19参考文献20附录21附录1 实物图21附录2 元器件清单表2222 / 23摘 要:本次课程设计采用ARM7系列
2、LPC2103作为智能小车的检测和控制核心。利用PWM技术动态控制电动机的转速,来实现直流调速的功能模块。通过键盘显示板上的八个按键,实现小车不同方向的行驶,实现ARM与键盘显示板的人机对话。关键词:LPC2103、键盘显示板、L298整流电路、直流电机、稳压电源。第1章 绪 论1.1简易智能小车的概述LPC2103 是一个基于支持实时仿真的 16/32 位 ARM7 TDMI-S CPU的微控制器,并带有32kB 的嵌入高速 Flash 存储器,128 位宽度的存储器接口和独特的加速结构使 32 位代码能够在最大时钟速率下运行。 较小的封装和极低的功耗使 LPC2103 适用于访问控制器和
3、POS 机等小型应用系统中;由于内置了宽范围的串行通信接口2个UART、 SPI、 SSP和2个I2C和8KB的片内SRAM,LPC2103 也适合用在通信网关和协议转换器中。32/16 位定时器、增强型 10 位 ADC、定时器输出匹配PWM特性、 多达13个边沿、电平触发的外部中断、 32条高速GPIO,使得LPC2103微控制器特别适用于工业控制和医疗系统中。1.2 主要研究工作1、 掌握各种H桥来驱动电机的常用方法,理解各种H桥的驱动原理本;学会自己制作稳压电源,掌握对原器件要求的选择;掌握键盘显示板的电路以及应用,对74HC164芯片及L298芯片功能作用的认识。2、 熟练使用ARM
4、7系列LPC2103开发板,熟习ARM7系列的开发板的工作特性和功能模块,对LPC2103开发板的GPIO、PWM、定时器的捕获及匹配、SPI这几个模块的熟练掌握,学会使用ADS的开发环境开发和调试程序及EasyJTAG-H 仿真器,学会使用键盘显示板实现人机对话第2章 硬件电路设计2.1 总体方案设计基于ARM7系列LPC2103开发板的功能特性以及我们的设计目的,我们选择LPC2103作为本课程设计的控制器,它能够很好的实现该课题设计的要求;我们使用L298来驱动直流电机的转动;我们使用三端稳压集成电路7805、7812做成的稳压电源作为电机、L298H桥的工作电源;由于普通直流电机体积小
5、,力矩大,速度快,并且电路相对简单,因此采用直流电机作为动力源。我们使用74HC164是串行输入,并行输出的8位移位寄存器做成的键盘显示板结合ARM的SPI模块实现了人机对话的功能模块。总体方案如图2-1。L298ARM2103键盘显示板稳压电源变压器直流电动机图2.1.1 总体设计方案2.2 LPC2103的简介ARM内核采用精简指令集计算机RISC体系结构,具有大量的通用寄存器,指令格式使用统一和长度固定,寻址方式简单,内含2套指令系统ARM指令集和Thumb指令集。极低的功耗,适合对功耗要求较高的应用,如便携式产品。 能够提供0.9MIPS/MHz的三级流水线结构。LPC2103有丰富的
6、接口资源、处理速度快、内部存储空间大及具备功率控制模块,是一种低耗器件,因此本设计微处理选用LPC2103。 LPC2103内嵌32KB的高速Flash存储器和8KB的RAM,具有丰富的外设资源:2个32位定时器;1个10位DAC;7个PWM 通道;47路GPIO;4个边沿或电平触发的外部中断;具有独立电源和时钟的RTC;多个串行接口。它内含向量中断控制器,可配置中断优先级和向量地址,片内Boot装载程序可以实现在系统/在应用编程,通过片内PLL可实现60MHz的CPU操作频率,具有空闲和掉电2种低功耗模式,并且可通过外部中断唤醒。LPC2131具体特性有: 16/32 位 ARM7 TDMI
7、-S微控制器,超小 LQFP48 封装; 8KB 的片内静态 RAM 和 32KB 的片内 Flash 程序存储器。128 位宽度接口/加速器可实现高达 70 MHz 工作频率; 通过片内 boot 装载程序实现在系统/在应用编程ISP/IAP。单个 Flash 扇区或整片擦除时间为 100ms,256 字节编程时间为 1ms; 嵌入式 ICE RT 通过片内 RealMonitor软件提供实时调试; 10 位 A/D 转换器提供 8 路模拟输入每个通道的转换时间低至 2.44us,以及特定的结果寄存器来最大限度地减少中断开销; 2 个32 位定时器/外部事件计数器带 7 路捕获和 7 路比较
8、通道; 2 个16 位定时器/外部事件计数器带 3 路捕获和 7 路比较通道; 低功耗实时时钟RTC具有独立的电源和特定的 32KHz时钟输入; 多个串行接口,包括2个UART 16C550协议标准、 2个高速I2C总线400 Kbit/s、SPI和具有缓冲作用和数据长度可变功能的 SSP; 向量中断控制器VIC,可配置优先级和向量地址; 多达 32 个通用 I/O口可承受 5V电压; 多达 13 个边沿、电平触发的外部中断管脚; 通过一个可编程的片内 PLL100us 的设置时间可实现最大为 70MHz 的CPU操作频率,其具有 10MHz25MHz 的输入频率; 片内集成振荡器与外部晶体的
9、操作频率范围为 125MHz; 低功耗模式包括空闲模式、带 RTC的睡眠模式和掉电模式; 可通过个别使能/禁止外围功能和外围时钟分频来优化额外功耗; 通过外部中断或 RTC 将处理器从掉电模式中唤醒。图2.2.1 ARM系列LPC2103的MCU引脚2.3 单元电路的设计2.3.1控制系统模块1 LPC2103电源电路LPC2103 控制器需要双电源供电,1.8V内核电压和 3.3V功能外设电压,EasyARM2103开发板的电源电路如图 2.2所示。5V电源由变压器或USB电源线输入,二极管 1N5819 可以防止电源反接。电路采用SPX1117 系列LDO芯片SPX1117M-3.3 和S
10、PX1117M-1.8 将电压稳至3.3V和1.8V,0 欧的电阻用来隔离数字电源和模拟电源、数字地和模拟地。 SPX1117 系列 LDO芯片是 EXAR 公司生产的低压差芯片,其特点是输出电流大,输出电压精度高,稳定性高,宽电压输入这里选择的是 5V输入 。此系列LDO芯片的输出电流高达 800mA,输出电压的精度在1之内,可广泛应用于手持式仪表、数字家电、工业控制等领域。注意在电路输入输出端接一个 10F 的电容,可改善瞬态响应和稳定性。图2.3.1 ARM系列LPC2103的电源电路图2.3.2 ARM系列LPC2103的复位电路2.3.2 键盘显示板键盘显示原理:此系统中所选用的数码
11、显示电路主要由两个四位七段数码管和两个74HC164及部分其他元件组成,74HC164是串行输入,并行输出的8位移位寄存器CMOS型,其功能为:当CLEAR为高电平时CK每来一个上升跳,输出右移一位.当CLEAR为低电平时,输出清零。图2.3.2.1 数码管显示电路原理图下图中左边74HC164控制两个四位七段数码管的位码,右边74HC164控制两个四位七段数码管的段码,图2.3.2.2 74HC164逻辑符号表图 图2.3.2.3 74HC164引脚图2.3.3 稳压电源模块图2.3.3.1 稳压电源模块交流电经过全桥电路在经过电容滤波,在经过稳压电源芯片做成稳压电路,输出电压5V、12V的
12、直流电源。图2.3.3.2 稳压电源实物图2.3.4驱动电路模块本次设计采用L298H驱动电路,其电路原理图如下:图2.3 4.1 L298电路原理图其焊接成的实物图如下:图2.3 4.2 L298电路原理图L298 芯片是一种高压、大电流双全桥式驱动器,其设计是为接受标准 TTL 逻辑电平信号和驱动电感负载的, 例如继电器、 圆筒形线圈、 直流电动机和步进电动机。具有两抑制输人来使器件不受输入信号影响。每桥的三级管的射极是连接在一起的, 相应外接线端可用来连接外设传感电阻。可安置另一输入电源, 使逻辑能在低电压下工作。 L298 芯片是具有 15 个引出脚的多瓦数直插式封装的集成芯片。引脚1
13、9、20接ARM7系列LPC2103的两路PWM来控制整个电路的导通、断开、速度的大小,当PWM输出为高电平时,整个电路处于导通,实现电机可以转动;当PWM输出为低电平时,整个电路断开,实现电机不能转动;当PWM的占空比发生变化时,实现电机的速度发生大小改变。综上所述:实现了电机的驱动,分别使用了ARM上的P0.13、P0.14、P0.15、P0.16作为GPIO控制两个电机的正反转;分别使用ARM上的P0.19、P0.20作为PWM来控制电机的转速。图2.3.4.3 不同占空比下的输出波形第3章 软件程序设计3.1 EasyJTAG-H 仿真器的使用EasyJTAG-H 仿真器是一款新型的仿
14、真器,目前,可以支持 LPC21037 微控制器和部分ARM9 芯片,支持 ADS1.2 集成开发环境,支持单步、全速及断点等调试功能,支持下载程序到片内 FLASH 和特定型号的片外 FLASH,采用 ARM 公司提出的标准 20 脚 JTAG 仿调试接口。这款仿真器需要 H-JTAG软件调试代理的支持。3.2 软件程序编写#include config.huint32 LeftLow = 50,RightLow = 50,HZ = 100;/初始化左右占空比为50%,频率为100HZ/*/#define key 15/定时器中断标志uint8 T0Flag = FALSE;uint8 DA
15、TA9; uint32 i=0; /用于记录刷新的位数,显示器共有八位,每显示一位就i+,显示下一位,直到i = 7时就令i=0;重新从第一位显示起 uint32 display=8; uint32 keydown=9;/按键位置寄存/段码,其中的digitable10为不显示任何内容 const uint8 digitable13=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40,0x80;/位码const uint8 selectable8=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;
16、/*/ void DelayNS uint32 i; for 0; uiDly- fori = 0; i ; /* 函数名称:Timer0_InitExt* 功能描述:TIMER0 初始化* 入口参数:无* 出口参数:无*/void Timer0_InitExt T0TC = 0; /* 定时器设置为0 */ T0PR = 0; /* 时钟不分频 */ T0MCR = 0x03; /* 设置T0MR0匹配后复位T0TC,并产生中断标志 */ T0MR0 = Fpclk/400; /* 2.5毫秒定时 刷新频率为50HZ */ T0TCR = 0x01; /* 启动定时器 */* 函数名称:IR
17、Q_Timer0* 功能描述:TIMER0 中断服务程序* 入口参数:无* 出口参数:无*/void _irq IRQ_Timer0 T0Flag = TRUE; / T0中断标志置位 T0IR = 0x01; / 清除中断标志 VICVectAddr = 0;/* 函数名称:IRQ_Init* 功能描述:设置定时器0中断IRQ* 入口参数:无* 出口参数:无*/void IRQ_Init VICIntSelect = 0x00; / 所有中断通道设置为IRQ中断 VICVectCntl0 = 0x20 | 0x04; / 设置定时器0中断通道分配最高优先级 VICVectAddr0 = IR
18、Q_Timer0; / 设置中断服务程序地址 VICIntEnable = 1 0x04; / 使能定时器0中断/* Function name: Timer1Init* Descriptions: 定时器1初始化* input parameters: 无* ouput parameters: 无* Returned value: 无*/void Timer1Init T1TCR = 0x02; /* 定时器0复位 */ T1PR = 0; /* 不设时钟分频 */ PWM1CON = 0x0C; /* 使能PWM输出*/ T1MCR = 0x02; /* 设置T0MR0匹配后复位T0TC *
19、/ T1MR0 = Fpclk /HZ ; /* 设置PWM输出的周期*/ T1MR2 = T1MR0 *LeftLow /HZ; /* 设置PWM1.2输出占空比为50 */ T1MR3 = T1MR0 *RightLow /HZ; /* 设置PWM1.3输出占空比为25 */ T1TCR = 0x01; /* 启动定时器0 */* 函数名称:void CONVBIT* 功能描述:* 入口参数:显示的数的内容,显示内容在数组中的位置* 出口参数:无*/void CONVBIT DATA0 = num%10; DATA1 = num%100/10; DATA2 = num%1000/100;
20、DATA3 = num%10000/1000; DATA4 = num%100000/10000; DATA5 = num%1000000/100000; DATA6 = num%10000000/1000000; DATA7 = num/10000000; DATA8 = 10; /黑码/* 函数名称:MSPI_Init* 函数功能:初始化SPI接口,设置为主机。* 入口参数:无* 出口参数:无*/void MSPI_Init SPI_SPCCR = 0x08; / 设置SPI时钟分频 SPI_SPCR = 0 | / CPHA = 0, 数据在SCK 的第一个时钟沿采样 1 | / CPO
21、L = 1, SCK 为低有效 1 | / MSTR = 1, SPI 处于主模式 0 | / LSBF = 0, SPI 数据传输MSB 在先 0 ; / SPIE = 0, SPI 中断被禁止/* 函数名称:MSPI_SendData* 函数功能:向SPI总线发送数据。* 入口参数:data 待发送的数据* 出口参数:*/void MSPI_SendData SPI_SPDR = data; while 0 = ; / 等待SPIF置位,即等待数据发送完毕void PwmHzChange /占空比上限检查ifHZ LeftLow=HZ-3; ifHZ RightLow=HZ-3; /占空比
22、下限检查 ifLeftLow LeftLow=1; ifRightLow RightLow=1; /Low越大转速越慢 T1MR2 = T1MR0*LeftLow /HZ; /左轮/* 设置PWM1.2输出占空比为50 */ T1MR3 = T1MR0*RightLow /HZ;/右轮/占空比为:高电平=1-RightHigh/100 /* 设置PWM1.3输出占空比为25 */void PINInit PINSEL0 = 0X00;PINSEL1 = 0X00;PINSEL1 = PINSEL1 & 0x03 | 0x02 ;/P0.19/左轮 /* 选择MAT1.2输出 */ PINSEL
23、1 = PINSEL1 & 0x03 | 0x02 ;/P0.20/右轮 /* 选择MAT1.3输出 */ IO0DIR=116|115|114|113|11;/GPIO为输出 PINSEL0 = 0x01 | /设置P0.4脚为SCK 0x01 ; /设置P0.6脚为MISO,其它都为默认GPIO功能 IO0DIR &= 0x01 ; /P0.5为GPIO输入 /*左转弯*/void TurnLeftIO0SET = 116;/右轮顺时针转IO0CLR = 115;IO0SET = 113;/左轮停止转动IO0SET = 114;/*左急转弯*/void TurnNowLeftIO0SET
24、= 116;/右轮顺时针转IO0CLR = 115;IO0SET = 114;/左轮逆时针转IO0CLR = 113;/*右转弯*/void TurnRightIO0SET = 115;/右轮停止IO0SET = 116;IO0SET = 113;/左轮顺时针转IO0CLR = 114;/*右急转弯*/void TurnNowRightIO0SET = 115;/右轮逆时针转IO0CLR = 116;IO0SET = 113;/左轮顺时针转IO0CLR = 114;/*走直线*/void RunLineIO0SET = 116;/右轮逆时针转IO0CLR = 115;IO0SET = 113;
25、/左轮逆时针转IO0CLR = 114;void RunBackIO0SET = 116;/右轮逆时针转IO0CLR = 115;IO0SET = 114;/左轮逆时针转IO0CLR = 113;/* Function name: main* Descriptions: 定时器1PWM输出* input parameters: 无* ouput parameters: 无* Returned value: 无*/int main PINInit; Timer1Init; / 定时器1初始化,发PWM波 MSPI_Init; / 初始化SPI接口 Timer0_InitExt; /定时器初始化
26、IRQEnable; / IRQ中断使能 IRQ_Init; / 设置及开启定时器0中断RunLine; display = 12345678; while if/2.5ms到 T0Flag = FALSE; CONVBIT; IO0CLR = 11; MSPI_SendData; /其他位不带小数点 MSPI_SendData; / 发送显示位码 IO0SET = 11; ifIO0PIN&!=0 /无键按下 if /键按下之后放开防止一键多发 /display=keydown*10000000+keydown*1000000+keydown*100000+keydown*10000+key
27、down*1000+keydown*100+keydown*10+keydown; switch case 0:/按下则确定为修改态 TurnLeft; display=11111111;break; case 1:/按下则移动一位 TurnNowLeft; display=22222222;break; case 2:/闪烁位值增加 TurnRight; display=33333333; break; case 3:/确定修改键 TurnNowRight;display=44444444; break; case 4:/确定修改键 display=55555555; break; case 5:/确定修改键 display=66666666; break; case 6:/确定修改键 display=77777777; break; case 7:/确定修改键 display=88888888; break; keydown =0x09;/恢复为无键按下,重要的一步,在此出过错 else ifIO0PIN&=0/有键按下 DelayNS; ifIO0PIN&=0 keydown = i;
链接地址:https://www.desk33.com/p-19271.html