標(biāo)題: 51單片機(jī)智能小車設(shè)計(jì)(電路原理圖+源程序) [打印本頁(yè)]

作者: 熊大946    時(shí)間: 2018-12-29 13:30
標(biāo)題: 51單片機(jī)智能小車設(shè)計(jì)(電路原理圖+源程序)
  前段時(shí)間電子實(shí)訓(xùn)用89C52單片機(jī)做了個(gè)智能車,只做了最基礎(chǔ)的部分,可以繼續(xù)添加其他外設(shè)。
  硬件設(shè)備:?jiǎn)纹瑱C(jī)最小系統(tǒng)(89C52RC)、電源(9V)、穩(wěn)壓(7805)、驅(qū)動(dòng)模塊(L9110)、測(cè)速模塊(LM393+GK152)、直流電機(jī)+小車支架。
  要實(shí)現(xiàn)的功能:在程序里面通過測(cè)速閉環(huán)調(diào)節(jié)輸出的PWM占空比使小車直行。(目前就只寫了直行的程序,轉(zhuǎn)彎程序還沒寫,其他外設(shè)也沒寫)
  單片機(jī)配置:定時(shí)器0:左輪pwm波;定時(shí)器1:右輪pwm波;外部中斷0:左輪測(cè)速;外部中斷1:右輪測(cè)速。
  要讓小車直行最簡(jiǎn)單的辦法是對(duì)左右輪輸出pwm波,手動(dòng)調(diào)節(jié)占空比來使左右輪轉(zhuǎn)速相同。由于各電機(jī)差異當(dāng)占空比相同時(shí)電機(jī)轉(zhuǎn)速不一樣,所以就要不斷調(diào)試,調(diào)節(jié)占空比來使左右輪轉(zhuǎn)速相同,這個(gè)過程很麻煩。而通過測(cè)速模塊就可以自動(dòng)調(diào)節(jié)占空比來使轉(zhuǎn)速達(dá)到一致。

制作出來的實(shí)物圖如下:


電路原理圖如下:


下面是單片機(jī)程序:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit djl2=P0^3;
  5. sbit djl1=P0^2;
  6. sbit djr1=P0^1;
  7. sbit djr2=P0^0;

  8. uchar time1,time2,pwm1=80,pwm2=80;
  9. uint tmp1,tmp2;

  10. void init()
  11. {
  12.         EA=1;
  13.         EX0=1;
  14.         ET0=1;
  15.         IT0=1;
  16.         EX1=1;
  17.         ET1=1;
  18.         IT1=1;
  19.         TMOD=0X11;
  20.         TH0=(65536-100)/256;
  21.         TL0=(65536-100)/256;
  22.         TH1=(65536-100)/256;
  23.         TL1=(65536-100)/256;
  24.         TR1=1;
  25.         TR0=1;
  26. }
  27. void external0() interrupt 0
  28. {
  29.         EX0=0;
  30.         tmp1++;
  31.         EX0=1;
  32. }
  33. void inter1() interrupt 1
  34. {
  35.         TR0=0;
  36.   TH0=(65536-100)/256;
  37.   TL0=(65536-100)%256;
  38.   TR0=1;
  39.          
  40.   time1++;
  41.         if(time1==100)
  42.         time1=0;
  43. }
  44. void cesu2() interrupt 2
  45. {
  46.         EX1=0;
  47.         tmp2++;
  48.         EX1=1;
  49. }
  50. void inter2() interrupt 3
  51. {
  52.         TR1=0;
  53.         TH1=(65536-100)/256;
  54.         TL1=(65536-100)%256;
  55.         TR1=1;
  56.          
  57.         time2++;
  58.         if(time2==100)
  59.         time2=0;
  60. }

  61. void pwm()
  62. {
  63.                 if(time1<=pwm2)
  64.                 djr1=1;
  65.         else djr1=0;
  66.         if(time2<=pwm1)
  67.                 djl1=1;
  68.         else djl1=0;

  69. }
  70. void tiaosu()
  71. {
  72.         if(time1==100)
  73.         {
  74.                 while(1)
  75.                 {
  76.                         if(tmp1>tmp2)
  77.                                 pwm1-=1;
  78.                         if(tmp1<tmp2)
  79.                                 pwm2+=1;
  80.                         if(tmp1=tmp2)
  81.                          break;
  82.                 }
  83.                 tmp1=tmp2=0;
  84.         }
  85. }

  86. void main()
  87. {
  88.         djl2=djr2=0;
  89.         init();
  90.         while(1)
  91.         {
  92.                 pwm();
  93.                 tiaosu();
  94.         }
  95. }
復(fù)制代碼








作者: zk    時(shí)間: 2019-2-9 22:12
    我的遙控車剛剛制作完成,目前問題是無法直行,請(qǐng)問樓主用的是自帶編碼器的電機(jī)嗎?是PID控制嗎?
程序能否加注釋?愿與樓主同行,共同完成制作!
作者: pomelo0203    時(shí)間: 2020-2-8 16:30
求原理圖和代碼





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1