GPIO输出智能小车实验指导手册_第1页
GPIO输出智能小车实验指导手册_第2页
GPIO输出智能小车实验指导手册_第3页
GPIO输出智能小车实验指导手册_第4页
GPIO输出智能小车实验指导手册_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、实验一 小车方向控制【实验目的】 熟悉Keil开发环境的使用; 熟悉STM32F107v实验板; 学习通过GPIO的置位/复位寄存器来控制相应的GPIO口的电平;【实验设备】 硬件:基于STM32F107v单片机的智能小车,PC机; 软件: KEIL uVision4 集成开发环境,Windows 98/NT/2000/XP;【实验内容】l 熟练使用C语言对I/O口进行正确配置;l 使用C语言实现对I/O口进行读写访问;l 实现对小车方向的控制;【实验原理】 1, GPIO特性 每个通用输入/输出端口有2个32位的配置寄存器(GPIOx_CRL, GPIOx_CRH),2个32位的上数据寄存器

2、(GPIOx_IDR,GPIOx_ODR),一个32位的置位/复位寄存器 (GPIOx_BSRR),一个16位的复位寄存器(GPIOx_BRR)和一个32位的锁定寄存器(GPIOx_LCKR)。 通用输入/输出的每个端口位可以由软件单独的配置成以下几种模式: l 输入浮动(GPIO_Mode_IN_FLOATING)l 输入上拉(GPIO_Mode_IPU) l 输入下拉(GPIO_Mode_IPD) l 模拟输入(GPIO_Mode_AIN) l 输出开漏(GPIO_Mode_Out_OD) l 输出推拉模式(GPIO_Mode_Out_PP) l 备用功能推拉(GPIO_Mode_AF_P

3、P) l 备用功能开漏(GPIO_Mode_AF_OD) 每个I/O 端口位可以自由的编程,尽管I/O端口寄存器必须以32位字的方式访问(不允许以半字或者字节的方式访问)。GPIOx_BSRR 和 GPIOx_BRR 寄存器的目的就是用来允许对GPIO寄存器进行原子的读/修改操作。在这种方式下,当IRQ(中断请求)发生在读和修改操作之间时就不会带来风险。107中新增加了G、F这两个口的GPIO,即GPIO由原来103的80个增加到112个。2,电机驱动模块图一,电机驱动模块如图所示,通过对X(A,B,C,D)的两个端口X1,X2的输入电平控制,可以控制电机的运转方向,同时也就实现了小车的方向控

4、制。3,电路连接图 图二,小车电机方位图图三,系统电路连接图【实验步骤】1,编写实验程序,并编译成功;2,连接仿真器,打开目标板电源,将编译成功程序烧入目标板;3,实验结果为;当运行方向控制函数(Forward(),Backward())时,LED显示屏上会闪烁显示相应方向信息,同时小车向相应方向运行。【部分参考代码】配置所用的I/O口void GPIO_Configuration(void) GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4; GPIO_InitStructure.GPIO_Mo

5、de = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIO

6、C, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure);前进控制void Forward(void) LCD_DisplayStringLine(Line4, FORWARD)

7、;/*使能驱动模块*/ GPIO_SetBits(GPIOC, GPIO_Pin_0); GPIO_SetBits(GPIOC, GPIO_Pin_1); GPIO_SetBits(GPIOA, GPIO_Pin_3); GPIO_SetBits(GPIOA, GPIO_Pin_4);/*小车前进时,I/O口电平配置*/ GPIO_ResetBits(GPIOC, GPIO_Pin_3); GPIO_SetBits(GPIOC, GPIO_Pin_2); GPIO_ResetBits(GPIOA, GPIO_Pin_2); GPIO_SetBits(GPIOA, GPIO_Pin_1); GP

