久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機的藍牙小車可PWM調(diào)速,小車就是不動

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:722967 發(fā)表于 2020-4-7 16:08 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
程序編譯沒錯,藍牙也是可以通訊的(與PC端連接可實現(xiàn)收發(fā)),但是小車就是不動。這是為什么呢?

/*手機藍牙遙控小車                APP 用的SPP藍牙串口助手
左轉(zhuǎn)右轉(zhuǎn)大概是90度   
pwm有十級變速*/


#include <reg52.h>


#define Left_moto_pwm     P1_4          //接驅(qū)動模塊ENA        使能端,輸入PWM信號調(diào)節(jié)速度          左前輪
#define Right_moto_pwm    P1_5           //接驅(qū)動模塊ENB                                                                   右前輪
#define uchar unsigned char
#define uint unsigned int


sbit P1_4=P1^4;                 //定義P1_4
sbit P1_5=P1^5;                 //定義P1_5

/*電機驅(qū)動IO定義*/
sbit IN1 = P1^2; //為1 左電機反轉(zhuǎn)         前輪
sbit IN2 = P1^3; //為1 左電機正轉(zhuǎn)        前輪
sbit IN3 = P1^6; //為1 右電機正轉(zhuǎn)         前輪
sbit IN4 = P1^7; //為1 右電機反轉(zhuǎn)         前輪
sbit EN1 = P1^4; //為1 左電機使能
sbit EN2 = P1^5; //為1 右電機使能        */


bit Right_moto_stop=1;           
bit Left_moto_stop =1;               
unsigned  int  time=0;               
int pwm=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//左電機反轉(zhuǎn)
#define right_motor_go                IN3 = 1, IN4 = 0//右電機正傳
#define right_motor_back        IN3 = 0, IN4 = 1//右電機反轉(zhuǎn)



unsigned char pwm_val_left  =0;//變量定義
unsigned char push_val_left =0;// 左電機占空比N/10
unsigned char pwm_val_right =0;
unsigned char push_val_right=0;// 右電機占空比N/10


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



//藍牙初始化
void UART_INIT()
{
        SM0 = 0;
        SM1 = 1;//串口工作方式1
        REN = 1;//允許串口接收                                                                                                                 
        EA = 1;//開總中斷
        ES = 1;//開串口中斷
        TMOD = 0x20;//8位自動重裝模式
        TH1 = 0xfd;
        TL1 = 0xfd;//9600波特率
        TR1 = 1;//啟動定時器1
}

/************************************************************************/
     void  run(void)        //pwm調(diào)速函數(shù)
{
     push_val_left  =pwm;  //PWM 調(diào)節(jié)參數(shù)1-10   1為最慢,10是最快  改這個值可以改變其速度
         push_val_right =pwm;         //PWM 調(diào)節(jié)參數(shù)1-10   1為最慢,10是最快         改這個值可以改變其速度
                 if(pwm==10) pwm=0;
                if(pwm==0&&pwm<0) pwm=0;

}


/************************************************************************/
/*                    PWM調(diào)制電機轉(zhuǎn)速                                   */
/************************************************************************/


/*                    左側(cè)電機調(diào)速                                        */
/*調(diào)節(jié)push_val_left的值改變電機轉(zhuǎn)速,占空比            */
                void pwm_out_left_moto(void)
{  
   if(Left_moto_stop)
   {
    if(pwm_val_left<=push_val_left)
             {  Left_moto_pwm=1;
                      }
        else
              { Left_moto_pwm=0;                 }

        if(pwm_val_left>=10)
        pwm_val_left=0;
   }
   else { Left_moto_pwm=0;         }
}
/******************************************************************/
/*                    右側(cè)電機調(diào)速                                  */  
   void pwm_out_right_moto(void)
{
  if(Right_moto_stop)
   {
    if(pwm_val_right<=push_val_right)
             {  Right_moto_pwm=1;
                             }
        else
               {Right_moto_pwm=0;
                    }
        if(pwm_val_right>=10)
            pwm_val_right=0;
   }
   else    {Right_moto_pwm=0;       }
}
/***************************************************/
///*TIMER0中斷服務(wù)子函數(shù)產(chǎn)生PWM信號*/
         void timer0()interrupt 1   using 2
{
     TH0=0XF8;          //1Ms定時
         TL0=0X30;
         time++;
         pwm_val_left++;
         pwm_val_right++;
         pwm_out_left_moto();
         pwm_out_right_moto();
}

//小車前進
void forward()
{
        ET0 = 1;
        run();                          //pwm        程序
        left_motor_go; //左電機前進
        right_motor_go; //右電機前進

}

