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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

單片機(jī)+PID調(diào)速調(diào)不了,lcd顯示不了實(shí)時(shí)轉(zhuǎn)速

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
如題,想問問大佬怎么回事,對(duì)我來說太難搞了用的同站大佬的程序調(diào)試的

51hei圖片_20221105172406.jpg (328.12 KB, 下載次數(shù): 119)

實(shí)物連接

實(shí)物連接

51hei圖片_20221105172401.jpg (230.99 KB, 下載次數(shù): 110)

電機(jī)轉(zhuǎn),實(shí)施轉(zhuǎn)速不顯示

電機(jī)轉(zhuǎn),實(shí)施轉(zhuǎn)速不顯示
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:121859 發(fā)表于 2022-11-6 08:42 | 只看該作者
應(yīng)該是接線問題,沒有檢測(cè)到實(shí)際速度。
回復(fù)

使用道具 舉報(bào)

板凳
ID:1045221 發(fā)表于 2022-11-6 12:33 | 只看該作者
zhxiufan 發(fā)表于 2022-11-6 08:42
應(yīng)該是接線問題,沒有檢測(cè)到實(shí)際速度。

該怎么接線呢
回復(fù)

使用道具 舉報(bào)

地板
ID:1045221 發(fā)表于 2022-11-6 12:50 | 只看該作者
而且加速鍵和減速鍵都不能用,有大佬指點(diǎn)一下嗎
回復(fù)

使用道具 舉報(bào)

5#
ID:844772 發(fā)表于 2022-11-6 17:57 來自觸屏版 | 只看該作者
總要讓人看清霍爾那里^_^幾根是怎么接的啊
回復(fù)

使用道具 舉報(bào)

6#
ID:1045221 發(fā)表于 2022-11-6 19:46 | 只看該作者
glinfei 發(fā)表于 2022-11-6 17:57
總要讓人看清霍爾那里^_^幾根是怎么接的啊

霍爾六根線,電機(jī)線接l298,編碼器電源接開發(fā)板供電,中間兩相接單片機(jī)的中斷器接口和普通接口
回復(fù)

使用道具 舉報(bào)

7#
ID:606226 發(fā)表于 2022-11-6 21:52 | 只看該作者
沒有程序,也沒有見你的實(shí)物連接是什么樣子,只有幾張圖片,我只能猜可能是接線問題,可能是程序問題。
回復(fù)

使用道具 舉報(bào)

8#
ID:1045221 發(fā)表于 2022-11-7 09:03 | 只看該作者
c00156155 發(fā)表于 2022-11-6 21:52
沒有程序,也沒有見你的實(shí)物連接是什么樣子,只有幾張圖片,我只能猜可能是接線問題,可能是程序問題。

