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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

風力擺控制系統賽題解析與操作說明及STM32源碼(重要的是PID算法)

查看數: 9883 | 評論數: 16 | 收藏 8
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2018-8-8 16:30

正文摘要:

電子競賽題目《風力擺控制系統》 本人的課程設計; 重要的是PID算法。

回復

ID:328014 發表于 2021-3-14 15:21
可樂我要檸檬味 發表于 2021-3-14 14:58
為什么壓縮包里面的程序沒有看到PID部分哇

是這個嗎Subject.c
  1. #include "Subject.h"
  2. #include "Data.h"
  3. #include "math.h"
  4. #include "moto_PWM.h"
  5. #include "math.h"
  6. #define H    79.0                  //萬向節距離地面的高度
  7. float R=25.0;           //擺動弧度的大小半徑
  8. #define T    1410.0   //擺動的周期
  9. float angle = 45.0;

  10. extern Data  PID_data;
  11. extern Data  PID_data1;
  12. uint8_t RoundDir=1;
  13. //const float Phase;
  14. void Subject_1(void)
  15. {
  16.         float A=0.0;
  17.         static uint32_t MoveTimeCnt = 0;
  18.         float set_y = 0.0;
  19.         float Normalization = 0.0;
  20.         float Omega = 0.0;
  21.         MoveTimeCnt+=5;
  22.         Normalization=(float)MoveTimeCnt/T;
  23.         Omega=2*3.1415926*Normalization;      //求一個角度 隨時間變化的 每5毫秒加2*PI*5/T度   來求相位
  24.        
  25.         A=atan((R/79.0f))*57.2958f;                                                //最大角度 擺的最大高度
  26.        
  27.         set_y=A*sin(Omega);                        //軌跡函數
  28.        
  29.         PID_data.setPoint=0;
  30.         PID_data.P=170;
  31.         PID_data.I=5.8;
  32.         PID_data.D=500;
  33.        
  34.        
  35.         PID_data1.setPoint=set_y;
  36.         PID_data1.P=150;
  37.         PID_data1.I=6.8;
  38.         PID_data1.D=500;
  39.        
  40.         PID_data.PWM=PID_Calc1();
  41.         PID_data1.PWM=PID_Calc2();
  42.        
  43.         if(PID_data.PWM>1500)
  44.                 PID_data.PWM=1500;
  45.         /*else if(PID_data.PWM>0&&PID_data.PWM<450)
  46.                 PID_data.PWM=450;*/
  47.         if(PID_data.PWM<-1500)
  48.                 PID_data.PWM=-1500;
  49.                 /*else if(PID_data.PWM<0&&PID_data.PWM>-450)
  50.                 PID_data.PWM=-450;*/
  51.                
  52.         if(PID_data1.PWM>1500)
  53.                 PID_data1.PWM=1500;
  54.         if(PID_data1.PWM<-1500)
  55.                 PID_data1.PWM=-1500;
  56.        
  57.         moto_PWM(PID_data.PWM,PID_data1.PWM);
  58.        
  59. }



  60. void Subject_2(void)
  61. {
  62.         float A=0.0;
  63.         static uint32_t MoveTimeCnt = 0;
  64.         float set_x = 0.0;
  65.         float Normalization = 0.0;
  66.         float Omega = 0.0;
  67.         MoveTimeCnt+=5;
  68.         Normalization=(float)MoveTimeCnt/T;
  69.         Omega=2*3.1415926*Normalization;
  70.         A=atan((R/79.0f))*57.2958f;
  71.         set_x=A*sin(Omega);
  72.        
  73.         PID_data.setPoint=set_x;
  74.         PID_data.P=191;
  75.         PID_data.I=5.9;
  76.         PID_data.D=420;
  77.        
  78.        
  79.         PID_data1.setPoint=0;
  80.         PID_data1.P=100;
  81.         PID_data1.I=5.8;
  82.         PID_data1.D=500;
  83.        
  84.         PID_data.PWM=PID_Calc1();
  85.         PID_data1.PWM=PID_Calc2();
  86.        
  87.         if(PID_data.PWM>1500)
  88.                 PID_data.PWM=1500;
  89.         if(PID_data.PWM<-1500)
  90.                 PID_data.PWM=-1500;
  91.        
  92.         if(PID_data1.PWM>1500)
  93.                 PID_data1.PWM=1500;
  94.         if(PID_data1.PWM<-1500)
  95.                 PID_data1.PWM=-1500;
  96.        
  97.         moto_PWM(PID_data.PWM,PID_data1.PWM);
  98.        
  99. }


  100. void Subject_3(void)
  101. {
  102.         //const float priod = 1410.0;  //單擺周期(毫秒)
  103.                      //相位補償 0, 10   20   30   40   50   60   70   80   90   100  110  120  130  140  150  160  170 180
  104.         const float Phase[19]= {0,-0.1,-0.05,0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,0.05,0.05,0.05,0.07,0};
  105.         static uint32_t MoveTimeCnt = 0;
  106.         float set_x = 0.0;
  107.         float set_y = 0.0;
  108.         float Ax = 0.0;
  109.         float Ay = 0.0;
  110.         float A = 0.0;
  111.         uint32_t pOffset = 0;
  112.         float Normalization = 0.0;
  113.         float Omega = 0.0;
  114.        
  115.         pOffset = (uint32_t)(angle/10.0f);                         //相位補償數組下標
  116.         MoveTimeCnt += 5;                                                         //每5ms運算1次
  117.         Normalization = (float)MoveTimeCnt/T;         //對單擺周期歸一化
  118.         Omega = 2.0*3.14159*Normalization;                         //對2π進行歸一化處理
  119.         A = atan((R/79.0f))*57.2958f;//根據擺幅求出角度A,88為擺桿離地高度                                                                  
  120.         Ax = A*cos(angle*0.017453);         //計算出X方向擺幅分量0.017453為弧度轉換
  121.         Ay = A*sin(angle*0.017453);         //計算出Y方向擺幅分量
  122.         set_x = Ax*sin(Omega);                  //計算出X方向當前擺角
  123.         set_y = Ay*sin(Omega+Phase[pOffset]); //計算出Y方向當前擺角
  124.                
  125.         PID_data.setPoint=set_y;
  126.         PID_data.P=180;
  127.         PID_data.I=6.5;
  128.         PID_data.D=500;
  129.        
  130.        
  131.         PID_data1.setPoint=set_x;
  132.         PID_data1.P=110;
  133.         PID_data1.I=5.9;
  134.         PID_data1.D=500;         
  135.        
  136.         PID_data.PWM=PID_Calc1();
  137.         PID_data1.PWM=PID_Calc2();
  138.        
  139.         if(PID_data.PWM>1700)
  140.                 PID_data.PWM=1700;

  141.         if(PID_data.PWM<-1700)
  142.                 PID_data.PWM=-1700;

  143.        
  144.         if(PID_data1.PWM>1700)
  145.                 PID_data1.PWM=1700;

  146.         if(PID_data1.PWM<-1700)
  147.                 PID_data1.PWM=-1700;

  148.         moto_PWM(PID_data.PWM,PID_data1.PWM);
  149. }
