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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機小車轉彎程序出現問題,求解

[復制鏈接]
回帖獎勵 20 黑幣 回復本帖可獲得 5 黑幣獎勵! 每人限 1 次(中獎概率 50%)
跳轉到指定樓層
樓主

問題求助!!!!我做的是一個4輪驅動的基于藍牙控制的小車,上圖是小車的一個左轉程序,我的本意是想通過讓小車左旋轉一段時間然后再讓它直走,來達到左轉的目的。可是我這個發送左轉指令時,小車不會動,等到延時時間一過,這個時候小車開始前進。為什么一開始小車不向左旋轉啊????它為什么會不動呢????然后直走的程序又能執行???求解
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

來自 2#
ID:594848 發表于 2019-12-24 21:31 | 只看該作者
貓兔0 發表于 2019-12-24 19:37
這個你得看全部程序,這樣沒辦法回答你啊

#include <reg52.h>
#define Left_moto2_pwm     P0_4    //接驅動模塊ENA 左后輪
#define Right_moto2_pwm    P0_5    //接驅動模塊ENB 右后輪
#define Left_moto_pwm     P1_4    //接驅動模塊ENA 左前輪
#define Right_moto_pwm    P1_5    //接驅動模塊ENB 右前輪
#define uchar unsigned char
#define uint unsigned int
sbit P0_4=P0^4;   //定義P0_4
sbit P0_5=P0^5;   //定義P0_5
sbit P1_4=P1^4;   //定義P1_4
sbit P1_5=P1^5;   //定義P1_5
sbit IN1 = P1^2; //為1 左電機反轉  前輪
sbit IN2 = P1^3; //為1 左電機正轉 前輪
sbit IN3 = P1^6; //為1 右電機正轉  前輪
sbit IN4 = P1^7; //為1 右電機反轉  前輪
sbit IN5 = P0^2; //為1 左電機反轉  后輪
sbit IN6 = P0^3; //為1 左電機正轉  后輪
sbit IN7 = P0^6; //為1 右電機正轉  后輪
sbit IN8 = P0^7; //為1 右電機反轉  后輪
bit Right_moto_stop=1;   
bit Left_moto_stop =1;   
int pwm=1;
#define left_motor_go  IN1 = 0, IN2 = 1//左電機正傳
#define left_motor_back  IN1 = 1, IN2 = 0//左電機反轉
#define right_motor_go  IN3 = 0, IN4 = 1//右電機正傳
#define right_motor_back IN3 = 1, IN4 = 0//右電機反轉
#define left_motor2_go  IN5 = 0, IN6 = 1//左電機正傳
#define left_motor2_back IN5 = 1, IN6 = 0//左電機反轉
#define right_motor2_go  IN7 = 0, IN8 = 1//右電機正傳
#define right_motor2_back IN7 = 1, IN8 = 0//右電機反轉
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   
  push_val_right =pwm;  //PWM 調節參數1-10   
   if(pwm==10) pwm=0;
  if(pwm==0&&pwm<0) pwm=0;
}

void pwm_out_left_moto(void)    //左側電機調速,調節push_val_left的值改變電機轉速,占空比
{  
   if(Left_moto_stop)
   {
    if(pwm_val_left<=push_val_left)
      {  Left_moto_pwm=1;
      Left_moto2_pwm=1;  }
else
       { Left_moto_pwm=0;Left_moto2_pwm=0;   }
if(pwm_val_left>=10)
pwm_val_left=0;
   }
   else { Left_moto_pwm=0;Left_moto2_pwm=0;   }
}

   void pwm_out_right_moto(void)  //右側電機調速
{
  if(Right_moto_stop)
   {
    if(pwm_val_right<=push_val_right)
      {  Right_moto_pwm=1;
     Right_moto2_pwm=1;    }
else
        {Right_moto_pwm=0;
      Right_moto2_pwm=0;}
if(pwm_val_right>=10)
     pwm_val_right=0;
   }
   else    {Right_moto_pwm=0;Right_moto2_pwm=0; }
}
void timer0()interrupt 1   using 2    //TIMER0中斷服務子函數產生PWM信號//
{
     TH0=0XF8;   //1Ms定時
  TL0=0X30;
  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; //右電機前進
left_motor2_go; //左電機前進   后輪
right_motor2_go; //右電機前進  后輪
}
void left_go()    //左轉
{
ET0 = 1;
run();
left_motor_back;
right_motor_go;
left_motor2_back;
right_motor2_go;
delay(700);
forward();
}

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

void right()    //小車右轉圈
{
ET0 = 1;
run();
delay(50);
left_motor_go;
right_motor_back;  
left_motor2_go;
right_motor2_back;
}
void back()     //小車后退
{
ET0 = 1;
run();
left_motor_back;
right_motor_back;
left_motor2_back;
right_motor2_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);
}
回復

使用道具 舉報

