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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

有關(guān)自平衡車的STM32代碼

[復(fù)制鏈接]
ID:385079 發(fā)表于 2018-8-28 21:47 | 顯示全部樓層 |閱讀模式
本人在大二期間做的平衡車項(xiàng)目有關(guān)的程序,大家可以參考一下

stm32單片機(jī)源碼:
  1. /******************** (C) COPYRIGHT 2014 POWSOS Team **************************
  2. * 文件名  :main.c
  3. * 描述    :     
  4. * 實(shí)驗(yàn)平臺(tái):STM32F103RBT6
  5. * 庫(kù)版本  :ST3.5.0
  6. * 作者    :  Powsos_Team
  7. * 版本    :V2.0
  8. * 日期    :2014.8.23
  9. * 修訂歷史:V2.0
  10. ******************************************************************************/

  11. #include "stm32f10x.h"
  12. #include "iic.h"
  13. #include "timer.h"
  14. #include "usart.h"
  15. #include "mpu6050.h"
  16. #include "filter.h"
  17. #include "calculate.h"
  18. #include "gpio.h"
  19. #include "time_test.h"
  20. #include "hc_sr04.h"
  21. #include "delay.h"
  22. #include <stdio.h>
  23. #include <math.h>


  24. //#define Debug  

  25. #define GX_OFFSET 0x01
  26. #define AX_OFFSET 0x01
  27. #define AY_OFFSET 0x01
  28. #define AZ_OFFSET 0x01


  29. #define duoji_offset  120

  30. extern u8  duoji_flag;
  31. extern u8 duoji_cnt;
  32. extern u16 time;
  33. extern u8 duoji_pwm;

  34. u8 hcsr04_test_flag = 0;
  35. u8 receive_data;
  36. u8 flg_get_senor_data;
  37. u8 out[35]  ={0x5f, 0x60, 0};
  38. u8 Duoji_direction = 1;  /*1,前方,2:左邊   3:右邊,舵機(jī)*/
  39. u8 Move_direcetion = 1;  /*1靜止  2,前方, 3,后退 4:左邊   5:右邊 小車運(yùn)行方向*/
  40. u16 distance =0 ;
  41. int  pulsewidth;
  42. float angle, angle_dot, f_angle, f_angle_dot;
  43. s16 temp;
  44. s16 gx, gy, gz, ax ,ay, az, temperature;

  45. #define FILTER_COUNT  16
  46. s16 gx_buf[FILTER_COUNT], ax_buf[FILTER_COUNT], ay_buf[FILTER_COUNT],az_buf[FILTER_COUNT];
  47. /******************************************************************************/
  48. void delay(u32 count)
  49. {
  50.   for(; count != 0; count--);
  51. }
  52. /*************************************************

  53. 名稱:void acc_filter(void)
  54. 功能:加速度計(jì)數(shù)據(jù)濾波
  55. 輸入?yún)?shù):據(jù)濾波后的數(shù)據(jù)
  56. 輸出參數(shù):無
  57. 返回值:  無
  58. **************************************************/
  59. void acc_filter(void)
  60. {
  61.   u8 i;
  62.   s32 ax_sum = 0, ay_sum = 0, az_sum = 0;

  63.   for(i = 1 ; i < FILTER_COUNT; i++)
  64.   {
  65.     ax_buf[i - 1] = ax_buf[i];
  66.           ay_buf[i - 1] = ay_buf[i];
  67.           az_buf[i - 1] = az_buf[i];
  68.   }

  69.   ax_buf[FILTER_COUNT - 1] = ax;
  70.   ay_buf[FILTER_COUNT - 1] = ay;
  71.   az_buf[FILTER_COUNT - 1] = az;

  72.   for(i = 0 ; i < FILTER_COUNT; i++)
  73.   {
  74.     ax_sum += ax_buf[i];
  75.           ay_sum += ay_buf[i];
  76.           az_sum += az_buf[i];
  77.   }

  78.     ax = (s16)(ax_sum / FILTER_COUNT);
  79.     ay = (s16)(ay_sum / FILTER_COUNT);
  80.     az = (s16)(az_sum / FILTER_COUNT);
  81. }

  82. /* I/O口模擬輸出PWM控制舵機(jī),50hz */
  83. void servopulse(int myangle)//定義一個(gè)脈沖函數(shù)
  84. {
  85.          // EA = 0;
  86.         //  pulsewidth = (((myangle+duoji_offset)*25)+500)/1000;;// 舵機(jī)中心值可能會(huì)偏,修改20,做調(diào)整
  87.           pulsewidth =myangle;

  88. }

  89. /*****************************************************************************/
  90. int main(void)
  91. {
  92.           SystemInit();
  93.           delay_init(72);
  94.           gpio_init();       
  95.           delay(0x80000);
  96.     usart_init();                                          
  97.     iic_init();
  98.     timer_init();
  99.     TIM1_Configuration();
  100.     HCSR04_Init();
  101.     motor_init();
  102.           mpu6050_init();
  103.           STOP_TIME;
  104.           duoji_flag =1;
  105.           duoji_cnt = 0;
  106.           servopulse(3);/*上電將舵機(jī)放至中間*/
  107.          while (1)
  108.         {
  109.             if(flg_get_senor_data)
  110.             {
  111.               flg_get_senor_data = 0;
  112.               mpu6050_get_data(&gx, &gy, &gz, &ax, &ay , &az, &temperature);
  113.                     acc_filter();       

  114.                     gx-=  GX_OFFSET;
  115.                     ax -= AX_OFFSET;
  116.                     ay -=        AY_OFFSET;
  117.                     az -= AZ_OFFSET;

  118.               angle_dot = gx * GYRO_SCALE;  //+-2000  0.060975 °/LSB   //陀螺儀
  119.               angle = atan(ay / sqrt(ax * ax + az * az ));
  120.              
  121.                angle = angle * 57.295780;    //180/pi


  122.                    kalman_filter(angle, angle_dot, &f_angle, &f_angle_dot);//     加速度計(jì)計(jì)算的角度, 陀螺儀角速度 , 融合后的角度, 融合后的角速度
  123.                    receive_parameter(receive_data);

  124.                    pid(f_angle, f_angle_dot);

  125. #ifdef  Debug
  126.                               temp = (s16)(f_angle * 100);
  127.              
  128.                                  out[2] = (u8)(gx >> 8);
  129.                      out[3] = (u8)(gx);
  130.                                  out[4] = (u8)(gy >> 8);
  131.                                  out[5] = (u8)(gy);
  132.                                  out[6] = (u8)(gz >> 8);
  133.                                  out[7] = (u8)(gz);
  134.                                  out[8] = (u8)(ax >> 8);
  135.                                  out[9] = (u8)(ax);
  136.                                  out[10] = (u8)(ay >> 8);
  137.                                  out[11] = (u8)(ay);
  138.                                  out[12] = (u8)(az >> 8);
  139.                                  out[13] = (u8)(az);
  140.                            out[14] = (u8)(temp >> 8);
  141.                                  out[15] = (u8)(temp);

  142.                                  USART_SendStringData(USART1,&out[0],16);

  143. #endif
  144.           
  145.                        
  146.             }  //end if               
  147.        
  148.                
  149.     if(hcsr04_test_flag)
  150.     {
  151.                  hcsr04_test_flag=0;                 
  152.                  measure_distance(receive_data);
  153.                                          
  154.                  switch(Duoji_direction)
  155.                  {
  156.                         case Duoji_Front:        USART_printf(USART2,"Front_distance: %d cm\r\n",distance);break;
  157.                         case Duoji_Left:        USART_printf(USART2,"Left_distance: %d cm\r\n",distance);break;
  158.                         case Duoji_Right:        USART_printf(USART2,"Right_distance: %d cm\r\n",distance);break;
  159.                  }
  160.                  
  161.                  
  162.         }
  163.         #if  0
  164.         /*若前方距離小于100,并且小車行駛方向是往前的,此時(shí)小車需要停止*/       
  165.         if((distance<50)&&(Move_direcetion==Move_front))
  166.         {                               
  167.                 receive_data ='s';
  168.         }
  169.                
  170.         #endif

  171.   }  
  172.        
  173. }

  174. /*****************END OF FILE************************************************************/
