




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、燕山大学课 程 设 计 说 明 书 题目: 蓝牙智能小车 学院(系): 电气工程学院 年级专业:10级过控2班 学 号: 学生姓名: 指导教师: 目 录摘要3第一章 智能蓝牙小车简介4第二章 系统硬件设计5第三章系统软件设计8第四章 心得与体会14参考资料15摘要本文的主要工作是基于STM32蓝牙智能小车的设计,随着越来越多的高科技产品逐渐融入了日常生活中,步进电机控制系统发生了巨大的变化。单片机、C语言等前言学科的技术日趋成熟与实用化,使得步进电机的控制系统有了新的研究方向与意义。本文描述了一个由STM32微处理器、步进电机、键盘等模块构成的,提供基于STM32的PWM细分技术的步进电机控制
2、系统。该系统采用STM32微处理器为核心,在MDK环境下进行编程,根据键盘的输入,使STM32产生周期性的PWM信号,用此信号对步进电机的速度及转动方向进行控制。结果表明该系统具有结构简单、工作可靠、精度高等特点。关键词:STM32微处理器;蓝牙智能小车;PWM信号;细分技术第一章 蓝牙智能小车简介 机器人可以分为三部分传感器部分、控制器部分、执行器部分。 控制器部分:接收传感器部分传递过来的信号,并根据事前写入的决策系统(软件程序),来决定机器人对外部信号的反应,将控制信号发给执行器部分。好比人的大脑。执行器部分:驱动机器人做出各种行为,包括发出各种信号(点亮发光二极管、发出声音)的部分,并
3、且可以根据控制器部分的信号调整自己的状态。对机器人小车来说,最基本的就是轮子。这部分就好比人的四肢一样。传感器部分:机器人用来读取各种外部信号的传感器,以及控制机器人行动的各种开关。好比人的眼睛、耳朵等感觉器官。无线部分:用蓝牙从机的TTL接口接收信号反馈给单片机,还可以通过电脑的无线局域网网卡来控制路由器的TTL串口来控制单片机的状态。由于蓝牙模块容易得到且接口方便,电压可以用+5V控制,携带方便,便于在小车上安装。 电机驱动:电机驱动需要大电流,较高的电压,考虑到单片机的负载能力,用L298N驱动模块来驱动电机,单片机输出逻辑信号控制L298N模块输出正反向电压,由此控制电机的正
4、反转。第2章 系统硬件设计1.小车底盘 小车底盘是机器人最重要的载体,相当于人体的驱干,ZK-4WD 小车平台采用差速转弯非常灵活可以实现原地打转。小车平台大小刚好,可以承载一些如驱动器,控制器,电池,传感器等。2. 驱动器小车直流电机工作电流一般是200-400MA 有些更大,如果一个小车是二个轮子,那么总的电流在400-800MA 左右,这些电机轮子都是要接受单片机指令执行相应的动作,而市面有的单片机IO 口一般只能提供5MA 到10MA 的电流,直接驱动不了电机,所以需要搞一个驱动模块。放大电流。驱动采用专业的L298N,L293D 驱动芯片。3. 控制器STM32单片机控制器:这款控制
5、器主控芯片是STC89C52 属标准的51 核的单片机,也可以用增强型51 单片机芯片,STC12C5A60S2 内带PWM,AD ,1T 运行速度(主流),集成USB转串可以直接用USB 下载程序。集成数码管,舵机,红外避障,12864,1602,无线模块,等接口,板载输入按键。控制板休积小,非常适用于小车。在不用的时候可作用学习板使用。4. 小车所需的能源 可以用普通的AA5 号电池,但一般采用低内阻的充电电池,充电电池套装。5. 蓝牙无线传感器 可以用Android 智能手机控制小车运行(我们有配套的Android 软件),Android 手机用内置蓝牙与蓝牙无线模块配对,发出指令,蓝牙
6、无线模块接收其指令。当单片机接收到蓝牙无线模块传来的指令,执行相应解码动作,从而控制小车。第三章系统软件设计一、所包含的头文件:#include "stm32f10x.h"#include "usart1.h"#include "timer4.h"#include "adc1.h"#include "key.h"二、 外设的初始化和设置 本节按步骤描述了如何初始化和设置任意外设。这里PPP代表任意外设。1、在主应用文件中,声明一个结构PPP_InitTypeDef,例如: PPP_InitTyp
7、eDef PPP_InitStructure; 这里PPP_InitStructure是一个位于内存中的工作变量,用来初始化一个或者多个外设PPP。2、为变量PPP_InitStructure的各个结构成员填入允许的值。可以采用以下2种方式: a) 按照如下程序设置整个结构体PPP_InitStructure.member1 = val1; PPP_InitStructure.member2 = val2; PPP_InitStructure.memberN = valN; /* where N is the number of the structure members */ 以上步骤可以合
8、并在同一行里,用以优化代码大小: PPP_InitTypeDef PPP_InitStructure = val1, val2,., valN b)仅设置结构体中的部分成员:这种情况下,用户应当首先调用函数PPP_SturcInit(.)来初始化变量PPP_InitStructure,然后再修改其中需要修改的成员。这样可以保证其他成员的值(多为缺省值)被正确填入。PPP_StructInit(&PPP_InitStructure); PP_InitStructure.memberX = valX; PPP_InitStructure.memberY = valY;/*where X a
9、nd Y are the members the user wants to configure*/ 3. 调用函数PPP_Init(.)来初始化外设PPP。4. 在这一步,外设PPP已被初始化。可以调用函数PPP_Cmd(.)来使能之。PPP_Cmd(PPP, ENABLE); 可以通过调用一系列函数来使用外设。每个外设都拥有各自的功能函数。更多细节参阅 Section3 外设固件概述。注:1. 在设置一个外设前,必须调用以下一个函数来使能它的时钟: RCC_AHBPeriphClockCmd(RCC_AHBPeriph_PPPx,ENABLE); RCC_APB2PeriphClockCm
10、d(RCC_APB2Periph_PPPx,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_PPPx, ENABLE); 2. 可以调用函数PPP_Deinit(.)来把外设PPP的所有寄存器复位为缺省值: PPP_DeInit(PPP) 3. 在外设设置完成以后,继续修改它的一些参数,可以参照如下步骤: PPP_InitStucture.memberX = valX; PPP_InitStructure.memberY = valY; /* where X and Y are the only members that user wants to
11、 modify*/ PPP_Init(PPP, &PPP_InitStructure);1) 此次课设中GPIO的配置void STEPMotor_GPIO_Config(void )GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1|GPIO_Pin_12 |GPIO_Pin_13;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_
12、Init(GPIOB,&GPIO_InitStruct);选用端口为PB的PB0, PB1, PB12, PB13。频率为50MHz,输出模式为推挽输出。 2)主程序#include"stm32f10x.h" /头文件void GPIO_Config(void);/声明函数void Usart_Config(void);/声明函数void delay(uint16_t z);/声明函数void NVIC_Config(void);/声明函数u8 Receive;int main() RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO
13、C|RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB |RCC_APB2Periph_AFIO|RCC_APB2Periph_USART1,ENABLE );/打开相应的时钟使能RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE ); /打开TIM4的时钟使能 GPIO_Config();/调用函数 Usart_Config();/调用函数 GPIO_Config();/调用函数NVIC_Config();/调用函数while(1) void delay(uint16_t z) /延时函数uint16_t i=
14、0;while(z-)for(i=0;i<1000;i+); /1毫秒void Usart_Config(void) /设置串口USART_InitTypeDef USART_InitStruct;/声明结构体USART_InitStruct.USART_BaudRate=9600;/给结构体赋值USART_InitStruct.USART_WordLength=USART_WordLength_8b;USART_InitStruct.USART_StopBits=USART_StopBits_1;USART_InitStruct.USART_Parity=USART_Parity_No
15、;USART_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;USART_Init(USART1,&USART_InitStruct); /初始化USART_Cmd(USART1, ENABLE);/使能USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);/中断 void GPIO_Config(void)GPIO_InitTypeDef GPIO_
16、InitStruct; GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin=GPIO_Pin_All; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_
17、InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOC, &GPIO_InitStruct);GPIO_InitStruct.GPIO_Pin=GPIO_Pin_All; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOD, &GPIO_InitStruct);GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9; GPIO_InitStru
18、ct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStruct);GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStruct); void NVIC_Conf
19、ig(void) /设置中断NVIC_InitTypeDef NVIC_InitStruct;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);NVIC_InitStruct.NVIC_IRQChannel=USART1_IRQn;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(& NVIC_In
20、itStruct);中断it.c里面的程序void SysTick_Handler(void)uint8_t dat = 0;uint8_t flag = 0;void USART1_IRQHandler(void)USART_ClearITPendingBit(USART1, USART_IT_RXNE);dat=USART_ReceiveData(USART1);if(dat = 'O')&&(flag = 0)flag+;if(dat = 'N')&&(flag = 1)flag+;if(flag = 2)switch(da
21、t)case 'A':GPIO_Write(GPIOD,0XAA00); break;/实现前进后退等四个方向.前进case 'B':GPIO_Write(GPIOD,0X5500); break;/后退case 'C':GPIO_Write(GPIOD,0X8800); break;/左转case 'D':GPIO_Write(GPIOD,0X2200); break;/右转case 'F':GPIO_Write(GPIOD,0x0000); break;/停止default:break;/灯翻转flag = 0;第四章 心得与体会为期一周的创新学分训练马上就要结束了,此次实训我做的题目是蓝牙智能小车。简单地说就是通过STM32微控制器通过蓝牙控制小车运动。实现这个功能主要是通过编写单片机程序然后传送到STM32芯片中,控制电机的运动。所以此次实训的主要目的就是编写程序然后调试程序。刚开始的时候,老师就带着我们熟悉编程序的软件,并且告诉我们一定要养成良好的代码风格,并且让我们熟悉掌握外设的初始化和设置,这个是编写程序的基础吧,如果不按照外设初始化和设置的步骤来编写程序,程序就无法正常运行,就算运行了也无法实现正确的功能,所以对于我这个初学者来说,这是很好的经历,可以在调试程序或者是修改
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 火烧云作业设计
- 2025届邢台市南宫市数学三年级第一学期期末教学质量检测试题含解析
- 水利水电工程未来挑战与机遇试题及答案
- 市政工程考试模拟题库试题及答案
- 冷饮小商店课件
- 2025年工程项目管理的重要试题与答案
- 禁烟与安全教育主题班会
- 简述行政协议的概念与特征
- 2025年经济师考题分析中级经济师试题及答案
- 外派工作经历与能力鉴定证明(5篇)
- 高中职业生涯规划讲座
- 医院建筑设计重点、难点分析及应对措施
- 运用精益管理(TPS)缩短医院门诊患者就诊时间医院品质管理成果汇报
- 环保行业人才培养机制方案
- 专题18 热学-五年(2020-2024)高考物理真题分类汇编(解析版)
- 十二生肖调查报告
- 健身塑形瑜伽学习通超星期末考试答案章节答案2024年
- 2024-2025年辽宁省面试真题
- 2024年高考真题-地理(河北卷) 含答案
- 单位驾驶员劳务派遣投标方案投标文件(技术方案)
- 资本经营-终结性考试-国开(SC)-参考资料
评论
0/150
提交评论