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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于STM32F103的簡易倒立擺KEIL5工程下載

[復制鏈接]
跳轉到指定樓層
樓主
ID:359202 發表于 2018-6-26 11:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
   2013電子設計競賽控制類題目

單片機源程序如下:
  1. #include "sys.h"
  2. int flag=0,key=0;
  3. int Bias=0;                                      //本次偏差
  4. int Last_Bias=0;                                                        //上一次偏差                    
  5. int angel,G0=0; //擺桿角度
  6. int Encoderdata;                //電機速度
  7. //float Encoder_Least,Encoder=0;
  8. //float Encoder_Integral;
  9. int pwm;                                                          //pwm輸出量

  10. int main(void)
  11. {
  12.         int i;                                                 
  13.         delay_init();                                                        //延時初始化  
  14.         uart_init(115200);                     //串口初始化為
  15.   LED_Init();                                              //初始化與LED連接的硬件接口
  16.         Balance_Motor_Init();     //電機控制端口初始化
  17.         KEY_Init();                                                          //按鍵端口初始化
  18.         LCDx_Init();                                             //初始化LCD         
  19.   Adc_Init();                                                          //ADC初始化
  20.         TIM2_Base_Init(50);       //10Khz的計數頻率,計數到50為5ms
  21.         TIM4_PWM_Init(999,6);            //72000000/(6*1000)=12Khz
  22.         Encoder_Init();                                                //TIM3 PA6 PA7
  23.         delay_ms(200);            //=====延時等待穩定       
  24.         POINT_COLOR=BLUE;                                       
  25.         LCD_ShowString(60,110,200,16,16,"Encoder VAL:");
  26.         LCD_ShowString(60,130,200,16,16,"ADC_CH1_VAL:");             
  27.         LCD_ShowString(100,190,200,16,16,"Press Key_x");
  28.         while(1)
  29.         {
  30.                 LED2_REV;
  31.     delay_ms(100);               
  32.                 //angel=Get_Adc(ADC_Channel_1);
  33.                 //Read_Encoder();
  34.                 //LCD_ShowxNum(156,130,angel,4,16,0);
  35.                 //LCD_ShowxNum(156,110,Encoderdata,4,16,0);
  36.                 key=KEY_Scan(0);       
  37.                    if(key)
  38.                 {                                                  
  39.                         switch(key)
  40.                         {                                 
  41.                                 case WKUP_PRES:        flag=4;break;                        //完成基本要求3和抗干擾
  42.                                 case KEY2_PRES:        flag=3;break;                        //完成保持倒立旋轉臂圓周
  43.                                 case KEY1_PRES:        flag=2;break;                        //完成自起擺
  44.                                 case KEY0_PRES:        flag=1;break;     //完成基本要求1、2
  45.                         }
  46.                 }
  47.                
  48. if(flag==1)                    //按鍵1         
  49. {
  50.         for(i=0;i<3;i++)
  51.         {
  52.         Zheng(650);
  53.         delay_ms(400);
  54.         Fan(650);
  55.         delay_ms(400);}
  56.         for(i=0;i<2;i++)
  57.         {Zheng(800);
  58.         delay_ms(200);
  59.         Fan(800);
  60.         delay_ms(200);}
  61.         stop();
  62.         flag=0;
  63. }
  64. if(flag==2)                                                                                        //按鍵2
  65. {
  66.         Zheng(700);
  67.         delay_ms(400);
  68.         Fan(650);
  69.         delay_ms(400);
  70.         Zheng(950);
  71.         delay_ms(300);
  72.         Fan(950);
  73.         delay_ms(200);
  74.         stop();
  75.         flag=4;                        //進入PID調節
  76. }
  77. if(flag==3)                       //按鍵3
  78. {
  79.         G0=30;
  80.         flag=4;                                                                                                        //        進入PID調節
  81. }
  82.         }
  83. }       
  84. void TIM2_IRQHandler(void)   //TIM2中斷
  85. {
  86.         if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //檢查指定的TIM中斷發生與否:TIM 中斷源
  87.                 {
  88.                 TIM_ClearITPendingBit(TIM2, TIM_IT_Update  );    //清除TIMx的中斷待處理位:TIM 中斷
  89.                         Read_Encoder();
  90.                         LCD_ShowxNum(156,110,Encoderdata,4,16,0);
  91.                         //LED2_REV;
  92.         if(flag==4)
  93.                         {
  94.                                 angel=Get_Adc(ADC_Channel_1)+G0;            //更新擺桿狀態
  95.                                
  96.                                 Bias=angel-3210;                                                                                                                //本次偏差=adc值-平衡中值       
  97.              pwm=26.0*Bias+8.0*(Bias-Last_Bias);                                        //PD控制器                                                        
  98.                    if(pwm > 0)                                  //26 16
  99.                                                 {
  100.                                                         if(pwm>=1000)
  101.                                                         {
  102.                                                                 pwm=1000;
  103.                                                         }
  104.                                                          Fan(pwm);                                                                                                         //控制電機反轉 逆時針
  105.                                                 }
  106.                                                 else
  107.                                                 {
  108.                                                         if(pwm<=-1000)                        //限制幅度
  109.                                                         {
  110.                                                                 pwm=-1000;
  111.                                                         }
  112.                                                         pwm=-pwm;
  113.                                                         Zheng(pwm);                                                                                                                //控制電機正轉 順時針       
  114.                                                 }Last_Bias=Bias;                                                           
  115.                         }
  116.                 }
  117. }

  118. //encoder=Read_Encoder();
  119. //                                Encoder_Least =encoder-0;                    //===獲取最新速度偏差==測量速度-目標速度(此處為零)
  120. //                Encoder *= 0.7;                                                                //===一階低通濾波器      
  121. //                Encoder += Encoder_Least*0.3;                                            //===一階低通濾波器   
  122. //                Encoder_Integral +=Encoder;                                       //===積分出位移 積分時間:5ms
  123. //          if(Encoder_Integral>500)          Encoder_Integral=500;          //===積分限幅
  124. //                if(Encoder_Integral<-500)        Encoder_Integral=-500;
復制代碼

所有資料51hei提供下載:
簡易倒立擺 最終版 - 副本.rar (405.51 KB, 下載次數: 71)


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线一区二区三区 | 久久er精品 | 97久久久久久 | 国产精品久久久久久久久久久久久 | 欧美三区视频 | 久久久一区二区三区四区 | 久久久精品网站 | 国产精品久久久久久久久久久久午夜片 | 国产一级影片 | 仙人掌旅馆在线观看 | 日本三级电影免费观看 | 国产一区二区欧美 | 亚洲区视频 | 91高清视频在线观看 | 在线观看免费观看在线91 | 在线观看成人小视频 | 国产在线一区二区 | jizz在线免费观看 | 中文字幕在线免费观看 | 国产精品亚洲综合 | 色视频网站免费 | 亚洲视频在线看 | 在线精品一区二区三区 | 国产精品欧美一区二区 | 日韩一区二区三区在线观看视频 | 久久久久欧美 | 亚洲欧美一区二区三区情侣bbw | 在线精品一区二区 | 日日噜噜噜夜夜爽爽狠狠视频, | 欧美精品福利视频 | 六月婷婷久久 | 99久久精品一区二区成人 | 免费黄色的网站 | 中文字幕人成人 | 在线成人免费av | 亚州精品天堂中文字幕 | 一区二区三区四区在线视频 | 龙珠z在线观看 | 久久免费视频2 | 亚洲精品二区 | 国产激情精品一区二区三区 |