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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2616|回復(fù): 0
收起左側(cè)

stm32f103ze電磁循跡超聲波避障停車源程序

[復(fù)制鏈接]
ID:237527 發(fā)表于 2021-5-21 16:48 | 顯示全部樓層 |閱讀模式
采用三個電感循跡和超聲波避障
制作出來的實物圖如下:
253CDC76A3912188EA6335E48E2A0AEE.png 610F7EA2789054F32584B0BD9FF38C34.png

單片機(jī)源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "usart.h"
  6. #include "timer.h"
  7. #include "moto.h"
  8. #include "pwm.h"
  9. #include "lcd.h"

  10. #define Trig PGout(1)                //PC1        TRIG
  11. //函數(shù)聲明
  12. void UltrasonicWave_Configuration(void);
  13. void UltrasonicWave_StartMeasure(void);
  14. void TIM5_Int_Init(u16 arr,u16 psc);
  15. extern int Sensor_Left,Sensor_Middle,Sensor_Right;//電磁巡線相關(guān)
  16. extern float Velocity_KP,Velocity_KI,Sensor,sum;               //速度控制PID參數(shù)
  17. extern float Velocity,Velocity_Set,Turn,Angle_Set;
  18. extern int Motor_A,Motor_B,Servo,Target_A,Target_B;  //電機(jī)控制相關(guān)
  19. extern int Encoder_Left,Encoder_Right;             //左右編碼器的脈沖計數(shù)

  20. extern u8  TIM5CH1_CAPTURE_STA;                //輸入捕獲狀態(tài)                                                   
  21. extern u16        TIM5CH1_CAPTURE_VAL;        //輸入捕獲值        

  22. //void TIM3_Int_Init(u16 arr,u16 psc);

  23. void UltrasonicWave_Configuration(void)
  24. {
  25.         GPIO_InitTypeDef GPIO_InitStructure;
  26.         
  27.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);

  28.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                                         
  29.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  
  30.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 
  31.         GPIO_Init(GPIOG, &GPIO_InitStructure);                       
  32. }
  33. void UltrasonicWave_StartMeasure(void)
  34. {
  35.         Trig = 1;
  36.         delay_us(20);                                      //??20US
  37.         Trig = 0;
  38.         
  39. }
  40. int main(void)
  41. {               
  42.   u32 temp=0;
  43.         float UltrasonicWave_Distance=0;      //計算出的距離
  44.         delay_init();                     //延時函數(shù)初始化         
  45.         Encoder_Init_TIM2();            //=====編碼器接口
  46.         delay_ms(100);
  47.         Encoder_Init_TIM3();            //=====初始化編碼器
  48.   delay_ms(100);         
  49.   Motor_PWM_Init(7199,0);                                  //=====初始化PWM 10KHZ,用于驅(qū)動電機(jī)
  50.         delay_ms(100);
  51.          NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
  52.         UltrasonicWave_Configuration();
  53.         TIM5_Cap_Init(0XFFFF,72-1);        //以1Mhz的頻率計數(shù)
  54.         ele_Init();  //=====電磁傳感器初始化
  55.         delay_ms(100);
  56.         
  57.          LED_Init();                             //LED端口初始化
  58.         LCD_Init();
  59.                  
  60.         POINT_COLOR=RED;
  61.         delay_ms(100);
  62.         //TIM5_Int_Init(5000,71);//10Khz的計數(shù)頻率,計數(shù)到5000為500ms
  63. delay_ms(100);         
  64.            while(1)
  65.         {
  66.                 UltrasonicWave_StartMeasure();//開始測距
  67.                 if(TIM5CH1_CAPTURE_STA&0X80)//成功捕獲到了一次上升沿
  68.                 {
  69.                         temp=TIM5CH1_CAPTURE_STA&0X3F;
  70.                         temp*=65536;//溢出時間總和
  71.                         temp+=TIM5CH1_CAPTURE_VAL;//得到總的高電平時間
  72.                         
  73.                         UltrasonicWave_Distance=(float)temp*170/10000;//距離計算公式:距離=高電平持續(xù)時間*聲速/2   
  74.                                                                                                                   //即 距離= 高電平持續(xù)時間*340*100/(2*1000 000) = 高電平持續(xù)時間*170/10000
  75.                         //printf("Distance:%f cm\r\n",UltrasonicWave_Distance);//打印總的高點平時間
  76.                         TIM5CH1_CAPTURE_STA=0;//開啟下一次捕獲
  77.                 }
  78.                 LCD_ShowString(10,40,200,16,16,"TFTLCD TEST");
  79.                 LCD_ShowxNum(10,60,Sensor_Left,4,16,0);
  80.                 LCD_ShowxNum(10,80,Sensor_Middle,4,16,0);
  81.                 LCD_ShowxNum(10,100,Sensor_Right,4,16,0);
  82.                 LCD_ShowxNum(10,120,Turn,4,16,0);
  83.                 LCD_ShowxNum(10,140,Sensor,4,16,0);
  84.                 LCD_ShowxNum(10,160,UltrasonicWave_Distance,4,16,0);
  85.     Sensor_Left=Get_Adc(11);                //采集左邊電感的數(shù)據(jù)
  86.                 Sensor_Right=Get_Adc(13);               //采集右邊電感的數(shù)據(jù)
  87.                 Sensor_Middle=Get_Adc(12);              //采集中間電感的數(shù)據(jù)
  88.                 sum=Sensor_Left-Sensor_Right;  //歸一化處理
  89.                 Sensor=150*sum/(Sensor_Left+Sensor_Middle+Sensor_Right+1);   //求偏差
  90.                 Sensor=Sensor>120?120:Sensor;
  91.                 Sensor=Sensor<-120?-120:Sensor;
  92.                 Get_RC();//pid計算輸出
  93.                 if(UltrasonicWave_Distance>15)
  94.                 {
  95.                                 PWMA1=4000+Turn,PWMA2=0;        
  96.                                 PWMB1=0,PWMB2=3200+Turn;
  97.                 }
  98.                 else
  99.                 {
  100.                     PWMA1=7200+Turn,PWMA2=0;        
  101.                                 PWMB1=0,PWMB2=0+Turn;
  102.                 }
  103.                 //LED0=!LED0;
  104.                 //delay_ms(200);//測試主程序是否卡死
  105.         
  106.         }         
  107. }         
  108. u8  TIM5CH1_CAPTURE_STA=0;        //輸入捕獲狀態(tài)                                                   
  109. u16        TIM5CH1_CAPTURE_VAL;        //輸入捕獲值

  110. //定時器5中斷服務(wù)程序         
  111. void TIM5_IRQHandler(void)
  112. {

  113.          if((TIM5CH1_CAPTURE_STA&0X80)==0)//還未成功捕獲        
  114.         {         
  115.                 if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)//檢查TIM5更新中斷發(fā)生與否
  116.                  
  117.                 {            
  118.                         if(TIM5CH1_CAPTURE_STA&0X40)//已經(jīng)捕獲到高電平了
  119.                         {
  120.                                 if((TIM5CH1_CAPTURE_STA&0X3F)==0X3F)//高電平太長了
  121.                                 {
  122.                                         TIM5CH1_CAPTURE_STA|=0X80;//標(biāo)記成功捕獲了一次
  123.                                         TIM5CH1_CAPTURE_VAL=0XFFFF;
  124.                                 }
  125.                                 else TIM5CH1_CAPTURE_STA++;
  126.                         }         
  127.                 }
  128.                 if (TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET)//捕獲1發(fā)生捕獲事件
  129.                 {        
  130.                         if(TIM5CH1_CAPTURE_STA&0X40)                //捕獲到一個下降沿                 
  131.                         {                                 
  132.                                 TIM5CH1_CAPTURE_STA|=0X80;                //標(biāo)記成功捕獲到一次高電平脈寬
  133.                                 TIM5CH1_CAPTURE_VAL=TIM_GetCapture1(TIM5);
  134.                                    TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising); //CC1P=0 設(shè)置為上升沿捕獲
  135.                         }
  136.                         else                                                                  //還未開始,第一次捕獲上升沿
  137.                         {
  138.                                 TIM5CH1_CAPTURE_STA=0;                        //清空
  139.                                 TIM5CH1_CAPTURE_VAL=0;
  140.                                  TIM_SetCounter(TIM5,0);
  141.                                 TIM5CH1_CAPTURE_STA|=0X40;                //標(biāo)記捕獲到了上升沿
  142.                                    TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling);                //CC1P=1 設(shè)置為下降沿捕獲
  143.                         }                    
  144.                 }                                                                                    
  145.          }

  146.     TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update); //清除中斷標(biāo)志位

  147. }

  148. //定時器3中斷服務(wù)程序
  149. //void TIM5_IRQHandler(void)   //TIM3中斷
  150. //{
  151. //        if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)  //檢查TIM3更新中斷發(fā)生與否
  152. //                {
  153. //                        
  154. //                        TIM_ClearITPendingBit(TIM5, TIM_IT_Update  );  //清除TIMx更新中斷標(biāo)志
  155. ////  if(Flag_Target==1)  '
  156. //                          
  157. //                                                                        
  158. //                        //LED1=!LED1;//測試中斷
  159. //                        //         if(Flag_Target==0)
  160. ////         {
  161. //                                        //        Encoder_Left=Read_Encoder(2);                                       //===讀取編碼器的值                                                         //為了保證M法測速的時間基準(zhǔn),首先讀取編碼器數(shù)據(jù)
  162. //                                        //        Encoder_Right=-Read_Encoder(3);                                      //===讀取編碼器的值
  163. //                                                Get_RC();
  164. //                                                //Kinematic_Analysis(Velocity,Turn);                                                                                                                             //小車運動學(xué)分析   
  165. ////Motor_A=Incremental_PI_A(Encoder_Left,Target_A);                   //===速度閉環(huán)控制計算電機(jī)A最終PWM
  166. //                                //        Motor_B=Incremental_PI_B(Encoder_Right,Target_B);                  //===速度閉環(huán)控制計算電機(jī)B最終PWM
  167. //                                //                Xianfu_Pwm();                                                      //===PWM限幅
  168. //                                  //Set_Pwm(Motor_A,Motor_B,Servo);                                          //===賦值給PWM寄存器                  
  169. ////         }
  170. //                }
  171. //}
