欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機的L298N直流電機調(diào)速系統(tǒng)Proteus仿真程序

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:328253 發(fā)表于 2020-8-16 09:39 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本此設計選擇STC89C52單片機作為主控芯片,選取帶有光電編碼器的直流電機作為被控對象,利用單片機的T0定時器產(chǎn)生PWM信號并送到直流電機。在Proteus仿真環(huán)境下搭建了L298N直流電機驅(qū)動電路、矩陣鍵盤掃描電路以及LCD12864顯示電路。實現(xiàn)了直流電機的啟動、加速、正轉(zhuǎn)、反轉(zhuǎn)、制動等功能。同時,采用PID控制算法可實現(xiàn)電機速度在特定的場合實現(xiàn)自動切換。具體見附件。


單片機源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>       
  3. #include<math.h>

  4. #include "lcd.h"
  5. #include "Key.h"
  6. #include "Motor.h"
  7. #include "LCD12864.h"
  8. #include "KeyBoard.h"
  9. #include "LCD12864.h"
  10. #include "LcdShow.h"
  11. #include "PID.h"

  12. extern uchar State_Flag;
  13. extern uchar Fwd_Flag;
  14. extern uchar Rev_Flag;

  15. unsigned int  KeyValue;

  16. unsigned int idata pwm_t;//周期
  17. unsigned int idata Impluse,Time_Count,ImpluseR;
  18. uchar idata Stop_Flag,Run_Flag,Curve_Flag;

  19. uint idata Set_Speed;  //  設定轉(zhuǎn)速
  20. unsigned char idata Sz_Flag,Sr_Flag;  // 記錄A相觸發(fā)后  ,B相高低電平的標志
  21. float idata L_Speed,R_Speed,ReaSpeed;

  22. uint idata PWM_Out,R_Duty,L_Duty,Turn_now;
  23. sbit LSB_L = P1^0;    // LSB_L
  24. sbit LSB_R = P1^1;    // LSB_R

  25. void TimerInit(void)                //@11.0592MHz
  26. {
  27.        
  28.         TMOD=0x01;                //定時器模式

  29.         TL0 = 0x18;                //初值      1ms  
  30.         TH0 = 0xFC;                //初值
  31.        
  32.         IT0 = 1;         //設置下降沿觸發(fā) 還是低電平觸發(fā) 0低電平
  33.         IT1 = 1;         //設置下降沿觸發(fā) 還是低電平觸發(fā) 0低電平
  34.   EA  = 1;
  35.         EX0 = 1;
  36.         EX1 = 1;
  37.        
  38.         ET0 = 1;
  39.         TR0 = 1;               

  40. }

  41. void main()
  42. {
  43.                   LED = 0;       
  44.        
  45.             Stop_Flag  = 0;
  46.             Lcd_Initial();
  47.                         TimerInit();
  48.                         Set_Speed = 0;
  49.          Lcd_Clear();
  50.                 while(1)
  51.                 {
  52.                         KeyValue = Get_Keyvalue();   //  矩陣鍵盤掃描
  53.                         if(KeyValue == 14)   // 輸入速度
  54.       {
  55.                           Set_Speed = SpeedInput();       
  56.                                 KeyValue = 16;
  57.             }
  58.                         Key_Process();
  59.                         if(Run_Flag)
  60.                         {
  61.                                 Set_Speed = 80;
  62.                                 Run_Flag = 0;
  63.                         }
  64.                
  65.                         if(State_Flag && ~Stop_Flag)       
  66.                         {
  67.                           PWM_Out = PID_Calculate(Set_Speed,abs(ReaSpeed));
  68.                                 R_Duty = PWM_Out + Turn_now;
  69.                                 L_Duty = PWM_Out - Turn_now;
  70.                         }
  71.                         else
  72.                                 PWM_Out = 0;  // 停止  
  73.                         Lcd_Show();
  74.          }          
  75. }

  76.        
  77. //定時器0中斷
  78. void timer0() interrupt 1
  79. {
  80.         static int i;
  81.         TL0 = 0x18;                //初值
  82.         TH0 = 0xFC;                //初值
  83.        
  84.        
  85.         pwm_t++;
  86.   Time_Count++;;
  87.         if(pwm_t == 500)   //500ms
  88.         {
  89.                 pwm_t = 0;
  90.                 if(Stop_Flag)
  91.                 {
  92.                         i++;
  93.                         L_Duty = 0;
  94.                         R_Duty = 0;
  95.                         if(i<31)
  96.                         {
  97.                      LED = ~LED;
  98.                                  if(i == 30)  
  99.                                  {
  100.                                          Stop_Flag = 0;
  101.                                          i = 0;
  102.                                          Set_Speed = 30;
  103.                                  }
  104.                         }
  105.                 }
  106.         }               
  107.         if( pwm_t<L_Duty)
  108.                   MotorL_Control();       
  109.                 else
  110.                         MotorL_Stop();
  111.        
  112.         if( pwm_t<R_Duty)
  113.                   MotorR_Control();       
  114.    else
  115.                    MotorR_Stop();
  116.         /*---------M法 測速------------*/
  117.         if(Time_Count == 100 )    //  100ms
  118.          {
  119.                  
  120.                 Control();
  121.                 Time_Count = 0;
  122.                 Impluse = 0;
  123.                 ImpluseR = 0;
  124.          }
  125. }


  126. void int0() interrupt 0
  127. {
  128.         Impluse++;
  129.          if(LSB_L == 1)
  130.                          Sz_Flag = 1;    //  正反轉(zhuǎn)標志位 A相下降沿,B相高電平
  131.          
  132.          else Sz_Flag = 0;
  133.           LSB_L = 1;
  134. }


  135. void int1() interrupt 2   // 外部中斷1   用于測 右輪的速度
  136. {
  137.         ImpluseR++;
  138.          if(LSB_R == 1)
  139.                          Sr_Flag = 1;       //  正反轉(zhuǎn)標志位 A相下降沿,B相高電平
  140.          
  141.          else Sr_Flag = 0;
  142.           LSB_R = 1;
  143. }