程序用的是同站一個(gè)大佬的這個(gè)的代碼
  1. #include <reg51.h>
  2. #include<stdio.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit qidong=P3^2;//啟動(dòng)鍵
  6. sbit tingzhi=P1^4;//停止鍵
  7. sbit fangxiang=P1^5;//轉(zhuǎn)向鍵
  8. sbit AddSpeed=P1^6;//加速鍵
  9. sbit SubSpeed=P1^7;//減速鍵
  10. sbit RS = P0^7;//LCD1602數(shù)據(jù)命令選擇端口
  11. sbit RW = P0^6;//LCD1602讀寫選擇端口
  12. sbit EN = P0^5;//LCD1602使能端口
  13. sbit IN2=P1^1;//L298輸入端2
  14. sbit IN1=P1^0;//L298輸入端1
  15. sbit PWM_FC=P1^2;//L298使能端口
  16. uchar aa[]={'T','a','r','g','e','t',' ',' ',' ',' ',' ','r','/','s','e','c'};//目標(biāo)轉(zhuǎn)速:Target  r/sec
  17. uchar cc[]={'A','c','t','u','a','l',' ',' ',' ',' ',' ','r','/','s','e','c'};//實(shí)測(cè)轉(zhuǎn)速: Actual  r/sec
  18. uchar displayflag;//顯示標(biāo)志位變量
  19. uint SetSpeed=1000;//聲明設(shè)定速度變量
  20. uint ActualSpeed=0;//聲明實(shí)際速度變量
  21. int e ,e1 ,e2 ;//聲明當(dāng)前偏差值變量、之后偏差值變量、再后偏差值變量
  22. int out=0;//PID調(diào)節(jié)后輸出偏差值變量
  23. uint cnt=0;//定時(shí)器1中斷次數(shù)變量
  24. uint Inpluse=0;//聲明脈沖計(jì)數(shù)變量、
  25. uint PWMTime=100;//聲明脈沖寬度時(shí)間變量
  26. float uk ,uk1 ,duk ;//聲明目前總偏差值變量、之后偏差值總變量、偏差值總變量
  27. float Kp=0.36,Ki=0.05,Kd=0.016;//pid控制系數(shù)p=0.1,i=0.05,d=0.016。
  28.   void delay(uchar x)
  29. {
  30.    uint i,j;
  31.    for(i=x;i>0;i--)
  32.     for(j=50;j>0;j--);
  33.    }
  34.   void DelayUs2x(unsigned char t)
  35. {   
  36.    while(--t);
  37.   }
  38.   void DelayMs(unsigned char t)
  39. {
  40.    while(t--)
  41. {
  42.     DelayUs2x(245);
  43.     DelayUs2x(245);
  44.    }
  45. }
  46.   void write_com(uchar com)//寫命令
  47. {
  48.    RS=0;
  49.    RW=0;
  50.    P2=com;
  51.    DelayMs(5);
  52.    EN=1;
  53.    DelayMs(5);
  54.    EN=0;
  55.   }
  56.   void write_data(uchar date)//寫一個(gè)字符
  57. {
  58.    RS=1;
  59.    RW=0;
  60.    P2=date;
  61.    DelayMs(5);
  62.    EN=1;
  63.    DelayMs(5);
  64.    EN=0;
  65.   }
  66.   void init()//初始化
  67. {
  68.    write_com(0x38);
  69.    write_com(0x0c);
  70.    write_com(0x06);
  71.    write_com(0x01);
  72.   }
  73.   void LCD_Write_String(uchar x,uchar y,uchar *s)//寫字符串
  74. {     
  75.    if (y == 0)
  76. {     
  77.     write_com(0x80 + x);     
  78.    }
  79.    else
  80. {     
  81.     write_com(0xC0 + x);     
  82.    }        
  83.    while (*s)
  84. {     
  85.      write_data( *s);     
  86.      s++;     
  87.    }
  88. }
  89.   void PIDControl()//pid偏差計(jì)算
  90. {
  91.    e=SetSpeed-ActualSpeed;//計(jì)算當(dāng)前偏差值變量
  92.    duk=(Kp*(e-e1)+Ki*e+Kd*(e-2*e1+e2));//PID連續(xù)系統(tǒng)離散化增量型PID算法,算出總偏差值變量。
  93.    uk=duk+uk1;//計(jì)算偏差值總變量加上之后偏差值總變量之和賦給目前總偏差值變量
  94.    out=(int)uk;//強(qiáng)制類型轉(zhuǎn)化為整數(shù)型的目前總偏差值變量賦給PID調(diào)節(jié)后輸出偏差值變量
  95.    if(out>100)//判斷PID調(diào)節(jié)后輸出偏差值變量是否大于100
  96. {
  97.     out=100;//PID調(diào)節(jié)后輸出偏差值變量為100
  98.    }
  99.    else if(out<0)//判斷PID調(diào)節(jié)后輸出偏差值變量是否小于0
  100. {
  101.     out=0;//PID調(diào)節(jié)后輸出偏差值變量為0
  102.   }
  103.    uk1=uk;//目前總偏差值變量賦給之后偏差值總變量
  104.    e2=e1;//之前偏差值變量賦給之后偏差值變量
  105.    e1=e;//當(dāng)前偏差值變量賦給之前偏差值變量
  106.    PWMTime=out;//PID調(diào)節(jié)后輸出偏差值變量賦給脈沖寬度時(shí)間變量
  107. }
  108.   void PWMOUT()
  109. {
  110.    if(cnt<PWMTime)//判斷定時(shí)器1中斷次數(shù)變量是否小于脈沖寬度時(shí)間變量
  111. {
  112.     PWM_FC=1;//脈沖寬度輸入端口輸出高電平
  113.    }
  114.    else
  115. {
  116.     PWM_FC=0;//脈沖寬度輸入端口輸出低電平
  117.    }
  118.    if(cnt>100)//判斷定時(shí)器1中斷次數(shù)變量是否大于100
  119.    cnt=0;//定時(shí)器1中斷次數(shù)變量歸0
  120. }
  121.   void SystemInit()//定時(shí)器0定時(shí)器1外部中斷0初始化函數(shù)
  122. {
  123.    TMOD=0X21;//定時(shí)器0方式1,定時(shí)器1方式2。  
  124.    TH0=0xf8;//初裝定時(shí)器0高八位寄存器定時(shí)數(shù)值
  125.    TL0=0x50 ;//初裝定時(shí)器0低八位寄存器定時(shí)數(shù)值,即2毫秒。
  126.    TH1=0xC0;//初裝定時(shí)器1高八位寄存器定時(shí)數(shù)值
  127.    TL1=0XC0;//初裝定時(shí)器1低八位寄存器定時(shí)數(shù)值,即16毫秒。
  128.    EA=1;//開總中斷
  129.    EX0=1;//開外部中斷0
  130.    IT0=1;//外部中斷0下降沿觸發(fā)
  131.    ET0=1;//開定時(shí)器0中斷允許
  132.    ET1=1;//開定時(shí)器1中斷允許
  133.    TR0=1;//開定時(shí)器0中斷
  134.    TR1=1;//開定時(shí)器1中斷
  135.    e =0;//偏差值變量為0
  136.    e1=0;//之后偏差值變量為0
  137.    e2=0;//再后偏差值變量為0
  138.    IN1=1;
  139.    IN2=1;
  140.   }
  141.   void SpeedSet()//設(shè)定速度函數(shù)
  142. {
  143.    if(qidong==0)
  144. {
  145.     delay(10);
  146.     if(qidong==0)
  147.   {
  148.      IN1=0;
  149.      IN2=1;
  150.      while(qidong==1);
  151.     }
  152.    }
  153.    if(tingzhi==0)
  154. {
  155.     delay(10);
  156.     if(tingzhi==0)
  157.   {
  158.      IN1=1;
  159.      IN2=1;
  160.      EN=1;
  161.      while(tingzhi==1);
  162.     }
  163.    }
  164.    if(fangxiang==0)
  165. {
  166.     delay(10);
  167.     if(fangxiang==0)
  168.   {
  169.      IN1=~IN1;
  170.      IN2=~IN2;
  171.      while(fangxiang==1);
  172.     }   
  173.    }
  174.    if(AddSpeed==0)//判斷加速鍵是否按下
  175. {
  176.     delay(10);//延時(shí)
  177.     if(AddSpeed==0)//再次判斷加速鍵是否按下
  178.   {
  179.      SetSpeed+=100;//設(shè)定速度變量每次加100
  180.      if(SetSpeed>1000)//判斷設(shè)定速度變量是否大于3500
  181.    {
  182.       SetSpeed=1000;//設(shè)定速度變量歸為3500
  183.      }
  184.     }
  185.    }
  186.    if(SubSpeed==0)//判斷減速鍵是否按下
  187. {
  188.     delay(10);//延時(shí)
  189.     if(SubSpeed==0)//再次判斷減速鍵是否按下
  190.   {
  191.      SetSpeed-=100;//設(shè)定速度變量每次減100
  192.      if(SetSpeed<0)//判斷設(shè)定速度變量是否小于0
  193.      SetSpeed=0;//設(shè)定速度變量歸0
  194.     }
  195.    }   
  196.     aa[7]=SetSpeed/1000+'0';
  197.     aa[8]=SetSpeed/100%10+'0';
  198.     aa[9]=SetSpeed/10%10+'0';
  199.     aa[10]=SetSpeed%10+'0';
  200.     LCD_Write_String(0,0,aa);
  201.   }
  202.   /**************主函數(shù)************/
  203.   void main()
  204. {
  205.    SystemInit();
  206.    init();
  207.    LCD_Write_String(0,0,aa);
  208.    displayflag=1;
  209.    while(1)
  210. {
  211.     SpeedSet();
  212.     if(displayflag==1)
  213.   {
  214.      displayflag=0;
  215.      cc[7]=ActualSpeed/1000+'0';
  216.      cc[8]=ActualSpeed/100%10+'0';
  217.      cc[9]=ActualSpeed/10%10+'0';
  218.      cc[10]=ActualSpeed%10+'0';
  219.      LCD_Write_String(0,1,cc);
  220.     }
  221.    }
  222.   }
  223.   void int0() interrupt 0//外部中斷0函數(shù)
  224. {
  225.    Inpluse++;//脈沖計(jì)數(shù)變量加加
  226.   }
  227.   void Timer0() interrupt 1//定時(shí)器0中斷服務(wù)函數(shù)
  228. {
  229.    static uint time=0;//轉(zhuǎn)速測(cè)量周期變量
  230.    TH0=0xf8;//重裝定時(shí)器0高八位寄存器計(jì)數(shù)值
  231.    TL0=0x50 ;//重裝定時(shí)器0低八位寄存器計(jì)數(shù)值,即2毫秒。
  232.    time++;//轉(zhuǎn)速測(cè)量周期變量加加
  233.    if(time>500)//判斷轉(zhuǎn)速測(cè)量周期變量是否大于500,等于500就是500x2毫秒=1000毫秒,也就是1s。
  234. {
  235.     time=0;//轉(zhuǎn)速測(cè)量周期變量歸0
  236.     displayflag=1;//顯示標(biāo)志位變量置1
  237.     ActualSpeed=Inpluse;//脈沖計(jì)數(shù)變量表示實(shí)際速度變量
  238.     Inpluse=0;//脈沖計(jì)數(shù)變量歸0
  239.     PIDControl();//PID控制函數(shù)
  240.    }
  241.    PWMOUT();
  242. }
  243.   void Timer1() interrupt 3//定時(shí)器1中斷服務(wù)函數(shù)
  244. {
  245.    cnt++;//定時(shí)器1中斷次數(shù)變量
  246.   }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

