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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3998|回復: 5
打印 上一主題 下一主題
收起左側

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

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

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


#include <reg52.h>


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


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

/*電機驅動IO定義*/
sbit IN1 = P1^2; //為1 左電機反轉         前輪
sbit IN2 = P1^3; //為1 左電機正轉        前輪
sbit IN3 = P1^6; //為1 右電機正轉         前輪
sbit IN4 = P1^7; //為1 右電機反轉         前輪
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//左電機反轉
#define right_motor_go                IN3 = 1, IN4 = 0//右電機正傳
#define right_motor_back        IN3 = 0, IN4 = 1//右電機反轉



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調速函數
{
     push_val_left  =pwm;  //PWM 調節參數1-10   1為最慢,10是最快  改這個值可以改變其速度
         push_val_right =pwm;         //PWM 調節參數1-10   1為最慢,10是最快         改這個值可以改變其速度
                 if(pwm==10) pwm=0;
                if(pwm==0&&pwm<0) pwm=0;

}


/************************************************************************/
/*                    PWM調制電機轉速                                   */
/************************************************************************/


/*                    左側電機調速                                        */
/*調節push_val_left的值改變電機轉速,占空比            */
                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;         }
}
/******************************************************************/
/*                    右側電機調速                                  */  
   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中斷服務子函數產生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()           //左轉
{
        ET0 = 1;
        run();
        left_motor_back;
        right_motor_go;

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

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

}

//小車右轉圈
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;//左轉圈
                        case 'r': right(); break;//右轉圈
                        case 's': stop(); break;//停止
                        case 'z': left_go(); break;//左轉行駛
                         case 'y': right_go(); break;//右轉行駛
                        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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

使用道具 舉報

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

謝謝,已解決
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

樓主你好,你出現的問題是供電電源的問題嗎,怎么解決的,你是用12V電源供電不?
回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧洲一区 | 国产精品99久久久久 | 天天色综 | 伊人一区| 国产网站在线免费观看 | 1000部精品久久久久久久久 | 在线看av网址 | 国产精品99久久久久久久久久久久 | 精品久久电影 | 国产在线中文 | 黄网站涩免费蜜桃网站 | 国产精品1区 | 精品二区| 国产精品一区一区三区 | 午夜影院| 欧美日韩精品久久久免费观看 | 天天色av| 成人精品鲁一区一区二区 | 国产成人精品在线 | 天天干天天玩天天操 | 国产最新精品视频 | 亚洲一区欧美一区 | 精品久久久精品 | 亚洲精品视 | 欧美黄a | 99精品电影 | 亚洲精品视频在线播放 | 亚洲一区 中文字幕 | 乱码av午夜噜噜噜噜动漫 | 永久av| 国产激情第一页 | 99亚洲精品 | 日韩精品一区二区三区在线观看 | 青青久在线视频 | 日韩欧美精品在线 | 一区二区三区国产视频 | 高清av一区 | 在线观看欧美日韩视频 | 欧美日韩在线免费观看 | 久草资源在线视频 | 免费久|