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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10979|回復: 13
收起左側

基于51單片機的L298N直流電機調速系統Proteus仿真程序

  [復制鏈接]
ID:328253 發表于 2020-8-16 09:39 | 顯示全部樓層 |閱讀模式
本此設計選擇STC89C52單片機作為主控芯片,選取帶有光電編碼器的直流電機作為被控對象,利用單片機的T0定時器產生PWM信號并送到直流電機。在Proteus仿真環境下搭建了L298N直流電機驅動電路、矩陣鍵盤掃描電路以及LCD12864顯示電路。實現了直流電機的啟動、加速、正轉、反轉、制動等功能。同時,采用PID控制算法可實現電機速度在特定的場合實現自動切換。具體見附件。
1-1.png

單片機源程序如下:
  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;  //  設定轉速
  20. unsigned char idata Sz_Flag,Sr_Flag;  // 記錄A相觸發后  ,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;         //設置下降沿觸發 還是低電平觸發 0低電平
  33.         IT1 = 1;         //設置下降沿觸發 還是低電平觸發 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;    //  正反轉標志位 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;       //  正反轉標志位 A相下降沿,B相高電平
  140.          
  141.          else Sr_Flag = 0;
  142.           LSB_R = 1;
  143. }
復制代碼

Proteus仿真.rar

453.92 KB, 下載次數: 290, 下載積分: 黑幣 -5

Proteus仿真原理圖

程序.rar

107.16 KB, 下載次數: 267, 下載積分: 黑幣 -5

源程序帶有LCD2864底層庫

設計51hei.pdf

1.15 MB, 下載次數: 209, 下載積分: 黑幣 -5

詳細的設計報告

評分

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

查看全部評分

回復

使用道具 舉報

ID:904606 發表于 2021-4-28 21:19 | 顯示全部樓層
發現了這個帖子,十分感謝您的分享!程序拿走學習了!
回復

使用道具 舉報

ID:903667 發表于 2021-4-29 10:36 | 顯示全部樓層
謝謝提供參考,不知道是否能仿真 FOC 模式?
回復

使用道具 舉報

ID:929166 發表于 2021-5-29 17:43 | 顯示全部樓層
keyway 發表于 2021-4-29 10:36
謝謝提供參考,不知道是否能仿真 FOC 模式?

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

回復

使用道具 舉報

ID:920848 發表于 2021-6-2 01:17 | 顯示全部樓層
仿真要如何實現?
回復

使用道具 舉報

ID:328014 發表于 2021-6-2 03:46 | 顯示全部樓層
xyqcrg 發表于 2021-6-2 01:17
仿真要如何實現?

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

使用道具 舉報

ID:328253 發表于 2021-12-19 19:38 | 顯示全部樓層
林小小小惜 發表于 2021-5-29 17:43
這個proteous附件是個圖片
有proteous文件嗎

要用protecous打開哦
回復

使用道具 舉報

ID:328253 發表于 2021-12-19 19:38 | 顯示全部樓層
51hei團團 發表于 2021-6-2 03:46
樓主的仿真是用Proteus7.5畫的,需要用這個版本才能打開,效果如圖:

感謝回答
回復

使用道具 舉報

ID:415044 發表于 2022-1-6 15:43 | 顯示全部樓層
這個怎么啟動,沒按鍵開始啊
回復

使用道具 舉報

ID:878353 發表于 2022-1-9 19:39 | 顯示全部樓層
很不錯!看起來很高大上!
回復

使用道具 舉報

ID:373253 發表于 2022-4-3 16:57 | 顯示全部樓層
覺得真不錯,下載閱讀看看
回復

使用道具 舉報

ID:1086796 發表于 2023-7-1 22:33 | 顯示全部樓層
下載了你的三個文件,質量很高。但是,仿真時發現電機不能正轉,同時,提示:Parameter <INVERT> not defined in INVERT of U1. [LCD2]和Non-existant pin [<INVERT>] specified by [INVERT]. [LCD2_U1]
不知道怎么解決?
回復

使用道具 舉報

ID:1118367 發表于 2024-4-27 18:29 | 顯示全部樓層
拿走去做研究啦
回復

使用道具 舉報

ID:1140214 發表于 2024-12-19 08:54 | 顯示全部樓層
我黑幣不夠所以只下了程序,原理圖我按照上圖連接,但運行時報錯了,各位大佬
請幫我看看哪里錯了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人精品一区二区三区在线观看 | 九九热精品视频 | 国产高清一区二区三区 | 中文字幕第5页 | 中文字幕在线观看一区 | 国产精品成人一区二区三区夜夜夜 | 色婷婷国产精品综合在线观看 | 免费在线成人 | 欧美精品一区二区三区蜜臀 | 国产精品777一区二区 | 黄色在线免费观看视频 | 福利色导航 | 人人干人人玩 | 男人阁久久 | 国产三级精品三级在线观看四季网 | 五月免费视频 | 成人深夜福利在线观看 | 精品无码久久久久久国产 | 亚洲欧美日韩精品久久亚洲区 | 毛片网站免费观看 | 在线观看国产视频 | 狠狠综合久久av一区二区小说 | 免费黄色在线 | 中文字幕视频在线观看 | 久久手机视频 | 欧美午夜视频 | 91资源在线 | 国产成人免费视频网站视频社区 | 欧美精品tv | 成人在线不卡 | 91观看| 精品一区二区三区在线观看国产 | 国产欧美精品一区二区色综合 | 五月天国产 | 欧美日韩高清免费 | 日韩成人免费视频 | 九九九久久国产免费 | 国产精品久久久久久 | 国产一区91精品张津瑜 | 天天操狠狠操 | 国产91丝袜在线播放 |