找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

智能尋跡小車的差速轉(zhuǎn)彎單片機(jī)代碼怎么寫?驅(qū)動(dòng)模塊要接通道使能端口嗎?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:424741 發(fā)表于 2018-12-13 16:38 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
我的車是兩個(gè)L298N驅(qū)動(dòng)模塊的,四輪

引腳的定義是這樣的:
sbit b11 = P1^3;                      //前輪聲明  左a右b          a11  b11為高平
sbit b12 = P1^2;
sbit a11 = P1^1;
sbit a12 = P1^0;                  

sbit a21 = P1^4;                           //后輪聲明  左a右b          a21 b21為高平
sbit a22 = P1^5;
sbit b21 = P1^6;
sbit b22 = P1^7;


之前的左轉(zhuǎn)的方式是右邊兩個(gè)輪子轉(zhuǎn),左邊的不轉(zhuǎn)來轉(zhuǎn)彎,現(xiàn)在想讓兩邊的輪子轉(zhuǎn)速不同來實(shí)現(xiàn)轉(zhuǎn)彎。
void TurnLeft()                                         //a尾2為1  b尾1為1
{
   a11 = 0;      a12 = 0;
   a21 = 0;                 a22 = 0;
   b11 = 1;      b12 = 0;
   b21 = 1;      b22 = 0;
}


左轉(zhuǎn)的條件是這樣的,因?yàn)樗俣缺容^快,用了延時(shí)。

if(LED0==1&&LED1==0&&LED2==0&&LED3==1&&LED4==1&&LED5==1&&LED6==1)  //左轉(zhuǎn)聲明
         {
                   while(1)
                     {
                            TurnLeft();  delay(60); Xiaoying();
                            if(LED3==0&&LED4==0||LED2==0&&LED3==0&&LED4==0||LED2==0&&LED3==0)
                            {
                              break;
                            };

                         };
         };        



請問要用差速的話代碼要怎樣寫呢?驅(qū)動(dòng)模塊要不要接通道使能端口呢?求大神指教



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

使用道具 舉報(bào)

沙發(fā)
ID:410399 發(fā)表于 2018-12-13 17:29 | 只看該作者
差速的話用PWM調(diào)速吧
回復(fù)

使用道具 舉報(bào)

板凳
ID:169944 發(fā)表于 2018-12-13 18:28 | 只看該作者
你這個(gè)沒編碼器,不太好通過走的路程來轉(zhuǎn)特定角度,只能通過測試,讓前輪速度不同,后輪速度恒定,來轉(zhuǎn)彎,左快右慢,就左轉(zhuǎn)了,右轉(zhuǎn)同理,PWm控制不同速度
回復(fù)

使用道具 舉報(bào)

地板
ID:424741 發(fā)表于 2018-12-13 19:21 | 只看該作者
mosqu 發(fā)表于 2018-12-13 17:29
差速的話用PWM調(diào)速吧

我知道要用PWM,但就是不知道具體怎么寫,在網(wǎng)上看了一些,但還是不懂,大神能按照左轉(zhuǎn)的要求寫個(gè)差速嗎?有個(gè)例子的話我可能會(huì)懂一點(diǎn),謝謝大神
回復(fù)

使用道具 舉報(bào)

5#
ID:401790 發(fā)表于 2018-12-13 20:39 | 只看該作者
unsigned char zuo_pwm = 200
unsigned char you_pwm = 200
void timer0() interrupt 1
{
        pwm++;
        if(pwm == 255)
                pwm = ENA = ENB = 0;
        if(zuo_pwm == pwm)
                ENA = 1;               
        if(you_pwm == pwm)
                ENB = 1;                         
}
我以前用的,開一個(gè)定時(shí)器0出來工作方式1,定時(shí)器中斷程序控制驅(qū)動(dòng)板使能端A.B的占空比  你給使能端站空比不同的時(shí)候他們速度就不同了   255-(zuo_pwm200/pwm255)就是使能A的占空比,初值越接近255就速度就越小。255也可以自己改,驅(qū)動(dòng)的排列喜歡用1個(gè)驅(qū)動(dòng)控制左邊2個(gè)輪子  右邊一個(gè)程序好寫和看
回復(fù)

使用道具 舉報(bào)

6#
ID:440534 發(fā)表于 2018-12-13 20:48 | 只看該作者
用PID算法差速轉(zhuǎn)彎
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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