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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3378|回復: 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)


回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品美女久久久久久免费 | 搞黄网站在线观看 | 亚洲人成人一区二区在线观看 | 毛片在线免费 | 在线观看你懂的网站 | 成人免费视屏 | 99久久国产精 | 欧美成人一区二区三区片免费 | 国产第一亚洲 | 成人免费黄色片 | 日本中文字幕一区 | 成人精品| 久草久 | 久久久久国产精品一区二区 | jav成人av免费播放 | 欧美一区成人 | av中文字幕在线观看 | 黑人巨大精品欧美一区二区免费 | 亚洲中午字幕 | 亚洲国产欧美在线人成 | 久久久久久久久国产 | 国产精品久久久久aaaa樱花 | 成人精品一区二区三区中文字幕 | 综合久久av | 波多野结衣中文字幕一区二区三区 | 午夜精品一区二区三区在线视频 | 亚洲综合免费 | 亚洲色片网站 | 久久精品网 | 久干网 | 手机在线不卡av | 久久精品网 | 无码一区二区三区视频 | 亚洲免费视频网址 | 成人亚洲网| 免费在线国产视频 | 国内自拍视频在线观看 | 成人a在线观看 | 美日韩免费视频 | 超碰伊人久久 | 欧美三级三级三级爽爽爽 |