基于MSP432控制的红外循迹爬坡小车设计报告

竞赛选题:坡道行驶电动小车(C题)

摘要
本小车基于TI的MSP432平台,设计了可以沿指定路线在坡道上循迹行驶的四轮小车。小车采用L298N驱动芯片控制直流减速电机,并且通过内部程序对小车的四个电机进行PWM调速控制。系统通过红外传感器测量位置信息,然后依靠差速控制左右车轮调整小车方向。设计的电动小车可以按照要求,在任意指定坡度角在0°~30° 的木板上沿路线匀速行驶,在停车点停车。
系统主要由稳压模块、L298N驱动模块、红外传感器模块组成。经过反复调试和改进,循迹小车系统可靠,行驶稳定,达到了指标要求。

关键词:电动小车;MSP432;循迹;爬坡;定点停车

一、设计任务与要求

(一)设计任务
利用 TI 的 MSP430/MSP432 平台,设计制作一个四轮电动小车。要求小车能沿着指定路线在坡道上自动循迹骑线行驶。小车必须独立运行,车外不能使用任何设备(包括电源)。小车(含电池)重量小于 1.5kg,外形尺寸在地面投影不大于 25cm×25cm。坡道用长、宽约 1m 的细木工板制作,允许板上有木质本色及自然木纹。木工板表面铺设画有 1cm×1cm 黑白间隔的纸条(以下简称为标记线)作为路线指示;标记线起始段为直线,平行于木板两边;标记线在坡顶转向 90°,转弯半径 20cm;标记线平行坡顶距离≥30cm,距坡顶距离≤20cm;标记线总长度为 1m。停车标记为宽 1cm 长 5cm 的黑色线条,垂直于坡顶标记线。
(二)要求
1.坡度角 θ=0°,电动小车能够沿标记线自动骑线行驶,在停车点停车;小车上标记点到停车标记中心线的垂直距离误差≤2cm。停车时立即发出声音提示。小车行驶过程中,其地面投影不得脱离标记线。
2. 在完成(1)的基础上,电动小车能够设定行驶时间,自动控制小车匀速通过 1 米长的线路,在停车点停车。行驶时间可在 10s~20s 间设定。误差绝对值≤1s。行驶过程中不得碾压、脱离标记线。时间误差每超过1s 扣 1 分。
3. 坡度角 θ=10°,完成要求(2)的动作。
4. 可任意指定坡度角 θ 在 11°~30°,完成要求(2)的动作。
5. 在完成(4)后,尽量增加坡度角 θ,完成要求(2)动作。

二、方案论证与选择

MSP432P401R开发板作为电动小车的核心控制,对于小车的轮胎,我们选用的是橡胶轮胎,增大摩擦力,使小车爬坡能力更强,坡度更高的坡道也能稳定的行驶。对于小车在1cm×1cm黑白间隔的纸条上寻迹的问题,我们在车头设计4个红外对管,这样它可以更有效的沿着黑白纸条行驶,实现直行转弯以及停止的功能。使用4针的OLED来显示小车行驶的坡度速度时间等数据。使用低转速的编码电机,低转速的电机更稳定,爬坡力气更大利用msp432的PWM驱动,使用闭环PID速度算法,编码电机的光电传感器可以时刻将速度反馈给msp432芯片,达到精确控制电机的效果。
基于MSP432P401R红外循迹小车需要以下模块:
(1) MSP432P401R开发板
(2) 红外对管(循迹最主要就是看红外对管了,有一些硬件的不足是可以使用程序来弥补,但还是至少4路红外对管比较稳定)
(3) 编码电机 (其实通过实验来看速度反馈不是那么必须的,所以普通的直流电机完全够用,但是是需要爬坡,所以买的时候关注一下扭力和减速比)
(4) 12V聚合物锂电池 ( 航空电池分多少C,S的,其实不一定需要12V,L298N不是12v也可以驱动)
(5) 电机驱动模块 (L298N常用,但不得不说连线比较难受,是用螺丝挤压铁片的方式)
(6) 降压模块 (4015是不带数码管的,需要用万用表来测量。LM2596S带有数码管和一个按钮,通过按钮来显示输入电压与输出电压,4015小,2596大)
(7) 蜂鸣器 (蜂鸣器的声音大小的问题)
(8) OLED (OLED的刷新频率问题)
(9) 按键模块
(10) 小车框架 (轮胎要好好看清楚,要质量好一点的,随车购买的轮胎感觉质量不怎么样)
(11) 各类开关 (开关的话使用自锁的按钮开关会更方便一点)