9#
ID:844772 發(fā)表于 2022-11-7 11:36 | 只看該作者
你霍爾的中斷線接錯(cuò)了,程序用的p32,你接到p30
回復(fù)

使用道具 舉報(bào)

10#
ID:1045221 發(fā)表于 2022-11-7 12:30 | 只看該作者
glinfei 發(fā)表于 2022-11-7 11:36
你霍爾的中斷線接錯(cuò)了,程序用的p32,你接到p30

霍爾中間兩相線接到了單片機(jī)兩個(gè)中斷口,結(jié)果可以檢測(cè)到轉(zhuǎn)速,但是加速減速按鍵不管用,這是怎么回事,求大佬指點(diǎn)
回復(fù)

使用道具 舉報(bào)

11#
ID:94031 發(fā)表于 2022-11-7 15:13 | 只看該作者
bouligand 發(fā)表于 2022-11-7 09:03
程序用的是同站一個(gè)大佬的這個(gè)的代碼

程序有問題,sbit qidong=P3^2;//啟動(dòng)鍵,P3^2中斷0應(yīng)接編碼器輸出用來測(cè)速,不能接按鍵,按鍵換成P1^3,改后你再試。
回復(fù)

使用道具 舉報(bào)

12#
ID:844772 發(fā)表于 2022-11-7 16:39 | 只看該作者
bouligand 發(fā)表于 2022-11-7 12:30
霍爾中間兩相線接到了單片機(jī)兩個(gè)中斷口,結(jié)果可以檢測(cè)到轉(zhuǎn)速,但是加速減速按鍵不管用,這是怎么回事,求 ...

