找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2302|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

電機(jī)使能所對(duì)應(yīng)的單片機(jī)I/O口連接著的是驅(qū)動(dòng)模塊的那個(gè)地方?是總開關(guān)那里嗎

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 20 黑幣 回復(fù)本帖可獲得 10 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
那個(gè)電機(jī)使能所對(duì)應(yīng)的I/O口連接著的是驅(qū)動(dòng)模塊的那個(gè)地方?是總開關(guān)那里嗎(程序是看帖子里某個(gè)大佬的
這是一個(gè)藍(lán)牙小車單片機(jī)程序


#include <reg52.h>

sbit EN1 = P2^0; //為1 右電機(jī)使能
sbit EN2 = P2^1; //為1 左電機(jī)使能
sbit IN1 = P2^2; //為1 右電機(jī)反轉(zhuǎn)
sbit IN2 = P2^3; //為1 右電機(jī)正轉(zhuǎn)
sbit IN3 = P2^4; //為1 左電機(jī)正轉(zhuǎn)
sbit IN4 = P2^5; //為1 左電機(jī)反轉(zhuǎn)

#define left_motor_en           EN1 = 1           //左電機(jī)使能
#define left_motor_stops        EN1 = 0           //左電機(jī)停止
#define right_motor_en          EN2 = 1           //右電機(jī)使能
#define right_motor_stops       EN2 = 0           //右電機(jī)停止
#define left_motor_go           IN1 = 0, IN2 = 1  //左電機(jī)正傳
#define left_motor_back         IN1 = 1, IN2 = 0  //左電機(jī)反轉(zhuǎn)
#define right_motor_go          IN3 = 1, IN4 = 0  //右電機(jī)正傳
#define right_motor_back        IN3 = 0, IN4 = 1  //右電機(jī)反轉(zhuǎn)

double count = 0;//定義占空比,并初始占空比為26%
unsigned char time;
unsigned char pwm_left_val = 255;//左電機(jī)占空比值 取值范圍0-170,0最快
unsigned char pwm_right_val = 255;//右電機(jī)占空比值取值范圍0-170 ,0最快
unsigned char pwm_t = 0; //周期

void UART_INIT();  //藍(lán)牙接收初始化
void Che_init();   //小車輸出端口定時(shí)器初始化
void forward();    //小車前進(jìn)
void back();       //小車后退
void right();      //小車左轉(zhuǎn)
void left();       //小車右轉(zhuǎn)
void stop();           //小車停止
void delay(unsigned int z);        //延時(shí)函數(shù)
               
void main()
{
        UART_INIT();  //藍(lán)牙接收初始化
    Che_init();          //小車輸出端口定時(shí)器初始化
    while(1);
}

void UART_INIT()  //藍(lán)牙接收初始化
{
        SCON = 0X50;
    TMOD = 0x20; //8位自動(dòng)重裝模式
    TH1 = 0xfd;
    TL1 = 0xfd;  //9600波特率
    TR1 = 1;     //啟動(dòng)定時(shí)器1
    ES = 1;      //開串口中斷
        EA = 1;      //開總中斷
}
                        
void Che_init()         //小車使能輸出端口定時(shí)器初始化
{

        TMOD|= 0x02; //8位自動(dòng)重裝模塊
    TH0 = 0xdc;
    TL0 = 0xdc;    //11.0592M晶振下占空比最大比值是256,輸出100HZ
    TR0 = 1;      //啟動(dòng)定時(shí)器0
    ET0 = 1;      //允許定時(shí)器0中斷
    EA = 1;       //總中斷允許
}

void forward()        //小車前進(jìn)
{
        ET0 = 1;
        TR0 = 1;
    left_motor_go;  //左電機(jī)前進(jìn)
    right_motor_go; //右電機(jī)前進(jìn)
}

void back()        //小車后退
{
        ET0 = 1;
        TR0 = 1;
        left_motor_back;  //左電機(jī)反轉(zhuǎn)
        right_motor_back; //右電機(jī)反轉(zhuǎn)      
}

void right()  //小車左轉(zhuǎn)
{
        ET0 = 1;
        TR0 = 1;
        left_motor_go;    //左電機(jī)正傳
        right_motor_back; //右電機(jī)反轉(zhuǎn)
}

void left()          //小車右轉(zhuǎn)
{
        ET0 = 1;
        TR0 = 1;
        right_motor_go;         //右電機(jī)正傳
        left_motor_back; //左電機(jī)反轉(zhuǎn)
}

void stop()          //小車停止
{
        ET0 = 0;
        TR0 = 0;
        count = 0;
        left_motor_stops;   //左電機(jī)停止
        right_motor_stops;        //右電機(jī)停止
}

void timer0() interrupt 1  //定時(shí)器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;//清除接收標(biāo)志
        switch(SBUF)
        {
                case 'a':          //前進(jìn)
                                forward();
                                break;
            case 'b':          //后退
                                back();
                                break;
            case 'l':          //左轉(zhuǎn)
                                right();
                                break;
                        case 'r':          //右轉(zhuǎn)
                                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--);
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:232524 發(fā)表于 2019-3-3 17:41 | 只看該作者
如果用的驅(qū)動(dòng)模塊是L298N的話,下面這圖片應(yīng)該比較清楚了


回復(fù)

使用道具 舉報(bào)

板凳
ID:277550 發(fā)表于 2019-3-3 18:48 | 只看該作者
邏輯輸入那有4pins,,,,,2pins是A、2pins是B的。

A的2pins中,1高、另1低導(dǎo)致輸出A是一種轉(zhuǎn)向。相反電平,又一種轉(zhuǎn)向。。。。。。。。B亦然。


~~~~~~~~~~~~~~~~~~~~~
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表