以下建议自己配备以下工具与小物件:
(刚需) 万用表,杜邦线, 各类胶带,万用板(面包板)
(需要) 热胶枪,水口钳,镊子,铜柱,示波器,
(不要也行) 泡沫(装箱),跳线帽,电容电阻,二极管,三极管……

(一) 主控芯片选择

MSP432P401R

建议上网多看看库函数的资料,以及引脚的话其实不需要特别纠结,左右两侧的引脚其实完全够用,下面一排的话用也是可以的,自己焊上双列直插排针就OK。

(二) 数据采集论证与选择

方案一:红外对管

使用一对4路红外对管反馈给芯片小车的路线情况,控制小车准确的行驶在轨道上和停车功能,到达停车线时控制蜂鸣器发出声音。集成式红外探头。可以采用集成断续式光电开关探测器,它具有集成度高、工作性能可靠的优点,只须调节探头上的一个旋钮即可以控制探头的灵敏度。此种探头还能有效地防止普通光源(如日光灯等)的干扰。

关于这个模块的话,感觉使用这个需要连接的线有点多,容易出现问题,可以找那种红外的灯与处理芯片连在一起的那种模块。

我们设置了四个红外
1.因为线是1cm *1cm所以中间两个可以放的距离近一点。
2. 外侧两个可以尽量前出,这样拐弯时可以尽快探测到,然后做出反应
3. 外侧两个与中间两个距离也别太远,
1)停止线是要5cm *1cm外侧两个距离最好在5~6cm(因为探测是有一定范围,所以6cm也是可以的
2)线是1cm *1cm,并且循迹的线是黑白相间,所以有从转弯时从白块中插过去的情况。

方案二:openmv

采用两个灰度模块并行在小车前方,用于保持小车不走出黑白线组成的道路,之后采用另一个灰度模块来识别黑块,该灰度模块用于实现转弯控制。

  • 这种方案有待学习

(三) 电机论证与选择

方案一:光电编码电机

根据检测原理,编码器可分为光学式、磁式、感应式和电容式。光电编码器是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。 光电编码器是由光栅盘和光电检测装置组成。光栅盘是在一定直径的圆板上等分地开通若干个长方形孔。由于光电码盘与电动机同轴,电动机旋转时,光栅盘与电动机同速旋转,经发光二极管等电子元件组成的检测装置检测输出若干脉冲信号,通过计算每秒光电编码器输出脉冲的个数就能反映当前电动机的转速。此外,为判定旋转方向,码盘还可提供相位相差90°的两路脉冲信号。

霍尔编码也是可以的,二者的区别有:
1.检测方式不同:霍尔编码器是电磁检测位置,光电编码器是光电检测位置
2. 精度不同:霍尔编码器一般是精度不高,用作粗略的位置反馈,而光电编码器精度高,可以实现高精度的位置检测

(对于这个小车如果只实现功能的话用直流电机都是可以的,想转弯的时候更加顺滑可以使用编码电机,然后进行PID算法,转弯顺滑也可以有其他的实现方式可以将红外对管设置的更多,更全面一点)

方案二: 步进电机

步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机。每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角位移或线位移与输入的脉冲数成正比,转速与脉冲频率成正比。

  • 这种方案有待学习

