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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32平衡小車代碼 可以直接用

[復制鏈接]
跳轉到指定樓層
樓主
ID:290582 發表于 2018-3-11 23:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
在其他網站找到的一份可以直接用的平衡車代碼,大家可以參考一下

單片機源程序如下:
  1. /**
  2.   ******************************************************************************
  3.   * File Name          : main.c
  4.   * Description        : Main program body
  5.   ******************************************************************************
  6.   *
  7.   * COPYRIGHT(c) 2017 STMicroelectronics
  8.   *
  9.   * Redistribution and use in source and binary forms, with or without modification,
  10.   * are permitted provided that the following conditions are met:
  11.   *   1. Redistributions of source code must retain the above copyright notice,
  12.   *      this list of conditions and the following disclaimer.
  13.   *   2. Redistributions in binary form must reproduce the above copyright notice,
  14.   *      this list of conditions and the following disclaimer in the documentation
  15.   *      and/or other materials provided with the distribution.
  16.   *   3. Neither the name of STMicroelectronics nor the names of its contributors
  17.   *      may be used to endorse or promote products derived from this software
  18.   *      without specific prior written permission.
  19.   *
  20.   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  21.   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22.   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  23.   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  24.   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  25.   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  26.   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  27.   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  28.   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  29.   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  30.   *
  31.   ******************************************************************************
  32.   */
  33. /* Includes ------------------------------------------------------------------*/
  34. #include "main.h"
  35. #include "stm32f1xx_hal.h"
  36. #include "i2c.h"
  37. #include "spi.h"
  38. #include "tim.h"
  39. #include "usart.h"
  40. #include "gpio.h"

  41. /* USER CODE BEGIN Includes */
  42. #include "math.h"
  43. #include "attitude_pid.h"
  44. #include "MPU9250.h"
  45. #include "showwave.h"
  46. #include "dot_matrix.h"
  47. #include "attitude_pid.h"
  48. #include "moto_ctrl.h"
  49. /* USER CODE END Includes */

  50. /* Private variables ---------------------------------------------------------*/

  51. /* USER CODE BEGIN PV */
  52. /* Private variables ---------------------------------------------------------*/
  53. uint8_t g_count = 0;
  54. extern uint8_t g_sys_mode  ;
  55. extern mpu9250_t g_mpu9250 ;
  56. extern TIM_HandleTypeDef htim3;
  57. extern TIM_HandleTypeDef htim8;
  58. extern float Left_Motor_Control_K;
  59. extern float Right_Motor_Control_K;
  60. //static float Kp = 0.95;static float Ki = 0.04;static float Kd = 0.08;static float SetOff = 9 ;
  61. //static float Kp = 0.95;  static float Ki = 0.04;static float Kd = 0.05;static float SetOff = 3;
  62. static float Kp,Kd,Ki,SetOff;
  63. /* USER CODE END PV */

  64. /* Private function prototypes -----------------------------------------------*/
  65. void SystemClock_Config(void);
  66. void Error_Handler(void);

  67. /* USER CODE BEGIN PFP */
  68. /* Private function prototypes -----------------------------------------------*/

  69. /* USER CODE END PFP */

  70. /* USER CODE BEGIN 0 */

  71. /* USER CODE END 0 */

  72. int main(void)
  73. {

  74.   /* USER CODE BEGIN 1 */
  75.   uint16_t i = 0;

  76.   /* USER CODE END 1 */

  77.   /* MCU Configuration----------------------------------------------------------*/

  78.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  79.   HAL_Init();

  80.   /* Configure the system clock */
  81.   SystemClock_Config();

  82.   /* Initialize all configured peripherals */
  83.   MX_GPIO_Init();
  84.   MX_USART1_UART_Init();
  85.   MX_I2C1_Init();
  86.   MX_TIM8_Init();
  87.   MX_TIM3_Init();
  88.   MX_SPI3_Init();
  89.   MX_USART2_UART_Init();
  90.   MX_USART3_UART_Init();

  91.   /* USER CODE BEGIN 2 */
  92.         Motor_Stop();
  93.         dot_matrix_init() ;
  94.         InitSensor();
  95.         HAL_TIM_Base_Start_IT(&htim3);
  96. //        HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_1);
  97. //        HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_2);

  98.   /* USER CODE END 2 */

  99.   /* Infinite loop */
  100.   /* USER CODE BEGIN WHILE */
  101.   while (1)
  102.   {
  103.   /* USER CODE END WHILE */

  104.   /* USER CODE BEGIN 3 */
  105.                
  106.                 ReadUserButton();
  107.                 if ( g_sys_mode == 0 ) {        //SetOff = 9 ;       
  108.                 }
  109.                 else if ( g_sys_mode == 1 ) {  //SetOff = 0;
  110.                 }
  111.                 else if ( g_sys_mode == 2 ) {
  112.     }

  113.                 if(i++>200)
  114.                 {                       
  115.                         i = 0;
  116.                         HAL_GPIO_TogglePin(LED_Y_GPIO_Port, LED_Y_Pin);
  117.                         HAL_GPIO_TogglePin(LED_G_GPIO_Port, LED_G_Pin);
  118.                 }
  119.   }
  120.   /* USER CODE END 3 */

  121. }

  122. /** System Clock Configuration
  123. */
  124. void SystemClock_Config(void)
  125. {

  126.   RCC_OscInitTypeDef RCC_OscInitStruct;
  127.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  128.     /**Initializes the CPU, AHB and APB busses clocks
  129.     */
  130.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  131.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  132.   RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  133.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  134.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  135.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  136.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  137.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  138.   {
  139.     Error_Handler();
  140.   }

  141.     /**Initializes the CPU, AHB and APB busses clocks
  142.     */
  143.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  144.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  145.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  146.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  147.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  148.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  149.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  150.   {
  151.     Error_Handler();
  152.   }

  153.     /**Configure the Systick interrupt time
  154.     */
  155.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  156.     /**Configure the Systick
  157.     */
  158.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  159.   /* SysTick_IRQn interrupt configuration */
  160.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  161. }

  162. /* USER CODE BEGIN 4 */

  163. /* USER CODE END 4 */

  164. /**
  165.   * @brief  Period elapsed callback in non blocking mode
  166.   * @note   This function is called  when TIM6 interrupt took place, inside
  167.   * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
  168.   * a global variable "uwTick" used as application time base.
  169.   * @param  htim : TIM handle
  170.   * @retval None
  171.   */
  172. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  173. {
  174. /* USER CODE BEGIN Callback 0 */
  175.         static int count = 0 ;
  176.         if (htim->Instance == htim3.Instance)
  177.         {
  178.                 count ++ ;
  179.                 if (count < 1000 )
  180.                     {Kp = 0.95 ; Ki = 0.04 ; Kd = 0.05 ; SetOff = 3 ; Left_Motor_Control_K = 1;
  181.          Right_Motor_Control_K = 1;}
  182.                 else if ( count < 2000 )
  183.                             {Kp = 0.95 ; Ki = 0.04 ; Kd = 0.08 ; SetOff = 9 ;Left_Motor_Control_K = 1;
  184.             Right_Motor_Control_K = 1;}
  185.                                          else if (count < 2500 )
  186.                                                  {Kp = 0.95 ; Ki = 0.04 ; Kd = 0.05 ; SetOff = 3 ;Left_Motor_Control_K = 1;
  187.               Right_Motor_Control_K = 1;}
  188.                                                  else if (count < 3000 )
  189.                                                          {Kp = 0.95 ; Ki = 0.04 ; Kd = 0.08 ; SetOff = 9 ;Left_Motor_Control_K = 0.5;
  190.                  Right_Motor_Control_K = 1.2;}
  191.                                                          else if (count < 3500 )
  192.                                                                  {Kp = 0.95 ; Ki = 0.04 ; Kd = 0.05 ; SetOff = 3 ; Left_Motor_Control_K = 1;
  193.                   Right_Motor_Control_K = 1 ;}
  194.                                                                          else if (count < 4000 )
  195.                                                                                  {Kp = 0.95 ; Ki = 0.04 ; Kd = 0.08 ; SetOff = 9 ;Left_Motor_Control_K = 1.2;
  196.                         Right_Motor_Control_K = 0.5;}
  197.                                                                                  else if ( count < 4500 )
  198.                                                                                          {Kp = 0.95 ; Ki = 0.04 ; Kd = 0.05 ; SetOff = 3 ; Left_Motor_Control_K = 1;
  199.                          Right_Motor_Control_K = 1 ;}
  200.                                                                                          else if ( count < 5000 )
  201.                                                                                                  {Kp = 0.95 ; Ki = 0.04 ; Kd = 0.08 ; SetOff = 9 ;Left_Motor_Control_K = 0;
  202.                             Right_Motor_Control_K = 1;}
  203.                                                                                                  else Motor_Stop();                                                                                                                                                                                                    
  204.     Get_Accel_Gyro() ;
  205. //                Kalman_Filter( g_mpu9250.accel_y , g_mpu9250.gyro_x );
  206.     calculate_angle() ;
  207.                 PID(Kp,Kd,Ki,SetOff);
  208.                 Set_Motor_Pwm() ;
  209.                
  210. /*
  211.                 Angle_Calculate();
  212.                 Angle_Control();
  213.                 Set_Motor_Pwm();       
  214. */
  215.         }
  216. /* USER CODE END Callback 0 */
  217.   if (htim->Instance == TIM6) {
  218.     HAL_IncTick();
  219.   }
  220. /* USER CODE BEGIN Callback 1 */

  221. /* USER CODE END Callback 1 */
  222. }

  223. /**
  224.   * @brief  This function is executed in case of error occurrence.
  225.   * @param  None
  226.   * @retval None
  227.   */
  228. void Error_Handler(void)
  229. {
  230.   /* USER CODE BEGIN Error_Handler */
  231.   /* User can add his own implementation to report the HAL error return state */
  232.   while(1)
  233.   {
  234.   }
  235.   /* USER CODE END Error_Handler */
  236. }

  237. #ifdef USE_FULL_ASSERT

  238. /**
  239.    * @brief Reports the name of the source file and the source line number
  240.    * where the assert_param error has occurred.
  241.    * @param file: pointer to the source file name
  242.    * @param line: assert_param error line source number
  243.    * @retval None
  244.    */
  245. void assert_failed(uint8_t* file, uint32_t line)
  246. {
  247.   /* USER CODE BEGIN 6 */
  248.   /* User can add his own implementation to report the file name and line number,
  249.     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  250.   /* USER CODE END 6 */

  251. }

  252. #endif

  253. /**
  254.   * @}
  255.   */

  256. /**
  257.   * @}
  258. */

  259. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