復(fù)制代碼

所有資料51hei提供下載:
xunji5.16.7z (234.08 KB, 下載次數(shù): 37)

評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久久综合 | 久久久免费毛片 | 在线观看av网站永久 | 亚洲国产成人精品久久久国产成人一区 | 欧美国产日韩精品 | 亚洲免费网 | 自拍偷拍亚洲欧美 | 色综合久久久久 | 国产伦精品一区二区三区照片91 | 激情毛片 | 综合伊人 | 欧美成人精品一区二区男人看 | 白浆在线 | 成人国内精品久久久久一区 | 99久久精品国产一区二区三区 | 久久久精品 | 91久久国产综合久久 | 欧美一区二区三区高清视频 | 国产精品一区一区三区 | 久久久久久久久99 | 日韩中文字幕在线免费 | 黄色在线免费观看视频网站 | 久草欧美视频 | 成人亚洲精品 | 精品网站999www | 国产精品不卡一区 | 久久精品成人 | 欧美性久久| 天天操操 | 久久高清免费视频 | 热99视频| 午夜精品久久久久久久星辰影院 | 欧美成人a∨高清免费观看 欧美日韩中 | 国产激情 | 国产精品国产三级国产aⅴ无密码 | 日韩一区二区三区在线视频 | 午夜精品在线观看 | 色婷婷国产精品综合在线观看 | 国产日韩视频在线 | 日韩av黄色| 午夜激情影院 |