登录|立即注册|使用QQ帐号登录
论坛 > 24小时必答区
发帖|
看2280|回2|收藏
楼主 ID:450228 只看他
2019-3-3 15:26
那个电机使能所对应的I/O口连接着的是驱动模块的那个地方?是总开关那里吗(程序是看帖子里某个大佬的
这是一个蓝牙小车单片机程序


#include <reg52.h>

sbit EN1 = P2^0; //为1 右电机使能
sbit EN2 = P2^1; //为1 左电机使能
sbit IN1 = P2^2; //为1 右电机反转
sbit IN2 = P2^3; //为1 右电机正转
sbit IN3 = P2^4; //为1 左电机正转
sbit IN4 = P2^5; //为1 左电机反转

#define left_motor_en           EN1 = 1           //左电机使能
#define left_motor_stops        EN1 = 0           //左电机停止
#define right_motor_en          EN2 = 1           //右电机使能
#define right_motor_stops       EN2 = 0           //右电机停止
#define left_motor_go           IN1 = 0, IN2 = 1  //左电机正传
#define left_motor_back         IN1 = 1, IN2 = 0  //左电机反转
#define right_motor_go          IN3 = 1, IN4 = 0  //右电机正传
#define right_motor_back        IN3 = 0, IN4 = 1  //右电机反转

double count = 0;//定义占空比,并初始占空比为26%
unsigned char time;
unsigned char pwm_left_val = 255;//左电机占空比值 取值范围0-170,0最快
unsigned char pwm_right_val = 255;//右电机占空比值取值范围0-170 ,0最快
unsigned char pwm_t = 0; //周期

void UART_INIT();  //蓝牙接收初始化
void Che_init();   //小车输出端口定时器初始化
void forward();    //小车前进
void back();       //小车后退
void right();      //小车左转
void left();       //小车右转
void stop();           //小车停止
void delay(unsigned int z);        //延时函数
               
void main()
{
        UART_INIT();  //蓝牙接收初始化
    Che_init();          //小车输出端口定时器初始化
    while(1);
}

void UART_INIT()  //蓝牙接收初始化
{
        SCON = 0X50;
    TMOD = 0x20; //8位自动重装模式
    TH1 = 0xfd;
    TL1 = 0xfd;  //9600波特率
    TR1 = 1;     //启动定时器1
    ES = 1;      //开串口中断
        EA = 1;      //开总中断
}
                        
void Che_init()         //小车使能输出端口定时器初始化
{

        TMOD|= 0x02; //8位自动重装模块
    TH0 = 0xdc;
    TL0 = 0xdc;    //11.0592M晶振下占空比最大比值是256,输出100HZ
    TR0 = 1;      //启动定时器0
    ET0 = 1;      //允许定时器0中断
    EA = 1;       //总中断允许
}

void forward()        //小车前进
{
        ET0 = 1;
        TR0 = 1;
    left_motor_go;  //左电机前进
    right_motor_go; //右电机前进
}

void back()        //小车后退
{
        ET0 = 1;
        TR0 = 1;
        left_motor_back;  //左电机反转
        right_motor_back; //右电机反转      
}

void right()  //小车左转
{
        ET0 = 1;
        TR0 = 1;
        left_motor_go;    //左电机正传
        right_motor_back; //右电机反转
}

void left()          //小车右转
{
        ET0 = 1;
        TR0 = 1;
        right_motor_go;         //右电机正传
        left_motor_back; //左电机反转
}

void stop()          //小车停止
{
        ET0 = 0;
        TR0 = 0;
        count = 0;
        left_motor_stops;   //左电机停止
        right_motor_stops;        //右电机停止
}

void timer0() interrupt 1  //定时器0中断
{
        pwm_t++;
        pwm_left_val--;
        if(pwm_left_val <= pwm_t)
                EN1 = 1;
        else
                EN1 = 0;
        if(pwm_t == 255)
                pwm_t = 0;
/*        
        pwm_t++;
//        pwm_left_val--;
//        pwm_right_val--;
        if(pwm_t == 255)
        {
           EN1 = 0;
           EN2 = 0;
           pwm_t = 255;
        }  
        if(pwm_left_val ==         pwm_t)
            EN1 = 1;
        if(pwm_right_val == pwm_t)
                EN2 = 1;*/                        
}

void UART_SER() interrupt 4  //串口中断
{
        if(RI)
    {
            RI = 0;//清除接收标志
        switch(SBUF)
        {
                case 'a':          //前进
                                forward();
                                break;
            case 'b':          //后退
                                back();
                                break;
            case 'l':          //左转
                                right();
                                break;
                        case 'r':          //右转
                                left();
                                break;
            case 's':          //停止
                                stop();
                                break;
                        default:     //否则全部停止
                                stop();
                                break;
        }
     }
}

void delay(unsigned int z)
{
        unsigned int x,y;
        for(x = z; x > 0; x--)
                for(y = 114; y > 0 ; y--);
}



沙发 ID:232524 只看他
2019-3-3 17:41
如果用的驱动模块是L298N的话,下面这图片应该比较清楚了
QQ图片20190303173927.png

板凳 ID:277550 只看他
2019-3-3 18:48
逻辑输入那有4pins,,,,,2pins是A、2pins是B的。

A的2pins中,1高、另1低导致输出A是一种转向。相反电平,又一种转向。。。。。。。。B亦然。


~~~~~~~~~~~~~~~~~~~~~

51黑电子论坛

Powered by Discuz! X3.1

首页|标准版|触屏版|电脑版