復制代碼

所有資料51hei提供下載:
陳老板終極版平衡車代碼.rar (3.49 MB, 下載次數: 46)


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人一区二区三区 | 亚洲欧美日韩在线 | 亚洲大片| 午夜视频在线免费观看 | 日本一区二区高清不卡 | 亚洲成av人影片在线观看 | 亚洲免费观看视频 | 玖草资源 | 在线观看av中文字幕 | 一区二区三区四区免费在线观看 | 日韩在线免费视频 | 久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区 | 天天躁日日躁狠狠的躁天龙影院 | 午夜精品久久久久99蜜 | 在线中文av| 成人精品一区二区三区中文字幕 | 日本三级网站在线观看 | 成年网站在线观看 | 五月婷婷激情网 | 国产精品久久久久久久久久久免费看 | 久久蜜桃av一区二区天堂 | 久久久www成人免费无遮挡大片 | 综合五月 | 欧美精品二区三区 | 欧美区日韩区 | 欧美99久久精品乱码影视 | 黄色免费在线观看 | 久久久久国产一区二区三区 | 国产成人高清 | 手机日韩| 欧美精品日韩 | 亚洲欧美综合 | 亚洲综合视频 | 午夜免费| 日韩精品极品视频在线观看免费 | 国产精品a久久久久 | 九九久久国产 | 日本一区二区在线视频 | 久久久精彩视频 | 日韩免费高清视频 | 国产乱码高清区二区三区在线 |