IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> MSP432蓝牙遥控小车 -> 正文阅读

[嵌入式]MSP432蓝牙遥控小车

前言

这个小车是去年电赛的时候准备的,很遗憾我们赛区因为疫情被取消了比赛,我们也都已经大二大三了,因此我们没有机会再参加两年一次的电赛了。但是这些成果总不能放着吃灰吧,就留给下一届的种子选手做参考吧。实现的功能是最简单的,就还只是个玩具,具体还得根据题目去添加功能和修改代码,至少完成了小车最简单的搭建。

搭建

硬件

硬件上小车为三轮二驱小车,前轮为舵机只控制转向,后两个轮为伺服电机控制速度,都使用pwm分别来控制转动舵机角度和电机转动速度。总体上小车有3个轮子,1个舵机,2个伺服电机,1个电机驱动,1个车底座,1块MSP432单片机,一个12v移动电源,一个HC-05蓝牙模块。

软件

软件上我们在ccs平台使用C进行编写。

原理

实现小车的转向有两种方案,一种是前轮控制左右转向,后轮控制前后移动;另一种是前轮不动,后轮两个轮子差速(可用pwm调速实现),实现前后左右移动。这里我们采用第一种,第二种比较适合四轮四驱的简单要求不高的小车。
在软件调试中我们会发现供给pwm和串口的时钟频率要用不同的时钟分频,不然会产生冲突导致功能不能正常实现(使用其他外设的时候也要注意时钟频率是否产生冲突)。时钟频率的配置可参阅MSP432的系统时钟和简单系统定时MSP432的相关定时器
蓝牙使用HC-05模块连接到单片机串口3上,再随便用一个手机app连接蓝牙发送指定信号就完成实现蓝牙遥控小车了。

源码

/* DriverLib Includes */
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>

/* Standard Includes */
#include <stdint.h>
#include <stdbool.h>
#include <stdio.h>
#include"oled.h"
#include"bmp.h"
#include"delay.h"

//![Simple UART Config]
/* UART Configuration Parameter. These are the configuration parameters to
 * make the eUSCI A UART module to operate with a 9600 baud rate. These
 * values were calculated using the online calculator that TI provides
 * at:
 *http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP430BaudRateConverter/index.html
 */

// Timer_A PWM 配置参数
Timer_A_PWMConfig pwmConfig =
{
        TIMER_A_CLOCKSOURCE_SMCLK,
        TIMER_A_CLOCKSOURCE_DIVIDER_48,
        5000,                                //12MHz时钟源,5000大约20ms
        TIMER_A_CAPTURECOMPARE_REGISTER_1,
        TIMER_A_OUTPUTMODE_RESET_SET,
        235                                  //舵机正对正前方
};

const eUSCI_UART_ConfigV1 uartConfig =
{
        EUSCI_A_UART_CLOCKSOURCE_SMCLK,          // SMCLK Clock Source
        78,                                      // BRDIV = 78
        2,                                       // UCxBRF = 2
        0,                                       // UCxBRS = 0
        EUSCI_A_UART_NO_PARITY,                  // No Parity
        EUSCI_A_UART_LSB_FIRST,                  // LSB First
        EUSCI_A_UART_ONE_STOP_BIT,               // One stop bit
        EUSCI_A_UART_MODE,                       // UART mode
        EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION,  // Oversampling
        EUSCI_A_UART_8_BIT_LEN                  // 8 bit data length
};
//![Simple UART Config]

void init0(void)
{
    /* Halting WDT  */
    MAP_WDT_A_holdTimer();

    delay_init(3);

    /* Selecting P1.2 and P1.3 in UART mode */
    MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P9, GPIO_PIN6 | GPIO_PIN7, GPIO_PRIMARY_MODULE_FUNCTION);

    /* Setting DCO to 12MHz */
    CS_setDCOCenteredFrequency(CS_DCO_FREQUENCY_12);

    //MAP_PCM_setPowerState(PCM_AM_LF_VCORE0);

    //配置 GPIO2.4 为PWM外围输出
    MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2, GPIO_PIN4, GPIO_PRIMARY_MODULE_FUNCTION);

    //配置Timer_A
    MAP_Timer_A_generatePWM(TIMER_A0_BASE, &pwmConfig);

    //![Simple UART Example]
    /* Configuring UART Module */
    MAP_UART_initModule(EUSCI_A3_BASE, &uartConfig);

    /* Enable UART module */
    MAP_UART_enableModule(EUSCI_A3_BASE);

    /* Enabling interrupts */

    MAP_UART_enableInterrupt(EUSCI_A3_BASE, EUSCI_A_UART_RECEIVE_INTERRUPT);
    MAP_Interrupt_enableInterrupt(INT_EUSCIA3);
    MAP_Interrupt_enableSleepOnIsrExit();
    MAP_Interrupt_enableMaster();
    //![Simple UART Example]
    MAP_GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);
    MAP_GPIO_setAsOutputPin(GPIO_PORT_P10, GPIO_PIN1);
    MAP_GPIO_setAsOutputPin(GPIO_PORT_P10, GPIO_PIN2);
    MAP_GPIO_setAsOutputPin(GPIO_PORT_P10, GPIO_PIN3);
    MAP_GPIO_setAsOutputPin(GPIO_PORT_P10, GPIO_PIN4);
}

int main(void)
{
    init0();
    uint32_t jj;
    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P10, GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4);
    while(1)
    {
    }
}

/* EUSCI A3 UART ISR - Echoes data back to PC host */
void EUSCIA3_IRQHandler(void)
{
    uint32_t status = MAP_UART_getEnabledInterruptStatus(EUSCI_A3_BASE);

    if(status & EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG)
    {
      //  MAP_UART_transmitData(EUSCI_A0_BASE, MAP_UART_receiveData(EUSCI_A0_BASE));
        uint32_t val;
        val = UART_receiveData(EUSCI_A3_BASE);
        switch(val)
        {
        case '1':MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P10, GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4);break;
        case '2':MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P10, GPIO_PIN1|GPIO_PIN2);break;
        case '3':MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P10, GPIO_PIN3|GPIO_PIN4);break;
        case '4':pwmConfig.dutyCycle = 335;MAP_Timer_A_generatePWM(TIMER_A0_BASE, &pwmConfig);break;
        case '5':pwmConfig.dutyCycle = 135;MAP_Timer_A_generatePWM(TIMER_A0_BASE, &pwmConfig);break;
        case '6':pwmConfig.dutyCycle = 235;MAP_Timer_A_generatePWM(TIMER_A0_BASE, &pwmConfig);break;
        }
    }

}

int fputc(int ch,FILE *f)
{
    UART_transmitData(EUSCI_A3_BASE,ch & 0xFF);
    return ch;
}

int fgetc(FILE *f)
{
    while(EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG != UART_getInterruptStatus(EUSCI_A3_BASE,EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG));
    return UART_receiveData(EUSCI_A3_BASE);
}
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-05-06 11:11:22  更:2022-05-06 11:11:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:42:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码