void left_go()           //左轉(zhuǎn)
{
        ET0 = 1;
        run();
        left_motor_back;
        right_motor_go;

        delay(700);
        forward();
}
//右轉(zhuǎn)
void right_go()
{
        ET0 = 1;
        run();
        delay(50);
        right_motor_back;
        left_motor_go;

        delay(700);
        forward();
}
//小車左轉(zhuǎn)圈
void left()
{
        ET0 = 1;
        run();
        delay(50);
        right_motor_go;                  //  右電機前進
        left_motor_back;        // 左電機后退

}

//小車右轉(zhuǎn)圈
void right()
{
        ET0 = 1;
        run();
        left_motor_go;
        right_motor_back;  

}

//小車后退
void back()
{
        ET0 = 1;
        run();
        left_motor_back;
        right_motor_back;        

}

//小車停止
void stop()
{
        ET0 = 0;
        P1=0;
        P0=0;
}


//串口中斷
void UART_SER() interrupt 4
{
        if(RI)
        {
                RI = 0;//清除接收標志
                switch(SBUF)
                {
                        case 'g': forward(); break;//前進
                        case 'b': back(); break;//后退
                        case 'l': left(); break;//左轉(zhuǎn)圈
                        case 'r': right(); break;//右轉(zhuǎn)圈
                        case 's': stop(); break;//停止
                        case 'z': left_go(); break;//左轉(zhuǎn)行駛
                         case 'y': right_go(); break;//右轉(zhuǎn)行駛
                        case 'p': pwm++;break;                //加速
                        case 'c': pwm--;break;                //減速
                }

        }
}

void main()
{
        TMOD=0X01;
        TH0= 0XF8;                  //1ms定時
         TL0= 0X30;
        TR0= 1;
        ET0= 1;
        EA = 1;
        UART_INIT();//串口初始化
        while(1);
}


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

使用道具 舉報

沙發(fā)
ID:585414 發(fā)表于 2020-4-7 16:30 | 只看該作者
看你的電驅(qū)是什么啦,你的程序應(yīng)該沒問題吧,手頭有示波器的話看看波形,如果PWM波形沒問題那就是電驅(qū)電壓不夠啥的
回復(fù)

使用道具 舉報

板凳
ID:722967 發(fā)表于 2020-4-8 11:47 | 只看該作者
Laplacey 發(fā)表于 2020-4-7 16:30
看你的電驅(qū)是什么啦,你的程序應(yīng)該沒問題吧,手頭有示波器的話看看波形,如果PWM波形沒問題那就是電驅(qū)電壓 ...

謝謝,已解決
回復(fù)

使用道具 舉報

地板
ID:728276 發(fā)表于 2020-4-14 16:17 | 只看該作者
你好,請問藍牙模塊是如何和手機端里連接發(fā)送指令的?正在學(xué)習(xí)這個搞不清楚了
回復(fù)

使用道具 舉報

5#
ID:280000 發(fā)表于 2020-4-14 21:17 | 只看該作者
看看代碼有沒有錯誤  電路設(shè)計的是否合理  用示波器看看單片機IO口是否正常輸出了波形
回復(fù)

使用道具 舉報

6#
ID:456580 發(fā)表于 2020-5-7 17:04 | 只看該作者

樓主你好,你出現(xiàn)的問題是供電電源的問題嗎,怎么解決的,你是用12V電源供電不?
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久无码av | 九色在线视频 | 久久国产精品亚洲 | 精品日韩 | 99欧美精品| 国产福利在线 | 国产第1页 | 国产在线观 | 成人影视网 | 欧美无乱码久久久免费午夜一区 | 在线看av的网址 | 毛片毛片毛片毛片毛片 | 男人天堂99 | 99精品网 | 人人人干 | 综合网在线 | 久久精品性视频 | 色橹橹欧美在线观看视频高清 | 97精品超碰一区二区三区 | 亚洲欧美在线一区 | 久久久久久亚洲精品 | 在线一区观看 | 国产精品二区三区在线观看 | 成人免费在线观看 | 日韩av免费在线观看 | 久久伊人影院 | 91新视频 | 日韩精品在线视频 | 国产激情在线播放 | 国产精品一区二区欧美黑人喷潮水 | 一区二区三区四区在线播放 | 黄色大片在线 | 91精品综合久久久久久五月天 | 亚洲三级在线观看 | 久久久www成人免费无遮挡大片 | 午夜精品一区 | 免费视频一区 | 狠狠干av | 久草网站 | 欧美一区不卡 | 久久一区二区免费视频 |