本是基于光电编码有着速度反馈的好处,这样可以知道实时速度好对小车的位置与状态进行把握和控制,但后来指导老师的意见是应当将重点放在红外模块上,这样也是可以进行把握与控制,事实也的确如此,但是已经买了光电编码的直流电机,之后,下一步考虑将编码的反馈添加进去,并且有一个对比的小组是采用的是步进电机,(之后对比的个人感觉上来说,因为编码直流电机带有减速轮,所以会比步进电机音量稍稍大一点,但是步进电机非常的重,我放四个编码电机还没它两个步进电机重,因为在这道题上是有着重量控制的,并且四驱的话应当是要比两驱要好一点,但如果使用从动轮,并且使用舵机进行转向的话,步进电机不乏是一个挺好的选择)
我们注意到除了步进电机还有伺服电机,往后的任务得尝试一下。

(四) 电机驱动论证与选择

采用L298N,是一款接受高电压的电机驱动器,直流电机和步进电机都可以驱动。一片驱动芯片可同时控制两个直流减速电机做不同动作,在6V到46V的电压范围内,提供2安培的电流,并且具有过热自断和反馈检测功能。L298N可对电机进行直接控制,通过主控芯片的I/O输入对其控制电平进行设定,就可为电机进行正转反转驱动,操作简单、稳定性好,可以满足直流电机的大电流驱动条件。

(L298N的连接很容易出现问题,如果有出现电机不转的问题,除了软件的问题,很大概率就是这里出的问题)

(五) 显示屏模块论证与选择

方案一:OLED

采用OLED,尺寸较小,可视角度好,工作寿命长。


(这个OLED有7针的,也有4针的,4针与7针的区别)

方案二:电容式触摸液晶屏

电容式触摸屏尺寸较大,可视角度良好,可以进行触摸,但价格昂贵,没有太大的必要。

液晶屏幕的确香,但是调起来也是很麻烦,我们使用屏幕是为了帮我们看到小车现在是哪一种模式,比如说是“平地模式、爬坡模式”如果可以也可以设置是多少度的坡,这样对于小车pwm的输出进行调整。

基于上述考虑,为了使小车外形更美观,达到题目要求的重量,所以我们使用OLED。主要是他的确很便宜,20多但是液晶屏幕就需要200多了。

(六)电源论证与选择

方案一:12V聚合物锂电池

使用12V聚合物锂电池,这种电池容量大,电压稳定,占据空间相对较小,重量相对较轻,价格相对较贵。

方案二:圆柱形充电电池组

使用圆柱形充电电池组,这种电池容量比较小,电压低,占据空间大,重量较重,但是价格比较便宜。

基于上述考虑,为了使小车的电压更加稳定,所以使用12V聚合物锂电池。

(七)稳压模块选择

方案一:LM2596S

是采用开关稳压芯片LM2596,固态电容220uf/35V集成。
输入:直流4-35V(输入的电压必须比要输出的电压高1.5v以上。)
输出:直流2-30V电压连续可调,高效率最大输出电流为3A。

方案二:XL4015

输入电压为8V~36V、可调输出电压为1.25V ~32V,输入输出压差约0.3(意思是输入至少高0.3v)最大输出电流5A。

选择方案一的原因其实是找到的模块,方案一不用焊接并且带有数码管可以显示输入输出的电压

(八)蜂鸣器选择

方案一:有源蜂鸣器
方案二:无源蜂鸣器

有源蜂鸣器与无源蜂鸣器的区别在于无源的可以控制它进行一些频率的控制让它可以响有调,但是有源的只能就响,其实没有必要调无源的,题目只要它响就好了。

三、理论分析与计算

(一)供电系统分析:

出现问题:MSP432P401R的板子在搭载红外模块,电机驱动信号,蜂鸣器信号,OLED信号后只通过USB连接电脑出现无法带动的问题。所以之前出于保护
优化方案:使用12V聚合物锂电池给两个电机驱动(L298N)供电,将12V电源再分一路给降压模块(4015)调节降压模块上的电位器,使降压模块的输出电压位3.3V,然后使用降压模块降下来的电压给单片机、4路红外、OLED等供电。经过反复测试,这样的供电系统没有任何问题。

(二)电机驱动方法

