书51单片机智能小汽车前进后退可变速及带显示功能的电机驱动系统的设计与调试 不胜感激🥹?

如题所述

第1个回答  2023-05-30
这个东西我做过,不过没用到显示,只是用到了pid控制。你先把电机驱动电路搞出来,然后用pid控制小车上的传感器,来实现前进后退和变速的功能。至于显示就简单了,只要在小车上装一个数码管就可以了。如果你想做的话,可以找我,我可以给你提供一些资料。我的邮箱是[email protected]
第2个回答  2023-05-30

    硬件设计:

    选择合适的单片机主控板,并配置相应的时钟电路和电源电路。

    设计电机驱动电路,采用H桥驱动芯片,如L298N或TB6560等,实现电机的正反转和调速控制。

    设计按键控制电路,采用独立按键或矩阵按键,实现小汽车的前进、后退和变速控制。

    设计显示模块,采用LCD1602或LCD12864等显示模块,实现电机转速和模式的实时显示。

    软件设计:

    编写初始化程序,对单片机、驱动芯片和显示模块进行初始化配置。

    编写按键扫描程序,通过检测按键状态,实现小汽车的前进、后退和变速控制。

    编写电机控制程序,通过PWM调速实现电机的无级变速控制。

    编写显示模块控制程序,实现电机转速和模式的实时显示。

    以下是51单片机智能小汽车前进后退可变速及带显示功能的电机驱动系统的设计与调试的代码及注释:

    cpp#include <reg52.h> // 引入51单片机头文件

    #include <intrins.h> // 引入内联函数头文件

    // 定义引脚

    sbit IN1 = P1^0; // 定义输入引脚1

    sbit IN2 = P1^1; // 定义输入引脚2

    sbit EN = P1^2; // 定义使能引脚

    sbit LED = P1^3; // 定义LED引脚

    sbit LCD_RS = P1^4; // 定义LCD RS引脚

    sbit LCD_EN = P1^5; // 定义LCD EN引脚

    // 定义全局变量

    unsigned int state = 0; // 存储电机状态

    unsigned int speed = 0; // 存储电机速度

    unsigned int delay_time = 0; // 存储延迟时间

    // 延时函数

    void delay(unsigned int t) {

    while (t--) {

    _nop_();

    _nop_();

    }

    }

    // 初始化LCD

    void init_lcd() {

    LCD_RS = 0; // 设置LCD RS引脚为低电平

    LCD_EN = 0; // 设置LCD EN引脚为低电平

    P0 = 0x3f; // 设置LCD显示位为00111111

    }

    // 显示状态和速度

    void display(unsigned int state, unsigned int speed) {

    unsigned int i, j;

    for (i = 0; i < 2; i++) { // 每行显示4个字符,共显示两行

    for (j = 0; j < 5; j++) { // 每行第1、4个字符用空格填充,共循环5次

    if (j == 0 || j == 4) { // 如果是第1、4个字符,显示状态或速度的个位数

    P2 = (state % 10 << 4) | (speed % 10);

    } else { // 否则显示空格

    P2 = 0x0f;

    }

    delay(10);

    }

    state /= 10; // 进位,显示下一个数字

    speed /= 10;

    }

    }

    // 控制电机转动和速度

    void drive(unsigned int direction, unsigned int speed) {

    if (direction == 0) { // 后退

    IN1 = 1; // IN1为高电平

    IN2 = 0; // IN2为低电平

    } else { // 前进

    IN1 = 0; // IN1为低电平

    IN2 = 1; // IN2为高电平

    }

    EN = 1; // 使能电机

    delay(10); // 延时一段时间,等待电机启动

    while (speed--) { // 循环控制电机速度,每次循环减少1个单位的速度

    EN = 0; // 使能电机

    delay(10); // 延时一段时间,等待电机启动

    IN1 = ~IN1; // 控制IN1的电平,反转电机方向

    IN2 = ~IN2; // 控制IN2的电平,反转电机方向

    delay(delay_time); // 控制电机转动的时间,根据需要调整delay_time的值,单位为毫秒

    EN = 1; // 使能电机,停止电机转动

    }

    EN = 0; // 使能电机,停止电机转动

    }

本回答被提问者采纳
相似回答