復(fù)制代碼

所有資料51hei提供下載:
自平衡車程序.rar (580.86 KB, 下載次數(shù): 11)


回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2018-8-29 03:13 | 顯示全部樓層
補(bǔ)全原理圖+詳細(xì)說明一下即可獲得100+黑幣
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品美女视频 | 亚洲一区二区三区免费视频 | 成人永久免费视频 | 精品一区二区在线看 | 亚洲www.| 亚洲色图50p | 91在线观看网址 | 中国三级黄色录像 | 国产资源视频 | 国产中文| 久久久久久久久久久久久久av | 亚洲精品在线免费观看视频 | 久久国产精品色av免费观看 | 成人久久18免费网站麻豆 | 成人a在线观看 | 乱一性一乱一交一视频a∨ 色爱av | 国产激情精品一区二区三区 | 成人福利在线视频 | 日韩一区欧美一区 | 不卡一区二区三区四区 | 久久成人国产精品 | 中文字幕高清免费日韩视频在线 | 激情网站在线观看 | av高清| 国产高清视频在线观看 | 欧美国产视频 | 午夜视频在线免费观看 | 亚洲国产高清在线观看 | 久久久久久国产免费视网址 | 国产一在线 | 四虎成人精品永久免费av九九 | 午夜精品一区二区三区免费视频 | 久草精品视频 | 中文在线a在线 | 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 | 亚洲一区中文字幕 | 色婷婷精品国产一区二区三区 | 99热这里有精品 | 在线看片网站 | 九九伊人sl水蜜桃色推荐 | 久久久久久成人 |