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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于51單片機智能循跡小車的驅動問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:633608 發表于 2019-11-2 01:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位大神請教一下小車的驅動問題:程序燒錄進單片機,電源啟動后,小車的輪子不轉,用手撥動一下會極小的速度轉動(像功率不足,而且只有一側轉),占空比也調得比較高,不知道是哪里出問題了,請各位大神批評指教(用的是4節1.5伏的電池,驅動5個紅外對管,超聲波模塊,電機,不知道是不是輸入電壓不足的問題,也可能是我理解錯了pwm原理),下面是小車的代碼,新手第一次寫,請多包涵。(如有其他問題能幫忙一起指出嗎,麻煩各位了)

單片機源程序如下:
#include <reg52.h>
#include<intrins.h>

sbit IN1=P0^1; //左電機//
sbit IN2=P0^2;
sbit ENA=P0^0;
sbit IN3=P0^3; //右電機//
sbit IN4=P0^4;
sbit ENB=P0^5;

sbit Trig=P1^1;      //超聲波模塊的TRIG,具體接口需要改變//
sbit Echo=P1^2;      //超聲波模塊的ECHO

#define uc unsigned char
#define ui unsigned int
#define juli 25  //距離障礙物的距離//

#define leftgo  {IN1=1, IN2=0;}   //左電機正傳
#define leftback    {IN1=0, IN2=1;}   //左電機反轉
#define rightgo  {IN3=0, IN4=1;}   //右電機正傳
#define rightback {IN3=1, IN4=0;}   //右電機反轉

uc ZKBR=0;
uc ZKBL=0;
uc t=0;          //定時器計數次數//

uc FLAG;      //超聲波超出測量范圍的標志
ui sum;        //超聲波模塊中定時器1所計的總數//
float L;         //L為超聲波模塊中計算的與障礙物之間的距離//

sbit L1=P2^0;    //五個紅外循跡模塊//

sbit L2=P1^2;
sbit M=P1^3;
sbit R2=P1^4;
sbit R1=P1^5;

void t0go()     //定時器0開始工作的函數//
{
TMOD=0x01;  //定時器t0工作方式為1//
TH0=(65536 - 100)/ 256;   //定時器計時108.5微秒//
TL0=(65536 - 100)% 256;
    EA=1;       //開總中斷//
    ET0=1;      //打開定時器0中斷//
TR0=1;      //開啟定時器//
}

void t1go()     //定時器1馬上開始工作的函數//
{
TMOD=0x10;
EA=1;       //可能出錯//
ET1=1;
}

void t0() interrupt 1   //t0的中斷函數//
{
    TH0 =(65536-100)/ 256;   //重裝定時器的初值//
TL0 =(65536-100)% 256;
    if(t<ZKBL)
{
  ENA=1;
}
    else
{
  ENA=0;
}
    if(t < ZKBR)
{
  ENB=1;
}
    else
{
  ENB=0;
}
    ++t;
    if(t>=50)
{
  t=0;
}
}