來自 3#
ID:636210 發表于 2019-12-24 21:34 | 只看該作者
小車如不出現打滑的情況下,是不會動的,相互抵制了。應該是右電機向前加力,左電機空不加電就行了。

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:662886 發表于 2019-12-24 19:37 | 只看該作者
這個你得看全部程序,這樣沒辦法回答你啊
回復

使用道具 舉報

5#
ID:594848 發表于 2019-12-24 21:42 | 只看該作者
liuyongjun000a 發表于 2019-12-24 21:34
小車如不出現打滑的情況下,是不會動的,相互抵制了。應該是右電機向前加力,左電機空不加電就行了。

為啥是不會動的啊?相互抵制了??麻煩能具體解釋一下嗎?
回復

使用道具 舉報

6#
ID:594848 發表于 2019-12-24 21:52 | 只看該作者
liuyongjun000a 發表于 2019-12-24 21:34
小車如不出現打滑的情況下,是不會動的,相互抵制了。應該是右電機向前加力,左電機空不加電就行了。

不會動??相互抵制了??麻煩能具體解釋一下嗎??
回復

使用道具 舉報

7#
ID:636210 發表于 2019-12-24 21:55 | 只看該作者
小車如不出現打滑的情況下,是不會動的,相互抵制了。應該是右電機向前加力,左電機空不加電就行了。或者右前通電+左后通電=左前+右后,四個雙雙單邊通電,玩個電動玩具的一看就知道,要不不動,就不就亂動。
回復

使用道具 舉報

8#
ID:636210 發表于 2019-12-24 22:03 | 只看該作者
Li5151 發表于 2019-12-24 21:42
為啥是不會動的啊?相互抵制了??麻煩能具體解釋一下嗎?

你去家附近找找小孩可以驅動的大點的電動四驅車試試就知了,一個輪驅動,車子是向驅動方向,同邊雙驅動也是向驅動方向。錯開一前一后,驅動相反,才會轉圈。
回復

使用道具 舉報

9#
ID:594848 發表于 2019-12-25 14:47 | 只看該作者
liuyongjun000a 發表于 2019-12-24 22:03
你去家附近找找小孩可以驅動的大點的電動四驅車試試就知了,一個輪驅動,車子是向驅動方向,同邊雙驅動也 ...

我的小車能夠單獨的轉圈也能夠單獨的直走,我是想只發送一次指令讓它先轉圈然后再直走。但是它不轉圈然后就直走了,你可能沒明白我的意思。
回復

使用道具 舉報

10#
ID:239611 發表于 2019-12-25 15:34 | 只看該作者
liuyongjun000a 發表于 2019-12-24 21:34
小車如不出現打滑的情況下,是不會動的,相互抵制了。應該是右電機向前加力,左電機空不加電就行了。

3樓是對的,建議你換幾個摩擦力小的輪子,放在光滑的平面上看效果。
回復

使用道具 舉報

11#
ID:316947 發表于 2019-12-26 14:11 | 只看該作者
驗證是不是抵消的方法建議就先動一邊的輪子,然后看下能不能動
回復

使用道具 舉報

12#
ID:274129 發表于 2019-12-27 12:40 | 只看該作者
如果要實現轉彎的話  前輪一個輪子不動  一個輪子按照你轉彎的方向轉動就好
回復

使用道具 舉報

13#
ID:675863 發表于 2019-12-28 09:37 | 只看該作者
可能是電機安裝和驅動方向錯誤,拿起來懸空看看先排除一下是不是這個問題
回復

使用道具 舉報

14#
ID:384312 發表于 2019-12-29 19:08 | 只看該作者
建議先把轉彎拉出來單獨調試,然后打包成函數。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91网在线观看 | 福利成人 | 亚洲一区二区成人 | 中文字幕精品一区二区三区精品 | chinese中国真实乱对白 | 国产精品揄拍一区二区久久国内亚洲精 | 手机看黄av免费网址 | 亚欧午夜| 精品美女 | 色男人天堂av | 精品国产一区二区三区性色av | 久久国产精品一区二区 | 蜜桃视频一区二区三区 | 精品1区2区 | 日韩视频在线免费观看 | 中文字幕在线看第二 | 中文字幕在线视频观看 | 日韩欧美视频免费在线观看 | 四虎影院美女 | 亚洲视频二区 | 国产精品日韩欧美一区二区 | 亚洲人在线 | 午夜久久久久久久久久一区二区 | 久久网一区二区三区 | 中文在线一区二区 | av黄色在线 | 亚洲精品电影 | 国产欧美一区二区精品忘忧草 | 中文字幕电影在线观看 | 久久成人高清视频 | av毛片在线播放 | 精品视频在线一区 | 久久大香| 日韩精品久久 | 成人av免费 | 国产真实乱对白精彩久久小说 | 欧美视频第三页 | 成年人国产在线观看 | 三级黄视频在线观看 | 北条麻妃一区二区三区在线观看 | 麻豆国产一区二区三区四区 |