復制代碼

Proteus仿真.rar

453.92 KB, 下載次數(shù): 290, 下載積分: 黑幣 -5

Proteus仿真原理圖

程序.rar

107.16 KB, 下載次數(shù): 267, 下載積分: 黑幣 -5

源程序帶有LCD2864底層庫

設計51hei.pdf

1.15 MB, 下載次數(shù): 209, 下載積分: 黑幣 -5

詳細的設計報告

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:904606 發(fā)表于 2021-4-28 21:19 | 只看該作者
發(fā)現(xiàn)了這個帖子,十分感謝您的分享!程序拿走學習了!
回復

使用道具 舉報

板凳
ID:903667 發(fā)表于 2021-4-29 10:36 | 只看該作者
謝謝提供參考,不知道是否能仿真 FOC 模式?
回復

使用道具 舉報

地板
ID:929166 發(fā)表于 2021-5-29 17:43 | 只看該作者
keyway 發(fā)表于 2021-4-29 10:36
謝謝提供參考,不知道是否能仿真 FOC 模式?

這個proteous附件是個圖片
有proteous文件嗎

回復

使用道具 舉報

5#
ID:920848 發(fā)表于 2021-6-2 01:17 | 只看該作者
仿真要如何實現(xiàn)?
回復

使用道具 舉報

6#
ID:328014 發(fā)表于 2021-6-2 03:46 | 只看該作者
xyqcrg 發(fā)表于 2021-6-2 01:17
仿真要如何實現(xiàn)?

樓主的仿真是用Proteus7.5畫的,需要用這個版本才能打開,效果如圖:

51hei.png (21.69 KB, 下載次數(shù): 101)

51hei.png
回復

使用道具 舉報

7#
ID:328253 發(fā)表于 2021-12-19 19:38 | 只看該作者
林小小小惜 發(fā)表于 2021-5-29 17:43
這個proteous附件是個圖片
有proteous文件嗎

要用protecous打開哦
回復

使用道具 舉報

8#
ID:328253 發(fā)表于 2021-12-19 19:38 | 只看該作者
51hei團團 發(fā)表于 2021-6-2 03:46
樓主的仿真是用Proteus7.5畫的,需要用這個版本才能打開,效果如圖:

感謝回答
回復

使用道具 舉報

9#
ID:415044 發(fā)表于 2022-1-6 15:43 | 只看該作者
這個怎么啟動,沒按鍵開始啊
回復

使用道具 舉報

10#
ID:878353 發(fā)表于 2022-1-9 19:39 | 只看該作者
很不錯!看起來很高大上!
回復

使用道具 舉報

11#
ID:373253 發(fā)表于 2022-4-3 16:57 | 只看該作者
覺得真不錯,下載閱讀看看
回復

使用道具 舉報

12#
ID:1086796 發(fā)表于 2023-7-1 22:33 | 只看該作者
下載了你的三個文件,質(zhì)量很高。但是,仿真時發(fā)現(xiàn)電機不能正轉(zhuǎn),同時,提示:Parameter <INVERT> not defined in INVERT of U1. [LCD2]和Non-existant pin [<INVERT>] specified by [INVERT]. [LCD2_U1]
不知道怎么解決?
回復

使用道具 舉報

13#
ID:1118367 發(fā)表于 2024-4-27 18:29 | 只看該作者
拿走去做研究啦
回復

使用道具 舉報

14#
ID:1140214 發(fā)表于 2024-12-19 08:54 | 只看該作者
我黑幣不夠所以只下了程序,原理圖我按照上圖連接,但運行時報錯了,各位大佬
請幫我看看哪里錯了
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表