你就直接抄程序唄,為啥要改呢,就是改的地方出錯(cuò)了。
回復(fù)

使用道具 舉報(bào)

13#
ID:1045221 發(fā)表于 2022-11-8 20:13 | 只看該作者
glinfei 發(fā)表于 2022-11-7 16:39
你就直接抄程序唄,為啥要改呢,就是改的地方出錯(cuò)了。

根據(jù)源程序接線,中間兩相接哪,中斷口是3.2,3.3,哪能不起沖突
回復(fù)

使用道具 舉報(bào)

14#
ID:844772 發(fā)表于 2022-11-9 10:23 | 只看該作者
bouligand 發(fā)表于 2022-11-8 20:13
根據(jù)源程序接線,中間兩相接哪,中斷口是3.2,3.3,哪能不起沖突

你又不測(cè)電機(jī)轉(zhuǎn)向,把任意一項(xiàng)接到3.2,另一個(gè)懸空唄。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 五月天婷婷狠狠 | 国产视频久久 | 91av在线免费看 | 色网站在线免费观看 | 午夜电影网 | 一区二区三区日韩精品 | 久久精品小短片 | 午夜视频免费 | 国产精品永久免费 | 欧美精品一区三区 | 亚洲精品乱码久久久久久蜜桃91 | 国产成人亚洲精品 | 91精品国产高清久久久久久久久 | 91一区二区 | 欧美久久一区二区 | 日韩高清电影 | 观看av| www.99热| 日韩精品视频在线免费观看 | 香蕉国产在线视频 | 日韩欧美在线播放 | 伊人一区 | 在线观看av中文字幕 | 91资源在线观看 | 日韩在线免费 | 在线视频 中文字幕 | 国产福利在线视频 | 成人国产在线视频 | www.久草.com | 久久99精品久久久 | 性色视频 | 91av亚洲 | 欧美黑人一区 | 亚洲一区av | 成年网站在线观看 | 色视频www在线播放国产人成 | 日韩中文字幕在线不卡 | 国产伊人久久久 | 99久久国产综合精品麻豆 | 精品在线播放 | 4hu最新网址 |