void t1() interrupt 3 //超聲波超出測量范圍//
{
FLAG=1;
}
void turnleft1()  //左轉小轉彎//
{
ZKBL=30;
ZKBR=10;
}
void turnleft2()  //左轉大轉彎//
{
ZKBL=50;
ZKBR=10;
}
void turnright1() //右轉小轉彎//
{
ZKBL=10;
ZKBR=30;
}
void turnright2() //右轉大轉彎//
{
ZKBL=10;
ZKBR=50;
}
void go()
{
ZKBL=40;
ZKBR=40;
leftgo;
rightgo;
}
void back()
{
ZKBL=10;
ZKBR=10;
leftback;
rightback;
}
void stop()
{
ZKBL=0;
ZKBL=0;
}
void xunji()
{
   uc flag;   
    if ((R2==0)&&(L1==1)&&(L2==1)&&(R1==1))  //小右轉//
    {
  flag=1;
   }
    else if((R1==0)&&(R2==0)&&(L1==1)&&(L2==1))  //大右轉//
    {
  flag=2;
   }
    else if((R2==0)&&(L2==1))  //停車
    {
  flag=3;
   }
    else if((R2==1)&&(R1==1)&&(L1==1)&&(L2==0))  //小左轉//
    {
  flag=4;
   }
   else if((R1==1)&&(R2==1)&&(L1==0)&&(L2==0))  //大左轉//
   {
  flag=5;
   }
   else if((L1==0)&&(L2==1)&&(M==1)&&(R1==1)&&(R2==1))
   {
  flag=5;
   }
   else if((L1==1)&&(L2==1)&&(M==1)&&(R1==0)&&(R2==1))
   {
  flag=2;
   }
   else if((L1==1)&&(L2==1)&&(M==1)&&(R1==1)&&(R2==1))   //特殊情況,當小車無法掃描到黑線時,小車后退//
   {
  flag=6;
   }
    switch(flag)
   {
        case 1:turnright1();  break;
   
        case 2:turnright2();  break;
   
        case 3:stop();        break;
   
        case 4:turnleft1();   break;
        case 5:turnleft2();   break;
        case 6:back();        break;
   
        default:go();         break;
   }
}
void send()    //使模塊開始發送8個方波//
{
Trig=1;
    _nop_();   //單片機延后一個機器周期//
    _nop_();   //設置目的在于使Trig口開始發送方波//。
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    Trig=0;
}
void distance()
{
TH1=0;         //使定時器1計數歸位//
    TL1=0;
send();
    while(!Echo);  //!echo=0,既echo=1輸出高電平時跳出while,實質是等待輸出開始后便打開計時器//
    TR1=1;
    while(Echo);   //等待echo口輸出高電平結束后(即輸出低電平時)后便關閉計時器//
TR1=1;
sum=TH1*256+TL1;   //得到計時器在過程中計的總數//
    L=(sum*1.87)/100;  //已得到的公式 1.87為在20度溫度下的聲速取值344,L的單位是厘米//
    if(L<=juli && FLAG==0)  //上邊已經定義了距離障礙物的最小距離,單位是厘米//
{
  back();
}
if(FLAG==1)      //超出測量
{
   FLAG=0;
}
}
void main()
{
t0go();
  t1go();
leftgo;
rightgo;
while(1)
{
  xunji();
  distance();
}
}


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

使用道具 舉報

沙發
ID:560202 發表于 2019-11-2 10:14 | 只看該作者
把原理圖放上來看看
回復

使用道具 舉報

板凳
ID:633608 發表于 2019-11-2 17:12 | 只看該作者
邏輯落寞 發表于 2019-11-2 10:14
把原理圖放上來看看

原理圖是關于什么的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品欧美一区二区精品久久久 | 91国内精品| 亚洲国产高清高潮精品美女 | 欧美激情视频一区二区三区免费 | 国产精品成av人在线视午夜片 | 国产精品国产三级国产aⅴ中文 | 精品一二三区 | 亚洲美女在线一区 | 欧美一区二区三区四区五区无卡码 | 超碰97人人人人人蜜桃 | 欧美一区二区在线观看 | 亚洲第一视频网站 | 欧美亚洲国产日韩 | 国产欧美在线视频 | 欧美日韩在线电影 | 欧美一区成人 | 日本超碰 | 国产激情一区二区三区 | 精品国产伦一区二区三区观看方式 | www.国产精| 国产精品国产成人国产三级 | 欧美aaa级 | 国产精品海角社区在线观看 | 精品在线一区二区三区 | 97超碰人人| 成人久久久 | 在线观看第一页 | 国产精品亚洲片在线播放 | 伊人一二三 | 粉嫩粉嫩芽的虎白女18在线视频 | 蜜桃臀av一区二区三区 | 91免费视频观看 | 亚洲精品99999| 极品一区| 日韩欧美一区二区三区在线播放 | 精品视频在线播放 | 男女羞羞在线观看 | 欧美精品1区2区3区 免费黄篇 | 亚洲精品视频导航 | 日本久久久一区二区三区 | 成人在线视频免费观看 |