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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6000|回復: 4
打印 上一主題 下一主題
收起左側

帶PID控制的電機控制系統源程序 節氣門(閉環)電機PWM調節

[復制鏈接]
跳轉到指定樓層
樓主
節氣門(閉環)電機PWM調節,可以采集電壓來調節電機轉速,PID控制

  1. #include <STC12C5A60S2.H>
  2. #include <intrins.H>

  3. #define AD_SPEEDHH 0x60 // 0110,0000  90個時鐘周期轉換一次
  4. #define AD_SPEEDH 0x50  // 0100,0000  180個時鐘周期轉換一次
  5. #define AD_SPEEDL 0x20  // 0010,0000  360個時鐘周期轉換一次
  6. #define AD_SPEEDLL 0x00 // 0000,0000  540個時鐘周期轉換一次
  7. #define AD_POWER 0x80 //1000,0000   AD電源
  8. #define AD_FLAG  0x10 //0001,0000   AD標志位
  9. #define AD_START 0x08 //0000,1000   啟動AD轉換
  10. #define AD_CHANNEl 0x07 //0000,0111 AD轉換通道選擇

  11. #define uint unsigned int
  12. #define uchar unsigned char

  13. sbit PWM=P2^0;
  14. bit f1,f2;
  15. char ZKB;
  16. uint tb_ad,jqm1_ad,jqm2_ad;

  17. /*******************************************************
  18.                   延時程序
  19. *******************************************************/
  20. delay(uint ms)
  21. {
  22.         while(ms--);
  23.         return 0;
  24. }
  25. /*******************************************************
  26.                   中斷程序
  27. *******************************************************/
  28. void timer0_init()                    //中斷初始化
  29. {
  30.         TH0=0xff;                                                //11.0592M晶振,定時1/60000s
  31.         TL0=0x46;                                                //波形頻率1200Hz
  32.         TMOD=0x01;
  33.         EA=1;
  34.         ET0=1;
  35.         TR0=1;
  36. }
  37. timer0() interrupt 1           //定時0.02ms
  38. {
  39.         uchar a;
  40.         TH0=0xff;                                                //11.0592M晶振,定時1/60000s
  41.         TL0=0x80;
  42.         //TL0=0x46;                                                //波形頻率1200Hz
  43.         a+=1;
  44.         if(a>=50) a=0;
  45.         if(a<ZKB) PWM=1;
  46.         else PWM=0;       
  47. }
  48. /*******************************************************
  49.                   AD轉換程序
  50. *******************************************************/
  51. void ad_init()                                           //AD轉換初始化函數
  52. {
  53.         ADC_RES = 0;                                   //轉換結果寄存器清空
  54.     ADC_RESL = 0;
  55.         P1ASF=0xff;                                           //P1口作為模擬功能使用
  56. }

  57. uint get_AD_res(uchar ch)                   //AD轉換函數
  58. {
  59.         ch &= AD_CHANNEl;                           //選擇轉換通道               
  60.         ADC_CONTR = AD_POWER|AD_SPEEDHH|ch|AD_START;        //1110,1***啟動A/D電源、選擇轉換速度、選擇通道、啟動轉換
  61.         _nop_();                                           //必要的延時,至少四個空指令
  62.         _nop_();
  63.         _nop_();
  64.         _nop_();
  65.         while(!(ADC_CONTR&AD_FLAG));    //0001,0000等待轉換完成
  66.         ADC_CONTR &= 0xe7;              //1110,0111  AD標志位清0,關閉AD轉換
  67.         return ADC_RES;               //返回 A/D 高 8 位轉換結果
  68. }
  69. /*******************************************************
  70.                   PID程序
  71. *******************************************************/
  72. PID(uint jqm_ad)
  73. {
  74.         if(tb_ad<55)
  75.                 tb_ad=55;
  76.         if((tb_ad-10)<jqm_ad<(tb_ad+10))
  77.                 ZKB=tb_ad/4.2;
  78.         if(jqm_ad<(tb_ad-10))
  79.                 ZKB=(tb_ad+3*tb_ad-3*jqm_ad)/4.2;                               
  80.         if(jqm_ad>(tb_ad+10))
  81.                 ZKB=(tb_ad+3*tb_ad-3*jqm_ad)/4.2;
  82.                 if(ZKB<=0)
  83.                         ZKB=0;
  84.                 if(ZKB>=50)
  85.                         ZKB=50;
  86.         return 0;
  87. }
  88. /*******************************************************
  89.                主函數
  90. *******************************************************/
  91. main()
  92. {
  93.         P2M1=0X00;
  94.         P2M0=0X01;
  95.         ad_init();
  96.         timer0_init();
  97.         P1=0;
  98.         ZKB=0;
  99.         delay(1000);
  100.         while(1)
  101.         {                       
  102.                 jqm1_ad=get_AD_res(2);
  103.                 delay(30);
  104.                 jqm2_ad=get_AD_res(0);
  105.                 delay(30);
  106.                 if((10<jqm1_ad<240)||(10<jqm2_ad<240))
  107.                         f1=1;
  108.                 else f1=0;
  109.                 while(f1)
  110.                 {
  111.                         jqm1_ad=get_AD_res(2);
  112.                         delay(30);
  113.                         jqm2_ad=get_AD_res(0);
  114.                         delay(30);
  115.                         jqm2_ad=250-jqm2_ad;
  116.                         tb_ad=get_AD_res(6);
  117.                         delay(30);                       
  118.                         if((20<jqm1_ad)&&(jqm1_ad<240))                       
  119.                         {
  120.                                 f1=1;
  121.                                 PID(jqm1_ad);
  122.                         }                       


  123. …………余下代碼請下載附件…………
復制代碼



完整源碼下載:
pid采集電壓電機控制.zip (47.17 KB, 下載次數: 91)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1 發表于 2017-3-21 17:05 | 只看該作者
好資料,51黑有你更精彩
回復

使用道具 舉報

板凳
ID:213928 發表于 2017-7-10 13:32 | 只看該作者
謝謝分享
回復

使用道具 舉報

地板
ID:257741 發表于 2017-12-9 21:59 | 只看該作者
謝謝!正需要呢!
回復

使用道具 舉報

5#
ID:739537 發表于 2020-4-27 18:37 | 只看該作者
大佬,真給力
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线免费观看日本 | 国产精品一区一区三区 | 日韩成人影院 | 天天操天天天干 | 国外成人在线视频网站 | 国产日韩一区 | 国产精品v| 久久中文字幕一区 | 欧美片网站免费 | 亚洲一av| 亚洲国产成人精品一区二区 | 成人国产精品久久久 | 九九热在线视频 | 成人免费激情视频 | 日韩精品在线观看视频 | 在线视频一区二区 | 亚洲欧美成人 | 精品久久久久久久 | www.色午夜.com| 91精品久久久久久久久久入口 | 欧美一区二区三区在线播放 | 成人在线观看黄 | 国产精品成人av | 天堂网avav | 欧洲一区二区在线 | 欧美日韩精品久久久免费观看 | a免费视频 | 激情五月综合网 | 久久综合影院 | 久久久国产精品 | 一区二区在线看 | 国产精品视频一区二区三区, | 午夜影院在线观看 | 午夜激情视频在线 | 国产欧美在线一区 | 亚洲精品乱码久久久久久蜜桃 | 天天草夜夜骑 | 色欧美片视频在线观看 | 亚洲精品黄色 | 欧美日韩不卡合集视频 | 亚洲综合色视频在线观看 |