復制代碼
ID:871474 發表于 2021-3-14 14:58
為什么壓縮包里面的程序沒有看到PID部分哇
ID:719608 發表于 2020-9-20 17:54
加油,不錯!
ID:594722 發表于 2019-8-3 18:03
厲害了樓主
ID:444495 發表于 2019-8-3 17:14
感謝分享
ID:586030 發表于 2019-8-2 11:07
資料是好資料,但是希望你能夠標明你是轉載的,我正好剛看過原作者的帖子
ID:484435 發表于 2019-8-1 09:37
謝謝樓主分享
ID:484435 發表于 2019-8-1 09:25
謝謝樓主分享
ID:591400 發表于 2019-7-31 14:57
MPU6050有姿態融合嗎?數據漂移情況如何?
ID:496604 發表于 2019-7-28 22:39
膜拜大佬
ID:567506 發表于 2019-7-26 10:57
膜拜大佬
ID:380985 發表于 2019-7-25 23:24
好資料,正好學習
ID:328014 發表于 2019-7-10 21:43
lxh666 發表于 2019-7-10 20:08
壓縮包解壓不了,顯示壓縮包損壞或文件格式未知。
這是怎么回事?

貌似我用winrar可以解壓
ID:581864 發表于 2019-7-10 20:08
壓縮包解壓不了,顯示壓縮包損壞或文件格式未知。
這是怎么回事?
ID:250245 發表于 2018-8-11 20:52
謝謝樓主
ID:1 發表于 2018-8-9 01:56
好資料,51黑有你更精彩!!!

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色综合久久88色综合天天 | 国产精品久久久久久久久久久久久久 | 九九精品网 | 91色视频 | 五月婷婷在线观看 | 亚洲91精品 | 国产精品久久久久久久久借妻 | 免费看成人片 | 中文字幕在线观看网站 | 亚洲一区二区三区中文字幕 | 亚洲成人免费观看 | av日韩在线播放 | 在线一级片 | 成人国产精品免费观看 | 日韩av一区二区三区四区 | 欧美日韩毛片 | 亚洲成人免费在线 | 午夜影院黄 | 日本黄网站| 国产福利在线播放 | 黄色天天影视 | 亚洲一区国产精品 | 999av| 可以免费看黄的网站 | 高潮一区二区三区乱码 | 日日爱影视 | 久久网页| 国产精品6 | 天天操天天拍 | 亚洲第一免费视频 | 国产欧美一区二区三区视频在线观看 | 国产91在线播放 | 欧美成人一区二区三区 | 国产精品网站在线观看 | 香蕉网在线| 中文字字幕在线 | 69av在线播放 | 国产黄a三级三级看三级 | 成人免费片 | 亚洲精品在线看 | a级片免费观看 |