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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

飛思卡爾智能車ccd光電組K60單片機程序,速度2.8m/s

  [復制鏈接]
跳轉到指定樓層
樓主
研究目標:  通過攝像頭提取道路圖像,并進行圖像轉換與處理,利用編碼器采樣小車速度,研究采用雙環PID控制方法對小車進行控制,使智能小車能自動探尋軌跡,并能避障快速精準運行。結合K60芯片所提供的驅動方式,我們選擇了PWM(Pulse Width Modulation)控制模式來控制電機的速度。簡稱脈寬調制,是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術,廣泛應用在從測量、通信到功率控制與變換的許多領域中。脈沖寬度調制的一個優點是從處理器到被控系統信號都是數字形式的,無需進行數模轉換。

K60 IAR配置文件
Flash的配置:


飛思卡爾源碼:
  1. /******************** (C) COPYRIGHT 2017 藍宙電子工作室 ********************
  2. * 文件名       :main.c
  3. * 描述         :工程模版實驗
  4. *
  5. * 實驗平臺     :landzo電子開發版
  6. * 庫版本       :
  7. * 嵌入系統     :

  8. *               CCD的PIN定義   
  9.                            ADC1_SE6b   -- PTC10
  10.                            CLK_ClrVal()  PTE5_OUT = 0
  11.                            SI_SetVal()   PTE4_OUT = 1



  12. * 作者         :野火嵌入式開發工作室/landzo 藍電子
  13. 200  200  10  0.3  0  0.3  4  1  1.5  t=15.3
  14. **********************************************************************************/

  15. #include "include.h"
  16. #include "calculation.h"


  17. /*************************
  18. 設置系統的全局變量
  19. *************************/
  20. #define M                          1   // 8       // 10     //差速參數關系
  21. #define W                          13.8    //車寬
  22. #define L                          40    //車長的兩倍------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  23. #define SteeringEngine_mid         120
  24. #define SteeringEngine_Max         135//136
  25. #define SteeringEngine_Min         103//103(106很好)

  26. #define Motor_n_max               700
  27. #define Motor_n_min               100
  28. extern float K; //1.5// 2.3      //差速參數關系


  29. extern s16 Motor_n_Direct  ;//450; //250; //250;//305;    //直道轉速
  30. extern s16 Motor_n_Curve_1 ; //400;// 250;// 250;//305 ;    //彎道轉速
  31. extern s16 Motor_n_Curve_2; //350;// 250;// 250;//305 ;    //彎道轉速
  32. extern s16 Motor_n_Curve_3 ;//300;// 250;// 250;//305 ;    //彎道轉速

  33. extern u8 TIME0flag_5ms   ;
  34. extern u8 TIME0flag_10ms  ;
  35. extern u8 TIME0flag_15ms  ;
  36. extern u8 TIME0flag_20ms  ;
  37. extern u8 TIME1flag_20ms ;
  38. extern u8 TIME1flag_1ms ;

  39. extern u8 TimerFlag20ms;


  40. u16 pwm_l=0;
  41. u16 pwm_r=0;
  42. extern u16 pwmtest_l;
  43. extern u16 pwmtest_r;//左右輪pwm計數值
  44. u16 pwmset_l;
  45. u16 pwmset_l;
  46. u16 Motor_Pwm=0;
  47. s16 Motor_Pwm_l;
  48. s16 Motor_Pwm_r;  //左右輪速度設定值(PWM占空比)
  49. u16 Motor_n;
  50. extern u16 Motor_n_l;
  51. extern u16 Motor_n_r;  //左右輪轉速設定值(相對編碼器)

  52. u8 AtemP ;
  53. u8 Pixel[128];

  54. s16 bai_dian_sum=0;
  55. s16 bai_dian_num=0;
  56. s16 bai_dian_num_l=0;
  57. s16 bai_dian_num_r=0;
  58. s16 hei_dian_num_l=0;
  59. s16 hei_dian_num_r=0;

  60. s32 Center;
  61. s32 Center_car=68;//64+4;
  62. u8  FAVAULE;
  63. u8 FAVAULE_max;
  64. u8 FAVAULE_min;


  65. extern float SteeringEngine_Kp;
  66. extern float SteeringEngine_Ki;
  67. extern float SteeringEngine_Kd;
  68. extern float A1;
  69. extern float SteeringEngine_Kp_W;
  70. extern float SteeringEngine_Ki_W;
  71. extern float SteeringEngine_Kd_W;
  72. extern float A1_W;
  73. s32 e[3]={0 , 0 , 0};
  74. //s32 e_flag[150]={0};
  75. u8 e_flag_sum;
  76. s16 SteeringEngine_e ;

  77. extern float Motor_Kp;
  78. extern float Motor_Ki;
  79. extern float Motor_Kd;
  80. s16 e_n[3]={0 , 0 , 0};
  81. s16 e_l[3]={0 , 0 , 0};
  82. s16 e_r[3]={0 , 0 , 0};


  83. u16 SteeringEngine= 120;

  84. float tan_a;
  85. u8 W_flag;
  86. u8 L_flag;
  87. u8 R_flag;


  88. void main()
  89. {
  90.     u8 i ,n=0 ;
  91.    int sign(),abs();
  92. // u8 Pixel_pt[128];  

  93.    
  94.    //u8 send_data_cnt = 0;   
  95.   DisableInterrupts;                             //禁止總中斷
  96.    
  97.   /*********************************************************
  98.   初始化程序
  99.   *********************************************************/
  100.    //自行添加代碼

  101.    uart_init (UART3, 115200);                      //初始化UART3,輸出腳PTC17,輸入腳PTC16,串口頻率 115200

  102.   //  adc_init(ADC1, AD6a) ;
  103.    
  104.    gpio_init (PORTB,4, GPI_UP,1);
  105.    gpio_init (PORTB,5, GPI_UP,1);
  106.    gpio_init (PORTB,6, GPI_UP,1);                      //PORTB4、5、6連接撥碼開關
  107.   
  108.   // pit_init_ms(PIT0, 5);                                    //初始化PIT0,定時時間為: 5ms
  109.    pit_init(PIT1, 10000);                                   //初始化PIT1,定時時間為: 0.2ms
  110.    
  111.    CCD_init1() ;             //CCD傳感器初始化

  112.    
  113.    FTM_PWM_init(FTM0, CH0, 10000, 0);               //電機PTC1
  114.    FTM_PWM_init(FTM0, CH1, 10000, 0);               //電機PTC2
  115.    FTM_PWM_init(FTM0, CH2, 10000, 0);               //電機PTC3
  116.    FTM_PWM_init(FTM0, CH3, 10000, 0);               //電機PTC4
  117.    
  118.    gpio_init (PORTA,17,GPI,1);                     //編碼器正反轉狀態
  119.    gpio_init (PORTA,19,GPI,1);                     //編碼器正反轉狀態
  120.    gpio_Interrupt_init(PORTA,8, GPI_DOWN, RING) ;         
  121.    gpio_Interrupt_init(PORTA,9, GPI_DOWN, RING) ;
  122.    
  123.    FTM_PWM_init(FTM2,CH0,100,120);        //舵機占空比初始化 PTA10
  124.    
  125.    /*****撥碼開關模式選擇*****/
  126.    switch_init();

  127.    EnableInterrupts;                                            //開總中斷  
  128.    
  129.    /******************************************
  130.     執行程序
  131.     ******************************************/
  132.     while(1)
  133.     {
  134.       if(TIME1flag_20ms == 1)
  135.       {
  136.         TIME1flag_20ms = 0 ;
  137.      //   uart_putchar(UART0,0xff) ;
  138.         /* Sampling CCD data */
  139.         ImageCapture(Pixel);
  140.         /* Send data to CCDView every 100ms */
  141.         /************閾值確定*******************/
  142.         
  143.         FAVAULE_max= 0;
  144.         FAVAULE_min= 254;
  145.         for(i=5;i<123;i++)
  146.         {
  147.           if(Pixel[i]>254) {Pixel[i]=254;}    //去反光點
  148.           if(Pixel[i]<FAVAULE_min){FAVAULE_min=Pixel[i];}
  149.           if(Pixel[i]>FAVAULE_max){FAVAULE_max=Pixel[i];}
  150.         }
  151.        if(FAVAULE_max-FAVAULE_min > 80)
  152.              FAVAULE=(FAVAULE_min+FAVAULE_max)>>1;
  153. //   FAVAULE=(FAVAULE_min+FAVAULE_max)/2;
  154.       
  155.        /********二值化,并進行白點計算***********/
  156.     /* for(i=0; i<128; i++)
  157.         {
  158.           if(Pixel[i]>=FAVAULE)
  159.           {
  160.             Pixel_pt[i]=254;
  161.            bai_dian_sum+=i;
  162.            bai_dian_num++;
  163.           }else
  164.             Pixel_pt[i]=0;
  165.         }      
  166.      */
  167.         /* Send data to CCDView every 100ms發送數據 */\
  168.       // SendImageData(Pixel);// _pt);
  169.         
  170.         
  171.    
  172.    
  173.         
  174.        /**********
  175.         計算黑線位置
  176.         **********/  
  177.         bai_dian_sum=0;
  178.         bai_dian_num=0;
  179.         bai_dian_num_l=0;
  180.         bai_dian_num_r=0;
  181.         hei_dian_num_l=0;
  182.         hei_dian_num_r=0;
  183.         for(i=5;i<64;i++)
  184.         {
  185.           if(Pixel[i]>FAVAULE)
  186.           {
  187.           bai_dian_sum+=i;
  188.           bai_dian_num_l++;
  189.           }else{
  190.           hei_dian_num_l++;
  191.           }
  192.         }
  193.         for(i=64;i<123;i++)
  194.         {
  195.           if(Pixel[i]>FAVAULE)
  196.           {
  197.           bai_dian_sum+=i;
  198.           bai_dian_num_r++;
  199.           }else{
  200.           hei_dian_num_r++;
  201.           }
  202.         }
  203.         bai_dian_num=bai_dian_num_l+bai_dian_num_r;
  204.        if(bai_dian_num < 96)
  205.        {
  206.         if(bai_dian_num_l>bai_dian_num_r)
  207.         {
  208.           L_flag=1;
  209.           R_flag=0;
  210.         }
  211.          if(bai_dian_num_l<bai_dian_num_r)
  212.         {
  213.           L_flag=0;
  214.           R_flag=1;
  215.         }
  216.        }
  217.        /*
  218.         if(bai_dian_num > 96)   //十字路口處理
  219.         {        
  220.           Array_Shift( e ,3 );
  221.           e[2] = hei_dian_num_l-hei_dian_num_r;


  222. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

完整資料打包下載:
2016程序設計12.rar (10.79 MB, 下載次數: 213)


評分

參與人數 1黑幣 +5 收起 理由
LQL-LQL + 5 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:1 發表于 2017-5-18 03:00 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

板凳
ID:262613 發表于 2018-5-29 00:52 | 只看該作者
好資料,51黑精彩!!!
回復

使用道具 舉報

地板
ID:378747 發表于 2018-7-24 23:44 | 只看該作者

好資料,51黑精彩!!!
回復

使用道具 舉報

5#
ID:378747 發表于 2018-7-24 23:44 | 只看該作者
好資料,51黑精彩!!!
回復

使用道具 舉報

6#
ID:343556 發表于 2018-10-7 23:28 來自手機 | 只看該作者
很好的資料,正需要
回復

使用道具 舉報

7#
ID:411857 發表于 2018-10-18 18:38 | 只看該作者
很好的資料 ,很有參考價值
回復

使用道具 舉報

8#
ID:338175 發表于 2019-3-10 17:50 | 只看該作者
謝謝啦,準備學習哈哈哈
回復

使用道具 舉報

9#
ID:378347 發表于 2019-7-22 16:51 | 只看該作者
好評,好資料!!!!!
回復

使用道具 舉報

10#
ID:636560 發表于 2019-11-6 10:45 | 只看該作者
好精彩,謝謝樓主
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 理论片87福利理论电影 | 91精品国产综合久久久久 | 密桃av| 在线观看免费av网 | 波波电影院一区二区三区 | 精品国产视频在线观看 | 午夜视频在线播放 | 欧美日韩亚洲视频 | 亚洲最大的黄色网址 | 天天射美女 | 神马久久久久久久久久 | 高清人人天天夜夜曰狠狠狠狠 | 久久激情视频 | 国产精品 亚洲一区 | 亚洲视频三区 | 激情五月婷婷在线 | 欧美激情 一区 | 成人在线免费观看 | 久久国产精品一区二区三区 | 免费视频久久 | 免费一区在线观看 | 91免费看片 | 免费特黄视频 | 在线欧美日韩 | 久久久久久久综合 | 国产精品69久久久久水密桃 | 天堂网中文字幕在线观看 | 国产精品国产a | 夜久久 | 色婷婷一区二区三区四区 | 男人的天堂avav | 高清人人天天夜夜曰狠狠狠狠 | 91福利在线观看 | 国内精品99| 午夜影院在线免费观看视频 | 国产亚洲精品久久午夜玫瑰园 | 日韩成人免费av | 久久久久久久97 | 男人天堂国产 | 亚洲精品视频网站在线观看 | 成人一区二区在线 |