8、IO_SetBits(GPIOD, GPIO_Pin_9); GPIO_ResetBits(GPIOD, GPIO_Pin_10); GPIO_SetBits(GPIOD, GPIO_Pin_12); GPIO_ResetBits(GPIOD, GPIO_Pin_11); STM_EVAL_LEDToggle(LED1); Delay_ms(100); LCD_ClearLine(Line4);后退控制void Backward(void) LCD_DisplayStringLine(Line4, BACKWARD);/*使能驱动模块*/ GPIO_SetBits(GPIOC, GPIO_Pi

9、n_0); GPIO_SetBits(GPIOC, GPIO_Pin_1); GPIO_SetBits(GPIOA, GPIO_Pin_3); GPIO_SetBits(GPIOA, GPIO_Pin_4);/*小车后退时,I/O口电平配置*/ GPIO_ResetBits(GPIOC, GPIO_Pin_2); GPIO_SetBits(GPIOC, GPIO_Pin_3); GPIO_ResetBits(GPIOA, GPIO_Pin_1); GPIO_SetBits(GPIOA, GPIO_Pin_2); GPIO_SetBits(GPIOD, GPIO_Pin_10); GPIO_Re

10、setBits(GPIOD, GPIO_Pin_9); GPIO_SetBits(GPIOD, GPIO_Pin_11); GPIO_ResetBits(GPIOD, GPIO_Pin_12); STM_EVAL_LEDToggle(LED2); Delay_ms(100); LCD_ClearLine(Line4);左转控制void Left_turn(void) STM_EVAL_LEDToggle(LED4); LCD_DisplayStringLine(Line4, TURN_LEFT);/*使能驱动模块*/ GPIO_SetBits(GPIOC, GPIO_Pin_0); GPIO_

11、SetBits(GPIOC, GPIO_Pin_1); GPIO_SetBits(GPIOA, GPIO_Pin_3); GPIO_SetBits(GPIOA, GPIO_Pin_4); GPIO_ResetBits(GPIOC, GPIO_Pin_3); GPIO_SetBits(GPIOC, GPIO_Pin_2); GPIO_ResetBits(GPIOA, GPIO_Pin_2); GPIO_SetBits(GPIOA, GPIO_Pin_1); GPIO_SetBits(GPIOD, GPIO_Pin_10); GPIO_ResetBits(GPIOD, GPIO_Pin_9); G

12、PIO_SetBits(GPIOD, GPIO_Pin_11); GPIO_ResetBits(GPIOD, GPIO_Pin_12); Delay_ms(100); LCD_ClearLine(Line4);右转控制void Right_turn(void) STM_EVAL_LEDToggle(LED3); LCD_DisplayStringLine(Line4, TURN_RIGHT);/*使能驱动模块*/ GPIO_SetBits(GPIOC, GPIO_Pin_0); GPIO_SetBits(GPIOC, GPIO_Pin_1); GPIO_SetBits(GPIOA, GPIO_

13、Pin_3); GPIO_SetBits(GPIOA, GPIO_Pin_4); GPIO_ResetBits(GPIOC, GPIO_Pin_2); GPIO_SetBits(GPIOC, GPIO_Pin_3); GPIO_ResetBits(GPIOA, GPIO_Pin_1); GPIO_SetBits(GPIOA, GPIO_Pin_2); GPIO_SetBits(GPIOD, GPIO_Pin_9); GPIO_ResetBits(GPIOD, GPIO_Pin_10); GPIO_SetBits(GPIOD, GPIO_Pin_12); GPIO_ResetBits(GPIOD

14、, GPIO_Pin_11); Delay_ms(100); LCD_ClearLine(Line4);注:小车电动机正负端口无法确定,由于接线的原因,上述代码的运行结果可能不正确,此时,只需根据各电机运行结果与期望结果的对比,更改电机接线或者直接在代码中更改相应I/O口电平配置即可。实验二 小车速度控制【实验目的】 熟悉Keil开发环境的使用; 熟悉STM32F107v实验板; 学习通过脉冲控制进行小车速度控制;【实验设备】 硬件:基于STM32F107v单片机的智能小车,PC机; 软件: KEIL uVision4 集成开发环境,Windows 98/NT/2000/XP;【实验内容】l