利用Timer_A上升计数模式,通过对Timer_A配置设置周期,对两个比较寄存器的配置设置占空比**(高电平)**,实现两种PWM信号的输出,分别驱动左右两轮,实现差速可控。要驱动两侧的轮子用两个Timer_A中的寄存器就可以了。

(三)方向控制方法

小车转弯采用差速控制方法,即通过设置不同的内侧轮和外侧轮速度改变小车运行方向。小车前进过程中,以红外传感器检测到的轨迹变化为转向条件,在测量得到的当前车速的基础上,分别调整内侧轮和外侧轮的的转速。内测轮速度减去当前速度的一定百分比,外侧轮加上当前速度的一定百分比,达到差速控制转向的目的,使小车循迹行驶。
小车通过红外传感器反馈信号实现方向控制。本实验共安装四个红外传感器于车前侧(超出前轮一定距离),具体位置左右各一个、中间两个,通过左右红外反馈信号判断小车偏离轨道,如左红外反馈为高电平,说明左侧压线小车需左拐,调整右轮速度大于左轮;通过中间两个红外反馈信号稳定小车方向,即当中间两个红外反馈为高时,说明车头位置在轨道正中,此时恢复两侧速度相等,如此可保证车头始终位于轨道,并且有较高的稳定性。
同时,利用红外反馈的不同组合还可实现其他精确,如中间左反馈高,需向左微调,中间两反馈同时高,恢复两侧等速;四灯反馈同时为高,即小车行出正常轨道(如到达停止线),速度设置为零实现停车。

(四)红外传感器控制状态

由红外对管反馈并且由万用表测试得知,红外对管是透明的二极管发射红外线,当红外线遇到的目标为白色时会被反射回来(其实不一定必须得是白色才会反射,只要表面稍稍光滑一点,不是黑色就可以),然后有黑色的二极管进行接收,并且在板上会有经过处理的电信号输出与灯光提示。一般灯光亮起时**(高电平)表明有反馈,灯光灭(低电平)**的原因有两种情况,一种是有黑色将红外线吸收了,另一种情况是距离太远反射不回来了。在红外模块上有调节距离的旋钮,顺时针调节是将距离拉远,逆时针调节是将距离缩进。也有一种理解方式是顺时针调节增加灵敏度,逆时针调节是减少灵敏度。

(五)小车爬坡受力分析与计算

根据理想情况条件,忽略空气阻力。设小车的质量为M,重力加速度为g,在标记线的初始位置为坐标原点建立直角坐标系,水平方向为x轴方向。如下图所示:

四、构建系统的连线


1.首先因为板子是长方形的,所以本打算将红外探测放在板子的拓展接口那里,但它中断的话只有1-6有中断,所以只能将接口往前调整了,然后那个中断不是分为左右嘛,所以采用5.1、5.2、5.4、5.5.连接GPIO口,然后设置中断开启就好了。

2.在设置pwm这方面我们遇到困扰我们的难题,因为首次使用所以在一个时针Time-a如何让他驱动两个PWM,之后是设置寄存器就ok了。之后的pwm是由2.4、2.5引脚来的(主要是例子是2.5口)。

3.显示器使用的是I2C接口连接的所以6.4连SDA,6.5连SCL,之后需要调试的就是关于这个显示器的库函数。

4.按键的话主要就是中断,所以选择了4.3、4.4、4.6、4.7口。

5.这个蜂鸣器的话IO口都可以的。

五、结果分析

因为主要是练手,并且用的时间不是特别多,各自部分电路都测试正常,能够实现各自的功能。代码编写无误,能实现预期功能,小车可以循迹,自动地自动地沿标记线行驶,并且到停车标记点停车,蜂鸣器响,坡度最高可达到 30度。该系统基本上实现了题目的各项要求,小车行驶平稳,性能良好。主要是轮胎与赛道的问题,所以爬坡的能力不太行。``所以在程序上和硬件性能上应该进一步优化。

