日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于stm32的自平衡小车

發布時間:2024/1/1 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于stm32的自平衡小车 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 引言
  • 1、系統概述
    • 1.1、設計任務
    • 1.2、設計要求
  • 2、方案設計與論證
    • 2.1、芯片選擇方案
    • 2.2 、系統概述
    • 2.3、設計要求
    • 2.4、系統總體設計
    • 2.5、各功能模塊程序實現原理分析
      • 2.5.1、MPU6050模塊的介紹
      • 2.5.2、OLED12864顯示屏
      • 2.5.3、LN298N電機驅動塊
  • 3、單片機的選擇及硬件設計介紹
    • 3.1、單片機選擇
    • 3.2、電路設計
  • 4、系統程序
    • 4.1、主程序
      • 4.1.1主程序設計如下
      • 4.1.2主程序流程圖
    • 4.2、主程序代碼
    • 4.3、模塊程序代碼
  • 5、系統調試及分析
    • 5.1、系統調試
    • 5.2、調試現象及分析
    • 5.3、測試結果
  • 6、參考借鑒內容

引言

1、系統概述

1.1、設計任務

利用stm32做一輛自平衡小車

1.2、設計要求

利用IIC和MPU6050、OLED12864進行通信,使用pid算法到自平衡,熟練掌握PID算法

2、方案設計與論證

2.1、芯片選擇方案

芯片可以選擇stm32和arduino,基于學習目的,使用stm32

stm32是一個低功耗,高性能32位單片機,片內含4k Bytes ISP(In-system programmable)的可反復擦寫1000次的Flash只讀程序存儲器。主要性能有:與MCS-51單片機產品兼容、全靜態操作:0Hz~33Hz、 三級加密程序存儲器、32個可編程I/O口線、三個16位定時器/計數器、八個中斷源、全雙工UART串行通道、掉電后中斷可喚醒、看門狗定時器、雙數據指針、掉電標識符、易編程。

2.2 、系統概述

本設計是一個具有自動調節平衡功能的兩輪小車。由MPU6050、12864OLED顯示屏、電機驅動塊、電機、供電電路等模塊組成。本項目研究一種使用單片機PID算法的自平衡方案。這種方案后續可以制作成為自平衡代步工具,自平衡自行車等等。