15、熟练使用C语言对I/O口进行正确配置;l 使用C语言实现对I/O口进行读写访问;l 通过对I/O的配置产生脉冲序列(PWM);l 实现对小车速度的控制;【实验原理】控制小车伺服电机以不同速度运动是通过让单片机的I/O端口输出不同的脉冲序列来实现的。本实验单片机对小车速度的控制需要通过驱动模块来实现,单片机向驱动模块输出脉冲,驱动模块根据脉冲占空比,向小车输出相应放大后的电流,达到控制小车速度的目的。图一 驱动模块根据图一驱动模块的端口说明所示,单片机通过对ENX(X为A,B,C,D)的输入脉冲控制,可以实现对相应电机的输入电流的控制,即实现了小车速度的控制。【实验步骤与现象】1,编写实验程序,

16、并编译成功;2,连接仿真器,打开目标板电源,将编译成功程序烧入目标板;3,实验结果为:不同的velocity值,产生不同的速度,并且速度随velocity值增大而变小。【部分参考代码】u16 velocity;void Forward(u16 velocity) LCD_DisplayStringLine(Line4, FORWARD); GPIO_ResetBits(GPIOC, GPIO_Pin_0); GPIO_ResetBits(GPIOC, GPIO_Pin_1); GPIO_ResetBits(GPIOC, GPIO_Pin_3); GPIO_ResetBits(GPIOC, GP

17、IO_Pin_4); Delay_ms(velocity); GPIO_SetBits(GPIOC, GPIO_Pin_0); GPIO_SetBits(GPIOC, GPIO_Pin_1); GPIO_SetBits(GPIOA, GPIO_Pin_3); GPIO_SetBits(GPIOA, GPIO_Pin_4);/*小车前进时,I/O口电平配置*/ GPIO_ResetBits(GPIOC, GPIO_Pin_3); GPIO_SetBits(GPIOC, GPIO_Pin_2); GPIO_ResetBits(GPIOA, GPIO_Pin_2); GPIO_SetBits(GPI

18、OA, GPIO_Pin_1); GPIO_SetBits(GPIOD, GPIO_Pin_9); GPIO_ResetBits(GPIOD, GPIO_Pin_10); GPIO_SetBits(GPIOD, GPIO_Pin_12); GPIO_ResetBits(GPIOD, GPIO_Pin_11); STM_EVAL_LEDToggle(LED1); Delay_ms(100-velocity); LCD_ClearLine(Line4);实验三 无线遥控实验【实验目的】 通过实验熟悉STM32单片机I/O端口配置; 掌握对I/O端口进行读写访问的方法; 熟悉STM32单片机编程;

19、了解无线遥控模块的基本原理;【实验设备】 硬件:基于STM32F10X系列单片机的智能小车,PC机; 软件: KEIL uVision4 集成开发环境,Windows 98/NT/2000/XP;【实验内容】 熟练使用C 语言对I/O端口进行正确配置; 使用C 语言编程,实现对I/O 的读写访问; 使用C语言编程,实现无线遥控。【实验原理】1,线遥控模块(XD_YK04)概述本实验所采用的无线遥控模块是由四键遥控器和超再生固定码接收模块组成的四路无线发射接收电路。超再生接收机是直放式(信号本身不经过变频,直接进行处理)接收机的一种,是利用正反馈原理,把经过放大了的信息回馈到输入端,再放大、循环

20、该模块引脚及各引脚名称,在本实验中功能如下表示;表一,无线遥控模块引脚说明脚位名称功能说明1VTVT端为解码有效输出端2D3数据输出(1,后退信号)3D2数据输出(1,左转信号)4D1数据输出(1,右转信号)5D0数据输出(1,前进信号)65V电源正极7GND电源负极8ANT接天线端接收板基本参数:工作频率:315M 工作电压:DC5V 工作电流:3mA(5.0VDC)工作原理:超再生 调制方式:ASK编码芯片:SC2272(PT2272、PT2294),芯片兼容灵敏度:优于-105dBm(50)遥控距离:2050米以上(开阔地) 图一,发射与接收电路原理示意图2,电路连接示意图图二,单片机与无线遥控模块电路连接示意图【实验操作步骤与现象】 1,按电路连接图连接好电路图; 2,编写程序;(1) 编写主程序。(2) 编译,调试,下载程序到开发板。(3) 测试实验结果。1.2.6 实验参考程序void GPIO_Configurati

温馨提示

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

评论

0/150

提交评论