|
本帖最后由 zhangzhoulzl 于 2018-8-6 18:00 編輯
這個(gè)平衡車是我這個(gè)暑假的作品,因?yàn)橹爸饕窃谟布矫鎸W(xué)習(xí),現(xiàn)在想在軟件方面加深點(diǎn),并且學(xué)下PID,明白之后發(fā)現(xiàn)PID其實(shí)不是很難,難在調(diào)整各種參數(shù)。因?yàn)閯倓偼瓿桑猿绦蜃⒔獠皇呛茉敿?xì),所以不好意思,主控芯片是STM32f103,驅(qū)動(dòng)使用L298N,電機(jī)使用帶編碼器電機(jī),因?yàn)槲矣幸粋(gè)編碼器電機(jī)的編碼器是壞的,所以只用了一個(gè),但是程序里兩個(gè)都寫好了,到手直接改下就好。照片會(huì)員等級(jí)太低了不好發(fā),所以就只能文字描述了哈哈。
補(bǔ)下圖片:
IMG_20180806_174920.jpg (3.59 MB, 下載次數(shù): 144)
下載附件
2018-8-6 17:57 上傳
IMG_20180806_174905.jpg (2.74 MB, 下載次數(shù): 120)
下載附件
2018-8-6 17:57 上傳
電池:(3顆18650組成12V,賊丑)
IMG_20180806_174942_1.jpg (3.29 MB, 下載次數(shù): 104)
下載附件
2018-8-6 17:57 上傳
電機(jī)驅(qū)動(dòng)板L298N:
IMG_20180806_174939_1.jpg (3.13 MB, 下載次數(shù): 142)
下載附件
2018-8-6 17:57 上傳
編碼電機(jī):
IMG_20180806_174936.jpg (3.16 MB, 下載次數(shù): 132)
下載附件
2018-8-6 17:57 上傳
STM32F103ZET6主控板:(實(shí)際應(yīng)用中STM32F103C8T6足以,因?yàn)椴灰X的所以用這塊板)以及NFR24L01模塊用作無限遙控,因?yàn)檫@部分比較簡答,所以展示還沒寫:
IMG_20180806_174927_1.jpg (3.95 MB, 下載次數(shù): 129)
下載附件
2018-8-6 17:57 上傳
車身結(jié)構(gòu)是3D打印的,上部分沒打好還有超聲波模塊支架,下面附加的模型內(nèi)有
單片機(jī)源程序如下:
- #include "stm32f10x.h"
- #include "sys.h"
- #include "PWM.h"
- #include "delay.h"
- #include "usart.h"
- #include "mpu6050.h"
- #include "inv_mpu.h"
- #include "inv_mpu_dmp_motion_driver.h"
- #include "LED.h"
- #include "encode.h"
- #include "oled.h"
- #include "pid.h"
- #include "timer.h"
- #include "key.h"
- extern float Count; ///編碼器故障,展示只有編碼器2有用
- extern float Count2;
- extern float countD_value;
- extern float Old_Count;
- extern float Old_Count2;
- extern float countD_value2;
- extern float count_AND;
- u16 Parameter = 1881; //輸入編碼器線數(shù)
- //u8 t=0,report=1; //默認(rèn)開啟上報(bào)
- u8 key;
- float pitch,roll,yaw; //歐拉角
- short aacx,aacy,aacz; //加速度傳感器原始數(shù)據(jù)
- short gyrox,gyroy,gyroz; //陀螺儀原始數(shù)據(jù)
- short temp; //溫度
- float PIDoutALL;
- void int_all(void);
- void Get_Data(void);
- int main(void)
- {
- int_all();
- while(1)
- Get_Data();
-
- }
-
-
-
-
- void int_all(void)
- {
- uart_init(115200);
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
- SystemInit();
- delay_init();
- NVIC_Cfg();
- GPIO_Cfg();
- TIM1_Init();
- TIME2_INT(10,7199);//1ms
- TIM_Cfg();
- TIM_Cmd(TIM3,ENABLE);
- TIM4_Init();
- OLED_Init();
- MPU_Init(); //初始化MPU6050
- LED1_INT();
- Angle_PID_init();
- Speed_PID_init();
- KEY_Init();
- }
-
- void Get_Data(void)
- {
- // u8 t=0,report=1; //默認(rèn)開啟上報(bào)
- // u8 key;
- // float pitch,roll,yaw; //歐拉角
- // short aacx,aacy,aacz; //加速度傳感器原始數(shù)據(jù)
- // short gyrox,gyroy,gyroz; //陀螺儀原始數(shù)據(jù)
- // short temp; //溫度
- // NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
- // delay_init(); //延時(shí)初始化
- // usmart_dev.init(72); //初始化USMART
- // LED_Init(); //初始化與LED連接的硬件接口
- // KEY_Init(); //初始化按鍵
- // LCD_Init(); //初始化LCD
- // MPU_Init(); //初始化MPU6050
- LED1=1;
- LED2=1;
- OLED_ShowStr(16, 0,"Balance Car",2);
- // OLED_ON();
- // while(mpu_dmp_init())
- // {
- LED2=0;
- OLED_ShowStr(0, 2,"Int MPU6050 . ",2);
- delay_ms(300);
- OLED_ShowStr(0, 2,"Int MPU6050 ..",2);
- delay_ms(300);
- OLED_ShowStr(0, 2,"Int MPU6050 ...",2);
- delay_ms(300);
- OLED_ShowStr(0, 2," ",2);
- // }
- OLED_ShowStr(0, 2,"MPU6050 Check Ok",2);
-
- // LCD_ShowString(30,130,200,16,16,"MPU6050 OK");
- // LCD_ShowString(30,150,200,16,16,"KEY0:UPLOAD ON/OFF");
- // POINT_COLOR=BLUE;//設(shè)置字體為藍(lán)色
- // LCD_ShowString(30,170,200,16,16,"UPLOAD ON ");
- // LCD_ShowString(30,200,200,16,16," Temp: . C");
- // LCD_ShowString(30,220,200,16,16,"Pitch: . C");
- // LCD_ShowString(30,240,200,16,16," Roll: . C");
- // LCD_ShowString(30,260,200,16,16," Yaw : . C");
- while(1)
- {
- key=KEY_Scan(0);
- // if(key==KEY0_PRES)
- // {
- // report=!report;
- // if(report)LCD_ShowString(30,170,200,16,16,"UPLOAD ON ");
- // else LCD_ShowString(30,170,200,16,16,"UPLOAD OFF");
- // }
- LED1=1;
- if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0)
- {
- temp=MPU_Get_Temperature(); //得到溫度值
- MPU_Get_Accelerometer(&aacx,&aacy,&aacz); //得到加速度傳感器數(shù)據(jù)
- MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz); //得到陀螺儀數(shù)據(jù)
- // if(report)mpu6050_send_data(aacx,aacy,aacz,gyrox,gyroy,gyroz);//用自定義幀發(fā)送加速度和陀螺儀原始數(shù)據(jù)
- // if(report)usart1_report_imu(aacx,aacy,aacz,gyrox,gyroy,gyroz,(int)(roll*100),(int)(pitch*100),(int)(yaw*10));
- // if((t%10)==0)
- // {
- pid.Pv=pitch; //角度PID輸入
- pid2.Pv2=count_AND; //速度PID輸入
-
- Angle_PID_Calc(); //角度PID計(jì)算
- Speed_PID_Calc(); //速度PID計(jì)算
-
- PIDoutALL=pid2.OUT2+pid.OUT; //雙環(huán)PID合成
-
-
- if(PIDoutALL<0)
- ALL_right(-PIDoutALL+13);
- if(PIDoutALL>0)
- ALL_left(PIDoutALL+13);
-
-
-
- // if(temp<0)
- // {
- //// LCD_ShowChar(30+48,200,'-',16,0); //顯示負(fù)號(hào)
- // temp=-temp; //轉(zhuǎn)為正數(shù)
- //// }else LCD_ShowChar(30+48,200,' ',16,0); //去掉負(fù)號(hào)
- //// LCD_ShowNum(30+48+8,200,temp/100,3,16); //顯示整數(shù)部分
- //// LCD_ShowNum(30+48+40,200,temp%10,1,16); //顯示小數(shù)部分
- // temp=pitch*10;
- //
- //
- // if(temp<0)
- // {
- //// LCD_ShowChar(30+48,220,'-',16,0); //顯示負(fù)號(hào)
- // temp=-temp; //轉(zhuǎn)為正數(shù)
- // }else LCD_ShowChar(30+48,220,' ',16,0); //去掉負(fù)號(hào)
- // LCD_ShowNum(30+48+8,220,temp/10,3,16); //顯示整數(shù)部分
- // LCD_ShowNum(30+48+40,220,temp%10,1,16); //顯示小數(shù)部分
- // temp=roll*10;
- //
- //
- // if(temp<0)
- // {
- // LCD_ShowChar(30+48,240,'-',16,0); //顯示負(fù)號(hào)
- // temp=-temp; //轉(zhuǎn)為正數(shù)
- // }else LCD_ShowChar(30+48,240,' ',16,0); //去掉負(fù)號(hào)
- // LCD_ShowNum(30+48+8,240,temp/10,3,16); //顯示整數(shù)部分
- // LCD_ShowNum(30+48+40,240,temp%10,1,16); //顯示小數(shù)部分
- // temp=yaw*10;
- //
- //
- //
- // if(temp<0)
- // {
- // LCD_ShowChar(30+48,260,'-',16,0); //顯示負(fù)號(hào)
- // temp=-temp; //轉(zhuǎn)為正數(shù)
- // }else LCD_ShowChar(30+48,260,' ',16,0); //去掉負(fù)號(hào)
- // LCD_ShowNum(30+48+8,260,temp/10,3,16); //顯示整數(shù)部分
- // LCD_ShowNum(30+48+40,260,temp%10,1,16); //顯示小數(shù)部分
- // t=0;
- //// LED0=!LED0;//LED閃爍
- // }
- }
- // t++;
- if(Old_Count != Count) //如果先前的計(jì)數(shù)值與當(dāng)前計(jì)數(shù)值不相等,說明編碼器已轉(zhuǎn)動(dòng)打印當(dāng)前數(shù)值
- {
- LED1=0;
- OLED_ShowStr(0, 0,"AUTO Parking Station",1);
- }
- //
- }
-
- }
復(fù)制代碼
所有資料51hei提供下載:
平衡車.rar
(379.73 KB, 下載次數(shù): 221)
2018-8-6 17:38 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
這里還有一個(gè)是我平衡車3D模型,可以進(jìn)行3D打印:
|
-
-
平衡車3D模型.zip
2018-8-6 17:54 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
771.74 KB, 下載次數(shù): 59, 下載積分: 黑幣 -5
評(píng)分
-
查看全部評(píng)分
|