2.3、設計要求

  • IIC通信
  • PID算法的調節,要求抖動不得超過1cm’
  • 小車可以正常達到自平衡
  • oled顯示偏航/俯仰/滾動角的數據
  • 2.4、系統總體設計

    利用stm32和MPU6050進行通信,實時獲取mpu6050發送過來的數據,并且再oled上面顯示,利用mpu6050的數據,結合PID算法,控制電機驅動塊去控制電機的正方轉,以達到自平衡的目的。

    2.5、各功能模塊程序實現原理分析

    2.5.1、MPU6050模塊的介紹

    MPU6050內部整合了三軸MEMS陀螺儀、三軸MEMS加速度計以及一個可擴展的數字運動處理器DMP(Digital Motion Processor),而且還可以連接一個第三方數字傳感器(如磁力計),這樣的話,就可以通過IIC接口輸出一個9軸信號(鏈接第三方數字傳感器才可以輸出九軸信號,否則只有六軸信號)。更加方便的是,有了DMP,可以結合InvenSense公司提供的運動處理資料庫,實現姿態解算。通過自帶的DMP,可以通過IIC接口輸出9軸融合演算的數據,大大降低了運動處理運算對操作系統的負荷,同時也降低了開發難度。其實,簡單一句話說,陀螺儀就是測角速度的,加速度傳感器就是測角加速度的,二者數據通過算法就可以得到PITCH、YAW、ROLL角了。

    陀螺儀知識點介紹:

    陀螺儀是用高速回轉體的動量矩敏感殼體相對慣性空間繞正交于自轉軸的一個或二個軸的角運動檢測裝置。利用其他原理制成的角運動檢測裝置起同樣功能的也稱陀螺儀。
    從力學的觀點近似的分析陀螺的運動時,可以把它看成是一個剛體,剛體上有一個萬向支點,而陀螺可以繞著這個支點作三個自由度的轉動,所以陀螺的運動是屬于剛體繞一個定點的轉動運動。更確切地說,一個繞對稱鈾高速旋轉的飛輪轉子叫陀螺。將陀螺安裝在框架裝置上,使陀螺的自轉軸有角轉動的自由度,這種裝置的總體叫做陀螺儀。
    陀螺儀的原理就是,一個旋轉物體的旋轉軸所指的方向在不受外力影響時,是不會改變的。人們根據這個道理,用它來保持方向,制造出來的東西就叫陀螺儀。我們騎自行車其實也是利用了這個原理。輪子轉得越快越不容易倒,因為車軸有一股保持水平的力量。陀螺儀在工作時要給它一個力,使它快速旋轉起來,一般能達到每分鐘幾十萬轉,可以工作很長時間。然后用多種方法讀取軸所指示的方向,并自動將數據信號傳給控制系統。

    2.5.2、OLED12864顯示屏

    OLED 屏幕作為一種新型的顯示技術,其自身可以發光,亮度,對比度高,功耗低,在當下備受追捧。而在我們正常的顯示調整參數過程中,我們越來越多的使用這種屏幕。我們使用的一般是分辨率為 128×64 ,屏幕尺寸為 0.96 寸。由于其較小的尺寸和比較高的分辨率,讓它有著很好的顯示效果和便攜性。

    2.5.3、LN298N電機驅動塊

    L298N是專用驅動集成電路,屬于H橋集成電路,與L293D的差別是起輸出電流增大,功率增強。其輸出電流為2A,最高電流4A,最高工作電壓50V,可以驅動感性負載,如大功率直流電機,步進電機,電磁閥等等,特別是其輸入端可以與單片機直接相連,從而很方便地受單片機控制。當驅動直流電機時,可以直接控制步進電機,并可以實現電機的正轉和反轉,實現此功能只需要改變輸入端的邏輯電平。為了避免電機對單片機的干擾,本模塊加入光耦,進行光電隔離,從而使系統能夠穩定可靠的工作。

    3、單片機的選擇及硬件設計介紹

    3.1、單片機選擇

    出于實驗目的選擇STM32F103ZET6,性能足,完善功能強大,管腳也夠,后續完善功能將改為STM32F103C8T6。

    3.2、電路設計



    4、系統程序

    4.1、主程序

    4.1.1主程序設計如下

    由mpu6050采集角度信息,并發送到STM32上,STM32進行PID的調節,反饋給電機驅動塊,電機驅動塊調整電機轉動方向和速度,以達到調整角度的目的,電機驅動塊和mpu6050閉環。

    4.1.2主程序流程圖

    4.2、主程序代碼

    #include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "key.h"#include "mpu6050.h" #include "inv_mpu.h" #include "inv_mpu_dmp_motion_driver.h" #include "oled.h" #include "stdio.h" #include <string.h>#include "pid.h" #include "motor.h"extern int Moto1,Moto2; float pitch,roll,yaw; //歐拉角short aacx,aacy,aacz; //加速度傳感器原始數據short gyrox,gyroy,gyroz; //陀螺儀原始數據int temp1; //溫度u8 stop_flag=0; //小車停止標志位void calculation(void);//void pid_pingheng();//串口1發送1個字符 //c:要發送的字符 void usart1_send_char(u8 c) { while(__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_TC)==RESET){};//循環發送,直到發送完畢 HAL_UART_Transmit(&UART1_Handler,&c,1,1000); } int main(void) { HAL_Init(); //初始化HAL庫 Stm32_Clock_Init(RCC_PLL_MUL9); //設置時鐘,72Mdelay_init(72); //初始化延時函數MiniBalance_PWM_Init(20000-1,72-1); //初始化PWM 72m/72=1m 1m/20000=50hz 1/50hz=0.02sPID_Init();uart_init(115200); //初始化串口 LED_Init(); //初始化LED KEY_Init(); //初始化按鍵MPU_Init(); //初始化MPU6050for(int i=0;i<10;i++){OLED_Init(); delay_ms(20);}OLED_ColorTurn(0);//0正常顯示,1 反色顯示OLED_DisplayTurn(0);//0正常顯示 1 屏幕翻轉顯示if(mpu_dmp_init()!=0) {printf(".");OLED_ShowString(50,20,"wait",12,1);OLED_Refresh(); } if(mpu_dmp_init()!=0) OLED_ShowString(50,20," ",12,1);OLED_ShowString(0,0,"pitch",16,1);OLED_ShowString(0,16,"err",16,1);OLED_ShowString(0,32,"L_err",16,1);OLED_ShowString(0,48,"PID",16,1);// int i=0;while(1){while(mpu_dmp_get_data(&pitch,&roll,&yaw)!=0){ // temp=MPU_Get_Temperature(); //得到溫度值MPU_Get_Accelerometer(&aacx,&aacy,&aacz); //得到加速度傳感器數據MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz); //得到陀螺儀數據//mpu6050_send_data(aacx,aacy,aacz,gyrox,gyroy,gyroz);//用自定義幀發送加速度和陀螺儀原始數據//usart1_report_imu(aacx,aacy,aacz,gyrox,gyroy,gyroz,(int)(roll*100),(int)(pitch*100),(int)(yaw*10));LED0=!LED0;//LED閃爍} // printf("roll:%d pitch:%d yaw:%d \r\n",(int)(roll*100),(int)(pitch*100),(int)(yaw*10));calculation(); //整體計算PID,讀取角度值等等if(pitch<0){OLED_ShowString(70,0,"-",16,1);OLED_ShowNum(90,0,-pitch,2,16,1);} else {OLED_ShowString(70,0," ",16,1);OLED_ShowNum(90,0,pitch,2,16,1);}if(err<0){OLED_ShowString(40,16,"-",16,1);OLED_ShowNum(60,16,-err,5,16,1);} else {OLED_ShowString(40,16," ",16,1);OLED_ShowNum(60,16,err,5,16,1);}if(last_err<0){OLED_ShowString(40,32,"-",16,1);OLED_ShowNum(60,32,-llast_err,5,16,1);} else {OLED_ShowString(40,32," ",16,1);OLED_ShowNum(60,32,llast_err,5,16,1);}if(temp1<0){OLED_ShowString(40,48,"-",16,1);OLED_ShowNum(60,48,-temp1,5,16,1);} else {OLED_ShowString(40,48," ",16,1);OLED_ShowNum(60,48,temp1,5,16,1);} OLED_Refresh();delay_ms(50);} } /************************************************************************** 函數功能:整體計算PID,讀取角度值等等 入口參數:未知 返回 值:無本應該不寫在這,但是因為各種原因只能放這 **************************************************************************/ void calculation(void) { if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0){ pid.Pv = (int)pitch*100; //角度*十倍 // if(Turn_Off(pid.Pv)) stop_flag=1; //檢測是否小車異常,異常就停止 // else stop_flag=0;if(pid.Pv<-3000||pid.Pv>3000){ //===傾角大于40度關閉電機IN1=0; IN2=0;IN3=0;IN4=0;stop_flag=1; }else{stop_flag=0;}Moto1 = balance(pid.Pv) ; //獲得PWM輸出值Moto2 = balance(pid.Pv);temp1 = balance(pid.Pv);Xianfu_Pwm(); //對PWM進行限幅Set_Pwm(Moto1,Moto2); //設置PWM} }/* HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOA,GPIO_PIN_11,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_RESET);delay_ms(1000); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_SET); delay_ms(1000); */

    4.3、模塊程序代碼

    電機驅動塊:

    #include "motor.h"int Moto1,Moto2; //電機PWM變量void Error_Handler(void) {/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */ }/************************************************************************** 函數功能:電機驅動輸出IO初始化 入口參數:無 返回 值:無 **************************************************************************/ void MiniBalance_Motor_Init(void) {GPIO_InitTypeDef GPIO_InitStructure;// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口時鐘__HAL_RCC_GPIOB_CLK_ENABLE(); //使能PB端口時鐘GPIO_InitStructure.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15; //端口配置GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; //推挽輸出GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH; //50MHAL_GPIO_Init(GPIOB, &GPIO_InitStructure); //根據設定參數初始化GPIOB } /************************************************************************** 函數功能:電機驅動PWM輸出IO口初始化 入口參數:無 返回 值:無 **************************************************************************/ TIM_HandleTypeDef htim1; //tim1結構體初始化 void MiniBalance_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; //引腳結構體初始化TIM_OC_InitTypeDef sConfigOC = {0}; //輸出比較結構體初始化MiniBalance_Motor_Init(); __HAL_RCC_GPIOA_CLK_ENABLE(); //使能PA端口時鐘__HAL_RCC_TIM1_CLK_ENABLE(); // 使能TIM1端口時鐘 TIM1 TIM8在APB2//設置該引腳為復用輸出功能,輸出TIM1 CH1 CH4的PWM脈沖波形GPIO_InitStructure.Pin= GPIO_PIN_8|GPIO_PIN_11; //TIM_CH1 //TIM_CH4GPIO_InitStructure.Mode = GPIO_MODE_AF_PP; //復用推挽輸出GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOA, &GPIO_InitStructure); //根據設定參數初始化GPIOAhtim1.Instance = TIM1;htim1.Init.Prescaler = psc; //設置用來作為TIMx時鐘頻率除數的預分頻值 不分頻htim1.Init.Period = arr; //設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值 htim1.Init.ClockDivision = 0; //設置時鐘分割:TDTS = Tck_timhtim1.Init.CounterMode = TIM_COUNTERMODE_UP;//TIM向上計數模式htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; //disable自動重裝載if (HAL_TIM_PWM_Init(&htim1) != HAL_OK){Error_Handler();}if (HAL_TIM_OC_Init(&htim1) != HAL_OK){Error_Handler();}sConfigOC.OCMode = TIM_OCMODE_PWM1; //選擇定時器模式:TIM脈沖寬度調制模式1sConfigOC.Pulse = 0; //設置待裝入捕獲比較寄存器的脈沖值sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;//輸出極性:TIM輸出比較極性高sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; //指定互補輸出極性。sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;/**使能通道1**/if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK){Error_Handler();}/**使能通道2**/if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_4) != HAL_OK){Error_Handler();}sConfigOC.OCMode = TIM_OCMODE_TIMING; //清除模式配置 方便下一個通道使用HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_4);__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 5000);__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_4, 5000);}/************************************************************************** 函數功能:獲得整數絕對值函數 入口參數:整數 返回 值:絕對值 **************************************************************************/ int myabs(int a) { int temp;if(a<0) temp=-a; else temp=a;return temp; } /************************************************************************** 函數功能:最后設置PWM函數,并檢測是否關閉電機 入口參數:無 返回 值:無 **************************************************************************/ void Set_Pwm(int moto1,int moto2) {if(stop_flag==0){if(moto1>0) IN1=1, IN2=0;else IN1=0, IN2=1;PWMA=myabs(moto1);if(moto2>0) IN3=1, IN4=0;else IN3=0, IN4=1;PWMB=myabs(moto2);}} /************************************************************************** 函數功能:PWM限幅函數 入口參數:無 返回 值:無 **************************************************************************/ void Xianfu_Pwm(void) { int Amplitude=10000; //===PWM滿幅是20000 限制在10000if(Moto1 < -Amplitude) Moto1=-Amplitude; if(Moto1 > Amplitude) Moto1=Amplitude; if(Moto2 < -Amplitude) Moto2=-Amplitude; if(Moto2 > Amplitude) Moto2=Amplitude; } /************************************************************************** 函數功能:電機異常關閉函數 入口參數:角度 返回 值:1:關閉,0:不關閉 **************************************************************************/ u8 Turn_Off(signed int angle) {u8 temp=0;if(angle<-300||angle>300){ //===傾角大于40度關閉電機temp=1; //===Flag_Stop置1關閉電機IN1=0; IN2=0;IN3=0;IN4=0;}return temp; }

    PID.C

    #include "pid.h" #include "usart.h" #include "motor.h"PID pid; signed int err; signed int last_err; signed int llast_err; /************************************************************************** 函數功能:PID數據初始化 入口參數:無 返回 值:無 **************************************************************************/ void PID_Init() {/*平衡PID環控制參數初始化*/pid.Sv = 0; pid.Kp = 10;pid.Ki = 0.001; pid.Kd = 0.05; }/************************************************************************** 函數功能:以下三個函數,分別計算各個環的PID值,并返回 入口參數:未知 返回 值:無 **************************************************************************//*小車平衡環部分,微分+比例控制 微分變量為直接讀取的加速度*/ extern short pitch; int leijia; //累加 int balance(float Angle) { int balance;if(stop_flag==0){// Angle=pid.Pv;err=(0-Angle);leijia+=last_err;balance=pid.Kp*last_err+pid.Ki*(leijia)+pid.Kd*(last_err-llast_err);llast_err=last_err;last_err=err;printf("Angle:%.2f balance:%d pid.Kp:%d Bias:%d \r\n",Angle,balance,pid.Kp,err);}return balance; }

    OLED.C是使用中景園的代碼:

    #include "oled.h" #include "stdlib.h" #include "stdint.h" #include "oledfont.h" #include "delay.h"#define OLED_ADDRESS 0x78uint8_t OLED_GRAM[144][8];//反顯函數 void OLED_ColorTurn(uint8_t i) {if(i==0){OLED_WR_Byte(0xA6,OLED_CMD);//正常顯示}if(i==1){OLED_WR_Byte(0xA7,OLED_CMD);//反色顯示} }//屏幕旋轉180度 void OLED_DisplayTurn(uint8_t i) {if(i==0){OLED_WR_Byte(0xC8,OLED_CMD);//正常顯示OLED_WR_Byte(0xA1,OLED_CMD);}if(i==1){OLED_WR_Byte(0xC0,OLED_CMD);//反轉顯示OLED_WR_Byte(0xA0,OLED_CMD);} }//延時 void IIC_delay(void) {uint8_t t=3;while(t--); }//起始信號 void I2C_Start(void) {OLED_SDA_Set();OLED_SCL_Set();IIC_delay();OLED_SDA_Clr();IIC_delay();OLED_SCL_Clr();IIC_delay(); }//結束信號 void I2C_Stop(void) {OLED_SDA_Clr();OLED_SCL_Set();IIC_delay();OLED_SDA_Set(); }//等待信號響應 void I2C_WaitAck(void) //測數據信號的電平 {OLED_SDA_Set();IIC_delay();OLED_SCL_Set();IIC_delay();OLED_SCL_Clr();IIC_delay(); }//寫入一個字節 void Send_Byte(uint8_t dat) {uint8_t i;for(i=0;i<8;i++){if(dat&0x80)//將dat的8位從最高位依次寫入{OLED_SDA_Set();}else{OLED_SDA_Clr();}IIC_delay();OLED_SCL_Set();IIC_delay();OLED_SCL_Clr();//將時鐘信號設置為低電平dat<<=1;} }//發送一個字節 //mode:數據/命令標志 0,表示命令;1,表示數據; void OLED_WR_Byte(uint8_t dat,uint8_t mode) {I2C_Start();Send_Byte(0x78);I2C_WaitAck();if(mode){Send_Byte(0x40);}else{Send_Byte(0x00);}I2C_WaitAck();Send_Byte(dat);I2C_WaitAck();I2C_Stop(); }//開啟OLED顯示 void OLED_DisPlay_On(void) {OLED_WR_Byte(0x8D,OLED_CMD);//電荷泵使能OLED_WR_Byte(0x14,OLED_CMD);//開啟電荷泵OLED_WR_Byte(0xAF,OLED_CMD);//點亮屏幕 }//關閉OLED顯示 void OLED_DisPlay_Off(void) {OLED_WR_Byte(0x8D,OLED_CMD);//電荷泵使能OLED_WR_Byte(0x10,OLED_CMD);//關閉電荷泵OLED_WR_Byte(0xAE,OLED_CMD);//關閉屏幕 }//更新顯存到OLED void OLED_Refresh(void) {uint8_t i,n;for(i=0;i<8;i++){OLED_WR_Byte(0xb0+i,OLED_CMD); //設置行起始地址OLED_WR_Byte(0x00,OLED_CMD); //設置低列起始地址OLED_WR_Byte(0x10,OLED_CMD); //設置高列起始地址I2C_Start();Send_Byte(0x78);I2C_WaitAck();Send_Byte(0x40);I2C_WaitAck();for(n=0;n<128;n++){Send_Byte(OLED_GRAM[n][i]);I2C_WaitAck();}I2C_Stop();} } //清屏函數 void OLED_Clear(void) {uint8_t i,n;for(i=0;i<8;i++){for(n=0;n<128;n++){OLED_GRAM[n][i]=0;//清除所有數據}}OLED_Refresh();//更新顯示 }//畫點 //x:0~127 //y:0~63 //t:1 填充 0,清空 void OLED_DrawPoint(uint8_t x,uint8_t y,uint8_t t) {uint8_t i,m,n;i=y/8;m=y%8;n=1<<m;if(t){OLED_GRAM[x][i]|=n;}else{OLED_GRAM[x][i]=~OLED_GRAM[x][i];OLED_GRAM[x][i]|=n;OLED_GRAM[x][i]=~OLED_GRAM[x][i];} }//畫線 //x1,y1:起點坐標 //x2,y2:結束坐標 void OLED_DrawLine(uint8_t x1,uint8_t y1,uint8_t x2,uint8_t y2,uint8_t mode) {uint16_t t; int xerr=0,yerr=0,delta_x,delta_y,distance;int incx,incy,uRow,uCol;delta_x=x2-x1; //計算坐標增量 delta_y=y2-y1;uRow=x1;//畫線起點坐標uCol=y1;if(delta_x>0)incx=1; //設置單步方向 else if (delta_x==0)incx=0;//垂直線 else {incx=-1;delta_x=-delta_x;}if(delta_y>0)incy=1;else if (delta_y==0)incy=0;//水平線 else {incy=-1;delta_y=-delta_x;}if(delta_x>delta_y)distance=delta_x; //選取基本增量坐標軸 else distance=delta_y;for(t=0;t<distance+1;t++){OLED_DrawPoint(uRow,uCol,mode);//畫點xerr+=delta_x;yerr+=delta_y;if(xerr>distance){xerr-=distance;uRow+=incx;}if(yerr>distance){yerr-=distance;uCol+=incy;}} } //x,y:圓心坐標 //r:圓的半徑 void OLED_DrawCircle(uint8_t x,uint8_t y,uint8_t r) {int a, b,num;a = 0;b = r;while(2 * b * b >= r * r) {OLED_DrawPoint(x + a, y - b,1);OLED_DrawPoint(x - a, y - b,1);OLED_DrawPoint(x - a, y + b,1);OLED_DrawPoint(x + a, y + b,1);OLED_DrawPoint(x + b, y + a,1);OLED_DrawPoint(x + b, y - a,1);OLED_DrawPoint(x - b, y - a,1);OLED_DrawPoint(x - b, y + a,1);a++;num = (a * a + b * b) - r*r;//計算畫的點離圓心的距離if(num > 0){b--;a--;}} }//在指定位置顯示一個字符,包括部分字符 //x:0~127 //y:0~63 //size1:選擇字體 6x8/6x12/8x16/12x24 //mode:0,反色顯示;1,正常顯示 void OLED_ShowChar(uint8_t x,uint8_t y,uint8_t chr,uint8_t size1,uint8_t mode) {uint8_t i,m,temp,size2,chr1;uint8_t x0=x,y0=y;if(size1==8)size2=6;else size2=(size1/8+((size1%8)?1:0))*(size1/2); //得到字體一個字符對應點陣集所占的字節數chr1=chr-' '; //計算偏移后的值for(i=0;i<size2;i++){if(size1==8){temp=asc2_0806[chr1][i];} //調用0806字體else if(size1==12){temp=asc2_1206[chr1][i];} //調用1206字體else if(size1==16){temp=asc2_1608[chr1][i];} //調用1608字體else if(size1==24){temp=asc2_2412[chr1][i];} //調用2412字體else return;for(m=0;m<8;m++){if(temp&0x01)OLED_DrawPoint(x,y,mode);else OLED_DrawPoint(x,y,!mode);temp>>=1;y++;}x++;if((size1!=8)&&((x-x0)==size1/2)){x=x0;y0=y0+8;}y=y0;} }//顯示字符串 //x,y:起點坐標 //size1:字體大小 //*chr:字符串起始地址 //mode:0,反色顯示;1,正常顯示 void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr,uint8_t size1,uint8_t mode) {while((*chr>=' ')&&(*chr<='~'))//判斷是不是非法字符!{OLED_ShowChar(x,y,*chr,size1,mode);if(size1==8)x+=6;else x+=size1/2;chr++;} }//m^n uint32_t OLED_Pow(uint8_t m,uint8_t n) {uint32_t result=1;while(n--){result*=m;}return result; }//顯示數字 //x,y :起點坐標 //num :要顯示的數字 //len :數字的位數 //size:字體大小 //mode:0,反色顯示;1,正常顯示 void OLED_ShowNum(uint8_t x,uint8_t y,uint32_t num,uint8_t len,uint8_t size1,uint8_t mode) {uint8_t t,temp,m=0;if(size1==8)m=2;for(t=0;t<len;t++){temp=(num/OLED_Pow(10,len-t-1))%10;if(temp==0){OLED_ShowChar(x+(size1/2+m)*t,y,'0',size1,mode);}else {OLED_ShowChar(x+(size1/2+m)*t,y,temp+'0',size1,mode);}} }//顯示漢字 //x,y:起點坐標 //num:漢字對應的序號 //mode:0,反色顯示;1,正常顯示 void OLED_ShowChinese(uint8_t x,uint8_t y,uint8_t num,uint8_t size1,uint8_t mode) {uint8_t m,temp;uint8_t x0=x,y0=y;uint16_t i,size3=(size1/8+((size1%8)?1:0))*size1; //得到字體一個字符對應點陣集所占的字節數for(i=0;i<size3;i++){if(size1==16){temp=Hzk1[num][i];}//調用16*16字體else if(size1==24){temp=Hzk2[num][i];}//調用24*24字體else if(size1==32) {temp=Hzk3[num][i];}//調用32*32字體else if(size1==64){temp=Hzk4[num][i];}//調用64*64字體else return;for(m=0;m<8;m++){if(temp&0x01)OLED_DrawPoint(x,y,mode);else OLED_DrawPoint(x,y,!mode);temp>>=1;y++;}x++;if((x-x0)==size1){x=x0;y0=y0+8;}y=y0;} }//num 顯示漢字的個數 //space 每一遍顯示的間隔 //mode:0,反色顯示;1,正常顯示 void OLED_ScrollDisplay(uint8_t num,uint8_t space,uint8_t mode) {uint8_t i,n,t=0,m=0,r;while(1){if(m==0){OLED_ShowChinese(128,24,t,16,mode); //寫入一個漢字保存在OLED_GRAM[][]數組中t++;}if(t==num){for(r=0;r<16*space;r++) //顯示間隔{for(i=1;i<144;i++){for(n=0;n<8;n++){OLED_GRAM[i-1][n]=OLED_GRAM[i][n];}}OLED_Refresh();}t=0;}m++;if(m==16){m=0;}for(i=1;i<144;i++) //實現左移{for(n=0;n<8;n++){OLED_GRAM[i-1][n]=OLED_GRAM[i][n];}}OLED_Refresh();} }//x,y:起點坐標 //sizex,sizey,圖片長寬 //BMP[]:要寫入的圖片數組 //mode:0,反色顯示;1,正常顯示 void OLED_ShowPicture(uint8_t x,uint8_t y,uint8_t sizex,uint8_t sizey,uint8_t BMP[],uint8_t mode) {uint16_t j=0;uint8_t i,n,temp,m;uint8_t x0=x,y0=y;sizey=sizey/8+((sizey%8)?1:0);for(n=0;n<sizey;n++){for(i=0;i<sizex;i++){temp=BMP[j];j++;for(m=0;m<8;m++){if(temp&0x01)OLED_DrawPoint(x,y,mode);else OLED_DrawPoint(x,y,!mode);temp>>=1;y++;}x++;if((x-x0)==sizex){x=x0;y0=y0+8;}y=y0;}} } //OLED的初始化 void OLED_Init(void) { // GPIO_InitTypeDef GPIO_InitStructure; // RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG|RCC_APB2Periph_GPIOD, ENABLE); //使能A端口時鐘 // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //推挽輸出 // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz // GPIO_Init(GPIOG, &GPIO_InitStructure); //初始化GPIOG12 // GPIO_SetBits(GPIOG,GPIO_Pin_12); // // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //推挽輸出 // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz // GPIO_Init(GPIOD, &GPIO_InitStructure); //初始化GPIOD1,5,15 // GPIO_SetBits(GPIOD,GPIO_Pin_5); // // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出 // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz // GPIO_Init(GPIOD, &GPIO_InitStructure); //初始化GPIOD1,5,15 // GPIO_SetBits(GPIOD,GPIO_Pin_4); MX_GPIO_Init(); OLED_RES_Clr();HAL_Delay(200);OLED_RES_Set();OLED_WR_Byte(0xAE,OLED_CMD);//--關閉oled面板OLED_WR_Byte(0x00,OLED_CMD);//---設置低列地址OLED_WR_Byte(0x10,OLED_CMD);//---設置高列地址OLED_WR_Byte(0x40,OLED_CMD);//--設置映射RAM顯示起始線(0x00~0x3F)OLED_WR_Byte(0x81,OLED_CMD);//--設置對比度控制寄存器OLED_WR_Byte(0xCF,OLED_CMD);// 設置SEG輸出電流亮度OLED_WR_Byte(0xA1,OLED_CMD);//--賽格/列映射 0xa0左右反置 0xa1正常OLED_WR_Byte(0xC8,OLED_CMD);//設置“COM/Row掃描方向” 0xc0上下反置 0xc8正常OLED_WR_Byte(0xA6,OLED_CMD);//--設置正常顯示OLED_WR_Byte(0xA8,OLED_CMD);//--設置復用比例(1 ~ 64)OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 dutyOLED_WR_Byte(0xD3,OLED_CMD);//-設置顯示偏移移位映射RAM計數器(0x00~0x3F)OLED_WR_Byte(0x00,OLED_CMD);//-not offsetOLED_WR_Byte(0xd5,OLED_CMD);//--設置顯示時鐘分頻比/振蕩器頻率OLED_WR_Byte(0x80,OLED_CMD);//--設置分割比率,設置時鐘為100幀/秒OLED_WR_Byte(0xD9,OLED_CMD);//--設置pre-charge時期OLED_WR_Byte(0xF1,OLED_CMD);//設置預充電為15個時鐘&放電為1個時鐘OLED_WR_Byte(0xDA,OLED_CMD);//--設置com引腳硬件配置OLED_WR_Byte(0x12,OLED_CMD);OLED_WR_Byte(0xDB,OLED_CMD);//--設置vcomhOLED_WR_Byte(0x40,OLED_CMD);//設置VCOM取消選擇級別OLED_WR_Byte(0x20,OLED_CMD);//-設置頁面尋址模式(0x00/0x01/0x02)OLED_WR_Byte(0x02,OLED_CMD);//OLED_WR_Byte(0x8D,OLED_CMD);//--set Charge Pump enable/disableOLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) disableOLED_WR_Byte(0xA4,OLED_CMD);// 禁用整個顯示打開(0xa4/0xa5)OLED_WR_Byte(0xA6,OLED_CMD);// 禁用逆顯示開關(0xa6/a7)OLED_Clear();OLED_WR_Byte(0xAF,OLED_CMD); }

    5、系統調試及分析

    5.1、系統調試

    需要調整PID參數和定時器CCR的參數,還是比較麻煩的

    5.2、調試現象及分析

    小車的pid會不穩定,會前后顛倒,傾斜角度不得大于30,否則GG

    5.3、測試結果

    心累

    6、參考借鑒內容

    https://www.bilibili.com/video/BV1AZ4y1V7wt?p=27&spm_id_from=pageDriver

    https://blog.csdn.net/best_xiaolong/article/details/105153978

    https://wenku.baidu.com/view/3e5fc765bb4cf7ec4bfed00b.html

    總結

    以上是生活随笔為你收集整理的基于stm32的自平衡小车的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    九色视频网址 | 成人精品久久久 | 日韩电影一区二区在线观看 | 日本福利视频在线 | 狠狠干网| 午夜色站 | 91麻豆文化传媒在线观看 | 男女拍拍免费视频 | 偷拍福利视频一区二区三区 | 国产成人精品日本亚洲999 | 日韩免费网址 | 超碰97国产在线 | 婷婷在线资源 | 成人小视频在线观看免费 | 97超级碰碰碰视频在线观看 | 91麻豆国产 | 深夜免费福利网站 | 免费在线观看av的网站 | 青青河边草免费观看 | 97视频免费在线 | 色婷婷九月 | 欧美激情精品久久久久 | 日韩中文字幕免费在线观看 | 日韩在线免费不卡 | 亚洲黄色一级视频 | 最近中文字幕免费av | 蜜臀av性久久久久蜜臀aⅴ四虎 | 久久久久北条麻妃免费看 | 欧美日韩另类视频 | 国产日产精品久久久久快鸭 | 久久国产精品99国产 | 丁香六月激情婷婷 | 97超碰在线视 | 国内精品久久天天躁人人爽 | 成人黄色中文字幕 | 久久精品视频3 | 国产精品 国内视频 | 成人在线黄色电影 | 黄色片网站av | 成人黄色片免费 | 亚洲最大激情中文字幕 | 丁香色综合 | 插久久 | 欧美在线观看视频一区二区 | 久久久久欠精品国产毛片国产毛生 | 成人cosplay福利网站 | 精品国产综合区久久久久久 | 成年人在线电影 | 久久人人爽爽 | 日韩欧美一区二区三区黑寡妇 | 国产午夜精品免费一区二区三区视频 | 17婷婷久久www | 91成人免费视频 | 视频成人免费 | www在线免费观看 | 美女视频是黄的免费观看 | 日韩一区二区免费在线观看 | 视频福利在线 | 成人一区电影 | 亚洲精品视频中文字幕 | 91精品视频在线免费观看 | 中文字幕在线看视频国产 | 伊人天天 | 男女啪啪网站 | 五月婷婷操 | 亚洲精品国偷拍自产在线观看 | 久久婷婷久久 | 视频成人永久免费视频 | 毛片网站在线观看 | 东方av在 | 欧美一级日韩三级 | 91porny九色在线播放 | 亚洲综合网站在线观看 | 亚洲精品国产精品国自产观看 | 天天综合网~永久入口 | 免费av小说 | 婷婷在线播放 | 欧产日产国产69 | 久久不射网站 | 成年美女黄网站色大片免费看 | 日韩精品久久久久久中文字幕8 | 日韩黄色在线电影 | 精品久久久久久久 | 国产最新精品视频 | 97国产精品 | 国产一区二区三区高清播放 | 怡红院av久久久久久久 | 国产一区二区精品久久 | 国产日产欧美在线观看 | 国产精品福利在线 | 亚洲精品乱码久久久久久蜜桃动漫 | 久久噜噜少妇网站 | 久产久精国产品 | 成人免费 在线播放 | 国产精品久久一区二区三区不卡 | 国产精品久久久久久久久久免费 | 久久的色 | 一级片免费视频 | 日韩在线不卡视频 | 香蕉网在线播放 | 日韩av不卡在线 | 日本性视频 | 日韩专区一区二区 | 国产 在线 高清 精品 | 久久视精品 | 五月婷婷久| 中文字幕在线免费 | 日本中文字幕视频 | 日韩字幕 | 97av色| 成年人视频免费在线 | 综合av在线 | 99久久er热在这里只有精品15 | 欧美午夜激情网 | 就色干综合 | 亚洲狠狠丁香婷婷综合久久久 | 精品麻豆 | 国产精品亚洲综合久久 | 97超碰在线资源 | 婷婷色在线资源 | 久久久精品视频网站 | 婷婷伊人综合 | 亚洲高清激情 | 精壮的侍卫呻吟h | 国产精品久久久久久久久久久久午夜片 | 婷婷国产在线 | 婷婷精品国产欧美精品亚洲人人爽 | 国产中文在线字幕 | 精品国产一二三 | 亚洲女人av| 亚洲少妇久久 | 国产老妇av | 欧美日韩中文字幕综合视频 | 国产又黄又爽又猛视频日本 | 成人在线免费小视频 | 亚洲精品国产精品国自产观看 | 99精品乱码国产在线观看 | 久久久久免费精品国产小说色大师 | 国产网站av| 成人国产精品 | 99精品国产高清在线观看 | 毛片网站免费在线观看 | 99免费视频| 日本中文乱码卡一卡二新区 | 麻豆久久久| 亚洲高清视频在线播放 | 精品国产一区二区三区日日嗨 | 久久神马影院 | 婷婷久久综合九色综合 | 四虎成人精品永久免费av九九 | 91精品国产欧美一区二区成人 | 免费在线观看中文字幕 | 亚洲另类视频 | 青青草在久久免费久久免费 | 久草视频视频在线播放 | 亚洲激情视频 | 色wwww| 午夜精品成人一区二区三区 | 亚洲永久在线 | 中文字幕乱在线伦视频中文字幕乱码在线 | 久久久久久久久黄色 | 欧美日韩中文在线观看 | 人人爽人人插 | 国产午夜不卡 | 日韩在线视频看看 | 在线免费观看羞羞视频 | a'aaa级片在线观看 | 黄色www | 成人在线电影观看 | 激情综合亚洲 | avwww在线观看 | 久香蕉 | 亚洲最快最全在线视频 | 日本福利视频在线 | 国产精品欧美久久 | 在线观看日韩精品 | 国产欧美精品在线观看 | 69久久夜色精品国产69 | 亚洲一级电影在线观看 | 狠狠操狠狠干2017 | 五月天综合在线 | 天天干,天天射,天天操,天天摸 | 精品国产aⅴ麻豆 | 日韩性网站 | 天天射夜夜爽 | 99精品国产在热久久下载 | 国产免费久久av | 免费a v在线| 九九久久电影 | 91精品视频在线免费观看 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 91精品国自产在线观看 | 国产大片免费久久 | 成人在线视频免费观看 | 久久av不卡 | 丁香久久五月 | 2021国产在线视频 | 最近的中文字幕大全免费版 | 中文字幕电影在线 | 国产精品毛片一区二区 | 欧美久久久久久久久久久久久 | 婷五月天激情 | 视频二区在线 | 亚洲黄色影院 | 韩国一区二区在线观看 | 丁香六月综合网 | 99视频网址 | 亚洲一区视频免费观看 | 久久精精品 | 久草在线资源观看 | 亚洲成a人片在线观看网站口工 | 婷婷九月丁香 | 天天干天天射天天插 | 国产欧美日韩精品一区二区免费 | 一区二区三区视频在线 | 欧美色噜噜噜 | 成人免费在线视频观看 | 亚洲成a人片在线观看网站口工 | 人人爽人人做 | 麻豆传媒视频在线免费观看 | 97国产情侣爱久久免费观看 | 日韩在线观看一区二区三区 | 正在播放亚洲精品 | 欧美激情精品一区 | 国产福利电影网址 | 国产视频中文字幕 | 国产麻豆精品在线观看 | 玖玖视频精品 | 国产91精品一区二区麻豆亚洲 | 婷婷综合导航 | 在线观看国产www | 亚洲高清av在线 | 亚洲美女视频在线观看 | 久久成人午夜视频 | 99精品久久久久 | 国产精品中文字幕在线 | 婷婷在线播放 | 美女禁18| 精品电影一区二区 | 免费网站在线 | 91亚洲激情| 亚洲高清视频在线观看 | 日本中文乱码卡一卡二新区 | 麻豆av一区二区三区在线观看 | 日本xxxxav | 中文字幕在线观看第三页 | 亚洲成人高清在线 | www日韩欧美 | 欧美精品一区二区在线播放 | 国语久久| 国偷自产视频一区二区久 | 国产精品k频道 | 久久在线免费观看 | 激情综合网色播五月 | 亚洲精品国产精品国自 | 在线观看日韩中文字幕 | 国产精品美女久久久久久免费 | 久久视影 | 91视频久久久久久 | 色婷婷午夜 | 五月综合激情婷婷 | 射射射av | 亚洲成人黄色在线观看 | 免费久久久久久久 | 久久久黄视频 | 欧美色图另类 | 中文字幕影片免费在线观看 | 91一区二区三区久久久久国产乱 | 久保带人 | 国产日韩在线播放 | 九九激情视频 | 国产精品大片 | 国产美女视频免费观看的网站 | 日韩资源在线观看 | 精品xxx| 日日干天天操 | 在线观看日韩av | 一级一片免费看 | 一区二区精品在线 | 国产精品k频道 | 精品特级毛片 | 91在线播放综合 | www.狠狠干 | 丁香六月欧美 | 亚洲无吗av| 日韩在线免费观看视频 | 日韩欧美在线综合网 | 亚洲视频一区二区三区在线观看 | 久久99热精品 | 国产精品久久久久久久久久东京 | 精品在线视频播放 | 久久国产经典视频 | 五月婷婷开心中文字幕 | 精品国产乱码久久久久久三级人 | 亚洲精品在线网站 | 久久蜜桃av| 99精品久久久久 | 91免费黄视频 | 天堂va在线观看 | 欧美在线视频不卡 | 中文字幕视频三区 | 日日干干夜夜 | 国产特级毛片aaaaaa | 91av电影在线 | 亚洲精品tv| 亚洲涩涩涩涩涩涩 | 国产精品久久人 | 欧美日韩p片 | 中文字幕在线观看的网站 | 97色在线观看免费视频 | 99久久久国产免费 | 精品一区电影 | 日韩视频1区 | 国产亚洲精品无 | a黄色一级 | 日韩av网址在线 | www.久久久com | 一区二区电影在线观看 | 精品亚洲va在线va天堂资源站 | 国产中文字幕视频在线观看 | 手机在线免费av | 亚洲第一区在线播放 | 日韩成人精品一区二区 | 91精品国产欧美一区二区成人 | 欧美性久久久 | 在线观看成人毛片 | 91麻豆网| 日韩在观看线 | 国产精品久久久久三级 | 亚洲精品乱码久久久久久蜜桃动漫 | 蜜臀aⅴ国产精品久久久国产 | 99色国产 | 国内精品久久影院 | 欧洲精品码一区二区三区免费看 | 91久久在线观看 | 日本精品视频免费 | 亚洲国产三级 | 又长又大又黑又粗欧美 | 中文字幕有码在线 | 午夜在线免费观看 | 丁香六月在线观看 | 欧美性猛片, | av福利超碰网站 | 久久久免费看 | 九九热视频在线免费观看 | 日韩av中文字幕在线免费观看 | 精品免费视频 | 蜜臀av夜夜澡人人爽人人桃色 | 黄色h在线观看 | 91麻豆网站 | 亚洲黄色在线免费观看 | 九九免费在线观看 | 亚洲国产剧情av | 97超碰香蕉 | 久久亚洲专区 | wwwwwww色| 香蕉在线播放 | 在线观看免费av片 | 久久一区精品 | 欧美国产精品一区二区 | 精品国产片| 国产精品 欧美 日韩 | 久久久www成人免费毛片麻豆 | 日韩欧美在线一区 | 久久久亚洲网站 | 美女久久 | 午夜精品久久久久久久99水蜜桃 | 久久久亚洲网站 | 久久免费在线观看 | 在线 影视 一区 | 亚洲综合五月天 | 五月天视频网 | 超碰激情在线 | 成年人视频在线免费观看 | 天天射天天干天天插 | 日韩一级黄色av | 久久久毛片 | 欧美激情视频在线免费观看 | 久久精品首页 | 国产精品手机播放 | 亚洲小视频在线观看 | 国产一区二区在线视频观看 | 蜜臀久久99精品久久久无需会员 | 91丨九色丨国产女 | 免费看片成人 | 欧美一级片在线播放 | 国产在线观看地址 | 中文字幕免费观看视频 | 欧美资源在线观看 | 免费在线观看av的网站 | 精品久久久久久久久久久久 | 成人黄色av网站 | 欧美激情精品久久 | 久久久综合九色合综国产精品 | 精品国产一区二区三区av性色 | 精品999| 欧美少妇xxxxxx | 亚洲国产精品va在线看黑人动漫 | a√天堂中文在线 | 免费视频a | 亚洲经典中文字幕 | 国产99久久精品一区二区永久免费 | 国产精品日韩在线观看 | 国产高清在线a视频大全 | 国产精品乱码一区二三区 | 亚洲最大免费成人网 | av三级在线免费观看 | 日日躁夜夜躁aaaaxxxx | 日韩av午夜在线观看 | 91在线精品一区二区 | 毛片随便看| 成年人免费在线看 | 中文字幕永久 | 国产69精品久久久久99尤 | 色永久免费视频 | www.久久久久 | 人人超碰97 | 国产精品久一 | 国产成人三级在线 | 麻豆91在线播放 | 69亚洲乱 | 久久夜视频 | 亚洲精品www久久久 www国产精品com | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 激情综合色综合久久 | 久久电影国产免费久久电影 | 干天天 | 香蕉视频免费看 | 天天综合网天天综合色 | 天天干天天干天天操 | 亚洲午夜精品电影 | 日本特黄一级 | 精品久久久久久亚洲 | 日韩欧美观看 | 婷婷六月色 | 精品免费视频 | 91少妇精拍在线播放 | 一级黄色毛片 | 天天干天天干天天色 | 日日碰狠狠躁久久躁综合网 | 国产亚洲人成网站在线观看 | 友田真希x88av | 91麻豆精品国产91久久久久 | 国产日韩视频在线 | 成人h视频在线播放 | 97久久久免费福利网址 | 国产成人av片 | 亚洲精品视频在线观看视频 | 超薄丝袜一二三区 | 国产精品久久一卡二卡 | 一级理论片在线观看 | 超碰97国产 | 一区二区三区国产精品 | 成人作爱视频 | 免费看的国产视频网站 | 日韩电影中文,亚洲精品乱码 | 天天干干| 日韩久久在线 | 91成人在线看 | 久操久| 欧美色综合天天久久综合精品 | 国产成人免费精品 | 久久久久久久久免费 | 玖玖视频在线 | 亚洲精品在线观看的 | 国产精品一区二区 91 | 日韩免费看的电影 | 亚洲精品久久久久中文字幕二区 | 看毛片网站 | 欧美午夜视频在线 | 欧美另类重口 | 黄色一级大片免费看 | 国产糖心vlog在线观看 | 久久久国产电影 | 91综合久久一区二区 | 美女网站色在线观看 | 成人亚洲网 | 欧美日韩亚洲第一页 | 久久久久久久久久久久影院 | 成人精品一区二区三区电影免费 | 欧美日韩网站 | 日韩精品久久久久久久电影竹菊 | 国产精品手机在线播放 | av电影免费| 亚洲精选久久 | 久久五月精品 | 91看片成人 | 天天干天天射天天插 | 天天干视频在线 | 一区二区三区在线观看中文字幕 | 中文字幕一区av | 色五月色开心色婷婷色丁香 | 午夜精品三区 | 91热精品 | 色综合天天狠狠 | 狠狠色丁香婷婷综合基地 | 久久久www | 日韩精品免费一区二区三区 | 国产精品乱码久久久 | 日韩在线观看电影 | 色网av | 国产亚洲精品久久网站 | 国产成人精品日本亚洲999 | 国产视频中文字幕 | 午夜视频在线观看网站 | 夜夜骑首页 | 狠狠色丁香久久婷婷综合丁香 | 91亚洲国产 | 精品亚洲免费 | 国产精品欧美久久久久天天影视 | 久久久久久亚洲精品 | 亚洲色五月 | 精品999在线| 啪啪小视频网站 | 九九视频在线观看视频6 | 999国内精品永久免费视频 | 久久er99热精品一区二区 | 国产视频综合在线 | 最新国产精品久久精品 | 综合精品久久久 | 国色天香第二季 | 亚洲小视频在线观看 | 久久久久免费观看 | 精品不卡视频 | 欧美孕妇视频 | 欧美一区二区三区免费看 | 日本一区二区三区视频在线播放 | 欧美韩国日本在线观看 | 99热精品在线观看 | 久操视频在线免费看 | 免费91麻豆精品国产自产在线观看 | 亚洲永久在线 | 伊人首页| 久久久精品成人 | 亚洲精品美女久久 | 国产免费a| 久久精品一区二区三区国产主播 | 久久狠狠亚洲综合 | 韩国av永久免费 | 成人九九视频 | 日韩欧美一区二区在线播放 | 激情在线五月天 | 色狠狠综合天天综合综合 | 国产精品中文久久久久久久 | 午夜美女网站 | 日韩毛片久久久 | 国产精品入口a级 | 国产一线天在线观看 | av黄色国产| 亚洲高清在线观看视频 | 亚洲国产合集 | 在线观看黄色国产 | 亚洲一区二区观看 | 91大神电影 | 91av片| 亚洲视频久久久久 | 国产96av| 国产精品高清在线观看 | 国语对白少妇爽91 | 97超级碰碰 | 久久精品国亚洲 | 国产成人综合图片 | 热久久免费视频精品 | 91精品中文字幕 | 999成人| 国产一级片直播 | 久久成人欧美 | 在线观看的a站 | 日本久久片| 黄色精品久久久 | 亚洲资源在线观看 | 亚洲 精品在线视频 | 操操操人人人 | 在线精品播放 | 在线免费观看视频一区二区三区 | 九九综合久久 | 亚洲欧美va| 亚洲永久精品国产 | 国产精品久久久毛片 | 色黄视频免费观看 | 久久特级毛片 | 亚洲国产日韩一区 | 天天干,天天操 | 久久精品—区二区三区 | 园产精品久久久久久久7电影 | 国产精品美女久久久网av | 国产精品嫩草影视久久久 | 热久久免费视频精品 | 国产在线视频一区二区 | 久久精品三 | 成人免费在线网 | 中文字幕在线观看视频网站 | 成人宗合网 | 97视频一区| 99视频国产在线 | 制服丝袜一区二区 | 国产精品久久一区二区三区不卡 | 亚洲a成人v| 亚洲精品乱码久久久久久蜜桃欧美 | 国色天香在线 | 欧美色图亚洲图片 | 久久日韩精品 | 免费观看国产视频 | 精品国产自在精品国产精野外直播 | 国产精品欧美久久久久三级 | 一级电影免费在线观看 | 亚洲成成品网站 | 福利区在线观看 | 一区二区视频在线播放 | 波多野结衣一区二区 | 亚洲 中文 欧美 日韩vr 在线 | 男女精品久久 | 久久一本综合 | 午夜av免费在线观看 | 日本精品久久久久久 | 国产成人一区二区三区影院在线 | 国产中文字幕在线观看 | 国产精品成人a免费观看 | 九月婷婷综合网 | 77国产精品 | 国产福利网站 | 国产免费视频一区二区裸体 | 国产经典 欧美精品 | 中文字幕在线久一本久 | 午夜视频不卡 | 免费在线播放av电影 | 国产一区在线不卡 | 不卡精品 | 久久久久成| 婷婷在线免费视频 | 综合激情网| 在线中文字幕一区二区 | 国产精品一区二区三区观看 | 日韩av视屏 | 黄色三级网站在线观看 | 日本少妇高清做爰视频 | 91爱爱电影 | 91热爆在线观看 | www91在线观看 | 国产一性一爱一乱一交 | 天操夜夜操| 高清色免费 | 成人黄色电影在线播放 | 亚洲成人免费 | 日韩理论片在线观看 | 在线观看成人小视频 | 欧美国产亚洲精品久久久8v | 在线观看中文字幕dvd播放 | 欧美日韩精品在线观看 | 日韩精品一区二区三区不卡 | 在线国产激情视频 | 最近更新好看的中文字幕 | 99视频这里有精品 | 日本一区二区三区免费观看 | 欧美精品日韩 | 9热精品| 国产精品涩涩屋www在线观看 | 黄色毛片在线 | 日韩免费大片 | 午夜免费久久看 | 久久久精品二区 | 欧美精品网站 | 亚洲做受高潮欧美裸体 | 99视频在线精品国自产拍免费观看 | 中文字幕在线观看一区 | 国产一级免费av | 一级黄色片在线 | 欧美激情亚洲综合 | 日本久久片 | 日韩av片在线 | 成人精品视频久久久久 | 欧美亚洲精品一区 | 国产精品第2页 | 人人看人人草 | 天天要夜夜操 | 国产精品色婷婷视频 | 免费观看性生活大片3 | 久久免费毛片 | 国产亚洲在线 | 精品国产一区二区三区久久影院 | 国产精品18久久久久久久久久久久 | 亚洲精品色婷婷 | 99久久er热在这里只有精品15 | 天天操天天综合网 | 亚洲精品一区二区三区四区高清 | 亚洲精品国产成人av在线 | 欧美日韩国产区 | 成人综合婷婷国产精品久久免费 | 亚洲 成人 欧美 | 日韩av成人 | 欧美日韩精品在线 | www夜夜操com | 香蕉在线视频播放网站 | 五月婷婷在线综合 | 亚洲理论在线观看电影 | 国产一级片在线播放 | 国产精品一区免费观看 | 天天操狠狠操夜夜操 | 国产不卡在线播放 | 中文字幕一区二区三区乱码不卡 | 国产福利一区二区三区在线观看 | 精品视频免费看 | 久久视频网址 | 日日麻批40分钟视频免费观看 | 91亚洲在线 | 最近中文字幕完整高清 | 免费观看91视频 | av免费观看在线 | 99电影| 欧美国产日韩久久 | 玖操| 久草视频在线资源 | 97超碰.com| 一区二区高清在线 | a级片韩国 | 视频一区亚洲 | 日韩色高清 | 国产精品嫩草影院9 | 中文一区二区三区在线观看 | 国产成人亚洲精品自产在线 | 91九色丨porny丨丰满6 | 国产美女被啪进深处喷白浆视频 | 欧美精品久久久久久久免费 | 日韩手机视频 | 色国产精品 | 色.com| 麻豆精品视频在线观看免费 | 成人四虎影院 | 精品播放 | 亚洲九九九在线观看 | 狠狠躁日日躁狂躁夜夜躁 | 97av视频在线观看 | 国产一区视频在线观看免费 | 激情五月***国产精品 | 天天曰夜夜操 | 2017狠狠干| 亚洲一区 av| 国产一区二区综合 | 日韩av进入 | 在线视频1卡二卡三卡 | 久久免费在线观看 | 美女网站在线播放 | 鲁一鲁影院 | 久久免费美女视频 | 国产在线精品视频 | 色网站国产精品 | 免费看十八岁美女 | 人人舔人人爽 | 亚洲影视九九影院在线观看 | 久久精品一级片 | 亚洲精品影视 | 国产精品99久久免费观看 | 在线观看电影av | 高清一区二区 | 国产精品va| 日韩特黄av | 99精品成人 | 欧美日韩免费一区二区三区 | 欧美成人一二区 | 日韩免费在线观看视频 | 久草视频免费看 | 中文字幕资源站 | 久久香蕉电影 | 日韩精品一区二区免费 | 九九色在线观看 | 久久区二区| 三级在线视频观看 | 欧美精品亚洲精品日韩精品 | 亚洲欧美日韩在线一区二区 | 人人天天夜夜 | 国产精品videossex国产高清 | 99久久999久久久精玫瑰 | 97超碰人人看 | 久草在线99 | 天堂av网址 | 一区二区精品在线视频 | 日日碰夜夜爽 | 久久久国产精品视频 | 久久精品一区二区三区视频 | 极品国产91在线网站 | 中文字幕日韩免费视频 | 99久高清在线观看视频99精品热在线观看视频 | 久久久福利 | 欧美成亚洲 | 2023国产精品自产拍在线观看 | 国产成人综合在线观看 | 激情在线网站 | 狠狠婷婷 | 久操视频在线免费看 | 国内精品视频在线 | 国产精品久久久久av免费 | 在线成人小视频 | 18国产精品白浆在线观看免费 | 日本久久电影网 | 午夜狠狠操 | 在线久热 | 99免费在线播放99久久免费 | 天天插狠狠干 | 视频国产一区二区三区 | 久久久久久久影院 | 成人免费共享视频 | 久久综合免费视频 | 久久免费在线观看视频 | 五月婷婷一区二区三区 | 久久精品视频在线免费观看 | 亚洲精品免费在线观看视频 | 色网av | 久久久91精品国产一区二区三区 | 日韩国产欧美视频 | 久久久这里有精品 | 不卡的av在线播放 | 中文在线字幕免 | 久久不射电影院 | 久草免费看 | 久色网| 99热在线精品观看 | 国产精品一区二区久久国产 | 黄色特一级片 | 欧美精品中文在线免费观看 | 成年人免费在线观看网站 | 日韩av电影网站在线观看 | 97香蕉久久国产在线观看 | av观看在线观看 | 国产一级精品视频 | 亚洲理论在线观看电影 | 国产理论免费 | 精品在线播放视频 | 久久成人午夜视频 | 97在线观看免费视频 | 国产精品欧美一区二区三区不卡 | 在线观看午夜 | 日日碰狠狠躁久久躁综合网 | 国产视频在线免费 | 免费av 在线| 2023年中文无字幕文字 | 久久国内精品 | 国产精品麻豆欧美日韩ww | 免费黄色特级片 | 国产在线综合视频 | 免费看黄视频 | 午夜精品久久一牛影视 | 国产视频 久久久 | 久艹视频在线观看 | 日韩精品中文字幕一区二区 | 中文字幕亚洲精品在线观看 | 欧美午夜久久 | 中文字幕在线免费观看 | 色综合色综合久久综合频道88 | 国产精品资源在线观看 | 日韩av电影中文字幕在线观看 | 中文字幕高清视频 | 久久免费视频网站 | 日韩亚洲国产中文字幕 | 免费热情视频 | 91在线播| 婷婷亚洲综合五月天小说 | 日韩电影一区二区在线观看 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 狠狠狠色丁香婷婷综合久久88 | 久久免费视频这里只有精品 | 69国产盗摄一区二区三区五区 | 91中文在线视频 | 日本福利视频在线 | 亚洲免费国产视频 | 久久深夜 | 国产精品网址在线观看 | 久久优| www.99热精品 | 992tv在线成人免费观看 | 亚洲一级黄色 | 精品99视频 | 特级西西444www大胆高清无视频 | 久久免费看a级毛毛片 | 日韩免费av在线 | 日韩欧美在线观看一区二区 | 国产精品久久久久av | 久久久黄色av | 成人av电影免费在线观看 | www色网站 | 久久69av | 新版资源中文在线观看 | 久草在线视频首页 | 免费看一级黄色大全 | 国产视频一二三 | 国产视频一级 | 亚洲天天做 | 国产一区在线视频观看 | aaaaaa毛片| 国产视频在线观看免费 | 久草视频在线新免费 | 在线免费色| 免费看三级| www.福利视频| 在线激情影院一区 | 久久视频二区 | 久久精品人 | 五月婷婷一区二区三区 | 日韩欧美视频免费在线观看 | 91色网址 | 亚洲综合导航 | 奇米影视8888在线观看大全免费 | 日本在线观看一区二区三区 | 国产高清中文字幕 | 国产传媒中文字幕 | 国产美女精品人人做人人爽 | 深爱激情五月网 | av在线网站大全 | 超碰人人99 | 激情视频网页 | 又黄又爽的视频在线观看网站 | 久久五月激情 | 黄色tv视频 | 在线国产视频一区 | 激情欧美国产 | 成人在线超碰 | 在线视频 成人 | 国产高清久久久 | 久久综合九色综合久久久精品综合 | 国产在线观看你懂的 | 久久久久99精品成人片三人毛片 | 精品一区电影国产 | 久久国产91| 自拍超碰在线 | 国产精品久久一 | 国产精品视频地址 | 在线观看麻豆av | 成人黄色一级视频 | 国产日韩欧美自拍 | 国产成人免费 | 成人中心免费视频 | 国产高清视频在线播放一区 | 人人干在线观看 | 婷婷色伊人 | 精品久久中文 | 国产一区自拍视频 | 激情久久综合网 | 日韩精品专区 | 国产999免费视频 | 天天爽网站| 国产精品久久久久久久av电影 | 伊人亚洲综合网 | 激情婷婷av | 午夜精品久久久久久久99 | 天天曰天天曰 | 激情喷水| 天天爽夜夜爽精品视频婷婷 | 在线一区二区三区 | 日韩电影在线观看一区二区 | 99r在线| 日本精品中文字幕在线观看 | 久久永久免费视频 | 亚洲精品综合久久 | 国产精品久久久久久久久久久久午 | 91精品在线播放 | 国产乱码精品一区二区蜜臀 | 精品在线免费观看 | 免费高清无人区完整版 | 69夜色精品国产69乱 | av官网| 91九色蝌蚪视频 | 日韩中文字幕a | av免费观看高清 | 久久9999久久免费精品国产 | av视屏在线播放 | 91人人澡人人爽人人精品 | 久久久久免费精品国产小说色大师 | 91精品久久久久久综合五月天 | 夜添久久精品亚洲国产精品 | 在线之家官网 | 久久久久伊人 | 2022中文字幕在线观看 | 天天爽天天碰狠狠添 | 日本公妇色中文字幕 | 99视频| 中文字幕第一页在线vr | 500部大龄熟乱视频使用方法 | 亚洲人成人在线 | 天天舔天天搞 | 久久99在线 | 国产午夜三级一二三区 | 人人澡超碰碰97碰碰碰软件 | 色久av | 免费观看高清 | 国产一区二区久久久久 | 欧美精品一区二区免费 | 国产一区二区电影在线观看 | 久久久久久久亚洲精品 | 免费久久99精品国产 | 五月婷婷中文字幕 | 亚洲精品视频在线观看免费 | 成人久久18免费 | 97看片| 欧美日韩精品在线观看视频 | 伊人五月天.com | 探花系列在线 | 又湿又紧又大又爽a视频国产 | 美国av大片 | 激情综合婷婷 |