/* ******************************************************************************                MSP432P401*             ------------------*         /|\|                  |*          | |                  |*          --|RST         P1.1  |<--左压线*            |            P1.4  |<--右压线            P9.1,P9.2,P9.3,P9.4*            |                  |*            |            P2.4  |--> Output PWM左*            |            P2.5  |--> Output PWM右*            |                  |********************************************************************************//* DriverLib Includes */
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>/* Standard Includes */
#include <stdint.h>
#include <stdbool.h>
#include"oled.h"
#include"bmp.h"   //图片库#define  GPIO_PIN_infrared_or   GPIO_PIN1 | GPIO_PIN2 | GPIO_PIN4 | GPIO_PIN5
#define  GPIO_PIN_infrared_and   GPIO_PIN1 & GPIO_PIN2 & GPIO_PIN4 & GPIO_PIN5
#define  GPIO_PIN_key_or   GPIO_PIN1 | GPIO_PIN4 | GPIO_PIN5 | GPIO_PIN6 | GPIO_PIN7
#define  GPIO_PIN_key_and   GPIO_PIN1 & GPIO_PIN4 & GPIO_PIN5 & GPIO_PIN6 & GPIO_PIN7volatile uint32_t Car_State;//![Simple Timer_A Config]
/* Timer_A PWM Configuration Parameter *///定时器A0用于PWM输出,10KHZ
Timer_A_UpModeConfig upConfig0 =
{TIMER_A_CLOCKSOURCE_SMCLK,TIMER_A_CLOCKSOURCE_DIVIDER_1,500,                                      //信号周期TIMER_A_TAIE_INTERRUPT_DISABLE,TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE ,TIMER_A_SKIP_CLEAR
};/* Timer_A Compare Configuration Parameter  (PWM) */
Timer_A_CompareModeConfig compareConfig_PWM1 =    // 左轮
{TIMER_A_CAPTURECOMPARE_REGISTER_1,          // Use CCR3TIMER_A_CAPTURECOMPARE_INTERRUPT_DISABLE,   // Disable CCR interruptTIMER_A_OUTPUTMODE_TOGGLE_SET,              // Toggle output but300                                        // Duty Cycle有效信号
};Timer_A_CompareModeConfig compareConfig_PWM2 =    // 右轮
{TIMER_A_CAPTURECOMPARE_REGISTER_2,          // Use CCR3TIMER_A_CAPTURECOMPARE_INTERRUPT_DISABLE,   // Disable CCR interruptTIMER_A_OUTPUTMODE_TOGGLE_SET,              // Toggle output but300                                       // Duty Cycle有效信号
};
//![Simple Timer_A Config]int main(void)
{volatile uint32_t i;/* Halting the watchdog */MAP_WDT_A_holdTimer();//OLED显示屏初始化init();                      //OLED端口定义OLED_Init();                 //OLED初始化MAP_SysCtl_enableSRAMBankRetention(SYSCTL_SRAM_BANK1);//Enabling SRAM Bank RetentionOLED_Clear();                  //清屏// Delay 隔离上电干扰for(i=100000; i>0; i--);//![Simple Timer_A Example]/* Setting MCLK to REFO at 128Khz for LF mode* Setting SMCLK to 64Khz */
//    MAP_CS_setReferenceOscillatorFrequency(CS_REFO_128KHZ);
//    MAP_CS_initClockSignal(CS_MCLK, CS_REFOCLK_SELECT, CS_CLOCK_DIVIDER_1);
//    MAP_CS_initClockSignal(CS_SMCLK, CS_REFOCLK_SELECT, CS_CLOCK_DIVIDER_2);
//    MAP_PCM_setPowerState(PCM_AM_LF_VCORE0);// Set P1.0 to output direction  中断指示  蜂鸣器初始化GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN0);GPIO_setAsOutputPin(GPIO_PORT_P2,GPIO_PIN7);P2OUT &= ~(1<<7);//蜂鸣器关闭
//    P2OUT |= (1<<7);//蜂鸣器输出MAP_Timer_A_configureUpMode(TIMER_A0_BASE, &upConfig0);     //配置上升计数模式MAP_Timer_A_startCounter(TIMER_A0_BASE, TIMER_A_UP_MODE);   //配置定时器A0为向上计数模式/* Configuring GPIO2.4 GPIO2.5 as peripheral output for PWM */MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2, GPIO_PIN4,GPIO_PRIMARY_MODULE_FUNCTION); //左MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2, GPIO_PIN5,GPIO_PRIMARY_MODULE_FUNCTION); //右/* Infrared tracking  中断初始化* 红外 interrupt */ROM_GPIO_setAsInputPinWithPullDownResistor(GPIO_PORT_P5 , GPIO_PIN_infrared_and);                           //下拉电阻置0MAP_GPIO_clearInterruptFlag(GPIO_PORT_P5 , GPIO_PIN_infrared_or);                                           //清除标志位MAP_GPIO_enableInterrupt(GPIO_PORT_P5 , GPIO_PIN_infrared_or);                                              //中断位使能MAP_GPIO_interruptEdgeSelect(GPIO_PORT_P5, GPIO_PIN_infrared_or , GPIO_LOW_TO_HIGH_TRANSITION);             //上升沿触发/* Infrared tracking  中断初始化* 按键 interrupt */ROM_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P6 , GPIO_PIN_key_and);                             //下拉电阻置0MAP_GPIO_clearInterruptFlag(GPIO_PORT_P6 , GPIO_PIN_key_or);                                           //清除标志位MAP_GPIO_enableInterrupt(GPIO_PORT_P6 , GPIO_PIN_key_or);                                              //中断位使能MAP_GPIO_interruptEdgeSelect(GPIO_PORT_P6, GPIO_PIN_key_or , GPIO_HIGH_TO_LOW_TRANSITION);             //下降沿触发/* Enabling interrupts and starting the watchdog timer */MAP_Interrupt_enableInterrupt(INT_PORT6);MAP_Interrupt_enableInterrupt(INT_PORT5);MAP_Interrupt_enableMaster();Car_State = 0;/* 状态设置 */while (Car_State <= 2){if(Car_State == 0){//OLED屏幕显示“小车就绪!”,按键启动OLED_Clear();                  //清屏OLED_ShowCHinese(0,3,14);OLED_ShowCHinese(22,3,15);OLED_ShowCHinese(44,3,16);OLED_ShowCHinese(66,3,17);OLED_ShowString(88,3,"!");//等待按键启动while (1){MAP_PCM_gotoLPM0();}}else if(Car_State == 1){//OLED屏幕显示“选择速度:0”OLED_Clear();                  //清屏OLED_ShowCHinese(0,3,18);OLED_ShowCHinese(22,3,19);OLED_ShowCHinese(44,3,20);OLED_ShowCHinese(66,3,21);OLED_ShowString(88,3,":");OLED_ShowString(110,3,"0");}else if(Car_State == 2){//OLED屏幕显示“选择坡度:0”OLED_Clear();                  //清屏OLED_ShowCHinese(0,3,18);OLED_ShowCHinese(22,3,19);OLED_ShowCHinese(44,3,22);OLED_ShowCHinese(66,3,23);OLED_ShowString(88,3,":");OLED_ShowString(110,3,"0");}}//配置初始化比较寄存器产生PWM波MAP_Timer_A_initCompare(TIMER_A0_BASE, &compareConfig_PWM1);MAP_Timer_A_initCompare(TIMER_A0_BASE, &compareConfig_PWM2);/* Sleeping when not in use */while (1){MAP_PCM_gotoLPM0();}
}// Port5 ISR - 按键信号中断
void PORT6_IRQHandler(void)
{uint32_t status = MAP_GPIO_getEnabledInterruptStatus(GPIO_PORT_P6);MAP_GPIO_clearInterruptFlag(GPIO_PORT_P6, status);//启动if (status & GPIO_PIN1){if(Car_State == 0) Car_State == 1;else Car_State == 3;}//坡度选择else if (status & GPIO_PIN2){Car_State == 1;}//速度选择else if (status & GPIO_PIN3){Car_State == 2;}//按键 +else if (status & GPIO_PIN4){}//按键 -else if (status & GPIO_PIN5){}}// Port5 ISR - 红外寻迹,红外信号中断
void PORT5_IRQHandler(void)
{uint32_t status = MAP_GPIO_getEnabledInterruptStatus(GPIO_PORT_P5);MAP_GPIO_clearInterruptFlag(GPIO_PORT_P5, status);// Toggle P1.0 output  中断指示灯GPIO_toggleOutputOnPin(GPIO_PORT_P1,GPIO_PIN0);if( !(P2OUT & GPIO_PIN7) ){uint32_t flag1 = ((P5IN & GPIO_PIN1) | (P5IN & GPIO_PIN2) | (P5IN & GPIO_PIN4) | (P5IN & GPIO_PIN5));uint32_t flag2 = ((P5IN & GPIO_PIN4) | (P5IN & GPIO_PIN5) );uint32_t flag3 = ((P5IN & GPIO_PIN1) | (P5IN & GPIO_PIN2) );if ( (flag1 == (0x0036)) | (flag2 == (0x0030)) | (flag3 == (0x0006)) ){P2OUT |= (1<<7);//蜂鸣器输出compareConfig_PWM1.compareValue = 0;compareConfig_PWM2.compareValue = 0;MAP_Timer_A_initCompare(TIMER_A0_BASE, &compareConfig_PWM1);    //初始化比较寄存器1产生PWM波MAP_Timer_A_initCompare(TIMER_A0_BASE, &compareConfig_PWM2);    //初始化比较寄存器2产生PWM波}else if ( (status & GPIO_PIN2) | (status & GPIO_PIN4) ){compareConfig_PWM1.compareValue = 500;compareConfig_PWM2.compareValue = 500;MAP_Timer_A_initCompare(TIMER_A0_BASE, &compareConfig_PWM1);    //初始化比较寄存器产生PWM波MAP_Timer_A_initCompare(TIMER_A0_BASE, &compareConfig_PWM2);    //初始化比较寄存器产生PWM波}else if (status & GPIO_PIN1){compareConfig_PWM1.compareValue = 500;compareConfig_PWM2.compareValue = 80;MAP_Timer_A_initCompare(TIMER_A0_BASE, &compareConfig_PWM1);    //初始化比较寄存器产生PWM波MAP_Timer_A_initCompare(TIMER_A0_BASE, &compareConfig_PWM2);    //初始化比较寄存器产生PWM波}else if (status & GPIO_PIN5){compareConfig_PWM1.compareValue = 80;compareConfig_PWM2.compareValue = 500;MAP_Timer_A_initCompare(TIMER_A0_BASE, &compareConfig_PWM1);    //初始化比较寄存器产生PWM波MAP_Timer_A_initCompare(TIMER_A0_BASE, &compareConfig_PWM2);    //初始化比较寄存器产生PWM波}}}

基于MSP432控制的红外循迹爬坡小车设计报告相关推荐

  1. 基于51单片机的红外循迹模块

    目录 循迹模块介绍及原理 部分程序 结合小车的全部程序 循迹模块介绍及原理 这里使用的四路循迹模块 部分端口介绍 主板的OUT1-4端分别连接单片机的IO口,用于检测输出电平 主板另一排针侧的VCC ...

  2. 基于STC89c52rc单片机的红外循迹小车

    循迹小车 由于要准备明年的恩智浦飞思卡尔智能车比赛,飞思卡尔智能车用的是K60系列的单片机,以我目前的阶段来说还处于学习阶段,所以先试着用51单片机做一个智能循迹小车.学习一下小车硬件以及软件程序,这 ...

  3. 基于51单片机实现红外循迹

    红外循迹外观: 红外循迹原理:         红外循迹模块原理还是很简单的,和许多光电传感器原理一样,当发射器发射出去的光被接收器接收到后,模块上对应的LED灯点亮,此时相应的输出引脚输出低电平:如 ...

  4. 基于Arduino控制的网格循迹小车

    1.元器件选型 电子元器件清单 序号 标号 名称 规格 数量 1 / Arduino板 / 1 2 / 驱动模块 LM298N 1 3 / 巡线模块 5 机械零部件清单 序号 标号 名称 规格 数量 ...

  5. 基于51单片机的红外循迹小车

    在前面(废话):金沙滩的板子入门51单片机,有幸见过学长的各种小车视频,亿点点羡慕,于是在期末考试前计划寒假上手尝试,刚好学校社团又有比赛 材料: 小车套件(包含底盘,轮子,减速电机,若干铜柱螺丝螺帽 ...

  6. 循迹智能小车 循黑线 智能小车 红外循迹传感器 单片机

    循迹智能小车 循黑线 文章目录 循迹智能小车 循黑线 硬件菜单 硬件使用 硬件组装 程序设计前的理解 程序代码 个人原创博客: 点我浏览 硬件菜单 单片机型号:STC16F40K128 4路红外循迹模 ...

  7. 39、基于51单片机小车红外循迹、避障、遥控控制系统设计

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.程序 部分代码 七.资料包括 摘要 随着计算机.微电子.信息技术的快速进 ...

  8. 基于PID算法的STM32爬坡循迹智能小车的设计与实现

    目录 摘要 0 引言 1 需求分析 2 系统结构 3 硬件电路设计 3.1 整体硬件框架 3.2 主控制电路 3.3 电源模块 3.4 红外循迹 3.5 电机驱动 3.6 无线蓝牙控制 4 软件设计 ...

  9. 基于STC89C52RC单片机制作的红外循迹小车(4个传感器)

    单片机:基于STC89C52RC单片机制作的红外循迹小车(4个传感器) 个人感觉红外循迹小车和那些遥控小车的区别就是信号发射不同:遥控小车是通过遥控器发出信号执行相应的动作,而红外循迹是通过红外传感器 ...

最新文章

  1. iOS 自定义双向滑块Slider
  2. java: jmap 查看内存信息
  3. android 读取excel数据并保存为xml文件
  4. python字典popitem和pop_python字典popitem_python 字典之pop() and popitem()
  5. 错误:未启用当前数据库的SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker。...
  6. c语言饭卡服务程序设计思路,C语言设计—饭卡管理程序.doc
  7. Provisioning Services 7.8 入门系列教程之九 手动更新虚拟磁盘
  8. oracle设置禁用外键,oracle禁用表外键
  9. dcdc升压计算器excel_两款低压DC-DC升压转换器应用电路
  10. NanoMsg框架|Android的各模式通讯封装(不另编译动态库附DEMO地址)
  11. 仿微信语音输入页面(讯飞语音)
  12. java 字符表 chr3,ASCII码对应表chr(9)、chr(10)、chr(13)、chr(32)、chr(3...
  13. win7 修改html文件图标,如何更改文件图标,教您Win7如何更改图标
  14. 技术杂谈 | 分享Iteye的开涛对IoC的精彩讲解
  15. vue拍照功能PC+手机需要的可以看一下
  16. Oracle19c数据库安装教程【Windows版】
  17. thinkpad t480s黑苹果蓝牙使用
  18. word 添加批注 标题向右移动 解决方法
  19. 中视典编辑器 输出html5,虚拟现实软件|VRP-BUILDER 虚拟现实编辑器 - 【中视典数字科技】...
  20. 初遇林纳斯(Linux)——Linux历史

热门文章

  1. Python入门学习(第一天)
  2. 《小狗钱钱》良句收录和读后感想
  3. c51语言1秒延时程序,KeilC51程序设计中几种精确延时方法
  4. 京东单品页前端开发那些不得不说的事儿 1
  5. PS中把图片白色背景变成透明的方法
  6. 硬件基础知识(电阻)
  7. 常用电子元器件-电阻器介绍
  8. 网络测试软件要什么运行库,运行库检测工具(All in One Runtime)
  9. 由一道bash jail题引出的琐事@_@
  10. No binary rubies available for: osx/10.8/x86_64/ruby-1.9.2-p320解决