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

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

QQ登錄

只需一步,快速開始

搜索
查看: 20512|回復(fù): 16
打印 上一主題 下一主題
收起左側(cè)

自己做了一個(gè)平衡車,共享一下STM32程序代碼

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
本帖最后由 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ǔ)下圖片:


電池:(3顆18650組成12V,賊丑)

電機(jī)驅(qū)動(dòng)板L298N:

編碼電機(jī):

STM32F103ZET6主控板:(實(shí)際應(yīng)用中STM32F103C8T6足以,因?yàn)椴灰X的所以用這塊板)以及NFR24L01模塊用作無限遙控,因?yàn)檫@部分比較簡答,所以展示還沒寫:

車身結(jié)構(gòu)是3D打印的,上部分沒打好還有超聲波模塊支架,下面附加的模型內(nèi)有
單片機(jī)源程序如下:

  1. #include "stm32f10x.h"
  2. #include "sys.h"
  3. #include "PWM.h"
  4. #include "delay.h"
  5. #include "usart.h"        
  6. #include "mpu6050.h"
  7. #include "inv_mpu.h"
  8. #include "inv_mpu_dmp_motion_driver.h"
  9. #include "LED.h"
  10. #include "encode.h"
  11. #include "oled.h"
  12. #include "pid.h"
  13. #include "timer.h"
  14. #include "key.h"

  15. extern float Count;  ///編碼器故障,展示只有編碼器2有用
  16. extern float Count2;
  17. extern float countD_value;
  18. extern float Old_Count;
  19. extern float Old_Count2;
  20. extern float countD_value2;
  21. extern float count_AND;

  22. u16        Parameter = 1881;                                                                                                                                        //輸入編碼器線數(shù)
  23. //u8 t=0,report=1;                        //默認(rèn)開啟上報(bào)
  24. u8 key;
  25. float pitch,roll,yaw;                 //歐拉角
  26. short aacx,aacy,aacz;                //加速度傳感器原始數(shù)據(jù)
  27. short gyrox,gyroy,gyroz;        //陀螺儀原始數(shù)據(jù)
  28. short temp;                                        //溫度        
  29. float PIDoutALL;


  30. void int_all(void);
  31. void Get_Data(void);






  32. int main(void)
  33. {  
  34.         int_all();
  35.         while(1)
  36.         Get_Data();
  37.         
  38. }
  39.          
  40.         




  41. void int_all(void)
  42. {
  43.     uart_init(115200);
  44.           NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
  45.           SystemInit();
  46.           delay_init();
  47.                 NVIC_Cfg();
  48.                 GPIO_Cfg();
  49.     TIM1_Init();
  50.     TIME2_INT(10,7199);//1ms        
  51.           TIM_Cfg();
  52.     TIM_Cmd(TIM3,ENABLE);
  53.           TIM4_Init();
  54.           OLED_Init();
  55.           MPU_Init();                                        //初始化MPU6050
  56.           LED1_INT();
  57.           Angle_PID_init();
  58.           Speed_PID_init();
  59.           KEY_Init();
  60. }


  61. void Get_Data(void)
  62. {
  63. //        u8 t=0,report=1;                        //默認(rèn)開啟上報(bào)
  64. //        u8 key;
  65. //        float pitch,roll,yaw;                 //歐拉角
  66. //        short aacx,aacy,aacz;                //加速度傳感器原始數(shù)據(jù)
  67. //        short gyrox,gyroy,gyroz;        //陀螺儀原始數(shù)據(jù)
  68. //        short temp;                                        //溫度        
  69. //        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
  70. //        delay_init();        //延時(shí)初始化
  71. //        usmart_dev.init(72);                //初始化USMART
  72. //        LED_Init();                                          //初始化與LED連接的硬件接口
  73. //        KEY_Init();                                        //初始化按鍵
  74. //        LCD_Init();                                           //初始化LCD  
  75. //        MPU_Init();                                        //初始化MPU6050
  76.         LED1=1;
  77.         LED2=1;
  78.         OLED_ShowStr(16, 0,"Balance Car",2);
  79. //  OLED_ON();

  80. //        while(mpu_dmp_init())
  81. //         {
  82.                 LED2=0;
  83.                 OLED_ShowStr(0, 2,"Int MPU6050 . ",2);
  84.                 delay_ms(300);
  85.                 OLED_ShowStr(0, 2,"Int MPU6050 ..",2);
  86.                 delay_ms(300);
  87.                 OLED_ShowStr(0, 2,"Int MPU6050 ...",2);
  88.                 delay_ms(300);
  89.                 OLED_ShowStr(0, 2,"               ",2);
  90. //        }  
  91.         OLED_ShowStr(0, 2,"MPU6050 Check Ok",2);
  92.          
  93. //        LCD_ShowString(30,130,200,16,16,"MPU6050 OK");
  94. //        LCD_ShowString(30,150,200,16,16,"KEY0:UPLOAD ON/OFF");
  95. //        POINT_COLOR=BLUE;//設(shè)置字體為藍(lán)色
  96. //         LCD_ShowString(30,170,200,16,16,"UPLOAD ON ");         
  97. //         LCD_ShowString(30,200,200,16,16," Temp:    . C");        
  98. //         LCD_ShowString(30,220,200,16,16,"Pitch:    . C");        
  99. //         LCD_ShowString(30,240,200,16,16," Roll:    . C");         
  100. //         LCD_ShowString(30,260,200,16,16," Yaw :    . C");         
  101.          while(1)
  102.         {
  103.                 key=KEY_Scan(0);
  104. //                if(key==KEY0_PRES)
  105. //                {
  106. //                        report=!report;
  107. //                        if(report)LCD_ShowString(30,170,200,16,16,"UPLOAD ON ");
  108. //                        else LCD_ShowString(30,170,200,16,16,"UPLOAD OFF");
  109. //                }
  110.                 LED1=1;
  111.                 if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0)
  112.                 {
  113.                         temp=MPU_Get_Temperature();        //得到溫度值
  114.                         MPU_Get_Accelerometer(&aacx,&aacy,&aacz);        //得到加速度傳感器數(shù)據(jù)
  115.                         MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);        //得到陀螺儀數(shù)據(jù)
  116. //                        if(report)mpu6050_send_data(aacx,aacy,aacz,gyrox,gyroy,gyroz);//用自定義幀發(fā)送加速度和陀螺儀原始數(shù)據(jù)
  117. //                        if(report)usart1_report_imu(aacx,aacy,aacz,gyrox,gyroy,gyroz,(int)(roll*100),(int)(pitch*100),(int)(yaw*10));
  118. //            if((t%10)==0)
  119. //                   {
  120.          pid.Pv=pitch;         //角度PID輸入
  121.                            pid2.Pv2=count_AND;   //速度PID輸入
  122.                         
  123.                                  Angle_PID_Calc();    //角度PID計(jì)算
  124.                            Speed_PID_Calc();    //速度PID計(jì)算
  125.                           
  126.                            PIDoutALL=pid2.OUT2+pid.OUT; //雙環(huán)PID合成
  127.                         
  128.                         
  129.                                  if(PIDoutALL<0)
  130.                                  ALL_right(-PIDoutALL+13);
  131.                                  if(PIDoutALL>0)
  132.                                  ALL_left(PIDoutALL+13);
  133.                                  
  134.                                  
  135.                                  
  136. //                                if(temp<0)
  137. //                                {
  138. ////                                        LCD_ShowChar(30+48,200,'-',16,0);                //顯示負(fù)號(hào)
  139. //                                        temp=-temp;                //轉(zhuǎn)為正數(shù)
  140. ////                                }else LCD_ShowChar(30+48,200,' ',16,0);                //去掉負(fù)號(hào)
  141. ////                                LCD_ShowNum(30+48+8,200,temp/100,3,16);                //顯示整數(shù)部分            
  142. ////                                LCD_ShowNum(30+48+40,200,temp%10,1,16);                //顯示小數(shù)部分
  143. //                                temp=pitch*10;
  144. //                                
  145. //                                
  146. //                                if(temp<0)
  147. //                                {
  148. ////                                        LCD_ShowChar(30+48,220,'-',16,0);                //顯示負(fù)號(hào)
  149. //                                        temp=-temp;                //轉(zhuǎn)為正數(shù)
  150. //                                }else LCD_ShowChar(30+48,220,' ',16,0);                //去掉負(fù)號(hào)
  151. //                                LCD_ShowNum(30+48+8,220,temp/10,3,16);                //顯示整數(shù)部分            
  152. //                                LCD_ShowNum(30+48+40,220,temp%10,1,16);                //顯示小數(shù)部分
  153. //                                temp=roll*10;
  154. //                                
  155. //                                
  156. //                                if(temp<0)
  157. //                                {
  158. //                                        LCD_ShowChar(30+48,240,'-',16,0);                //顯示負(fù)號(hào)
  159. //                                        temp=-temp;                //轉(zhuǎn)為正數(shù)
  160. //                                }else LCD_ShowChar(30+48,240,' ',16,0);                //去掉負(fù)號(hào)
  161. //                                LCD_ShowNum(30+48+8,240,temp/10,3,16);                //顯示整數(shù)部分            
  162. //                                LCD_ShowNum(30+48+40,240,temp%10,1,16);                //顯示小數(shù)部分
  163. //                                temp=yaw*10;
  164. //                                
  165. //                                
  166. //                                
  167. //                                if(temp<0)
  168. //                                {
  169. //                                        LCD_ShowChar(30+48,260,'-',16,0);                //顯示負(fù)號(hào)
  170. //                                        temp=-temp;                //轉(zhuǎn)為正數(shù)
  171. //                                }else LCD_ShowChar(30+48,260,' ',16,0);                //去掉負(fù)號(hào)
  172. //                                LCD_ShowNum(30+48+8,260,temp/10,3,16);                //顯示整數(shù)部分            
  173. //                                LCD_ShowNum(30+48+40,260,temp%10,1,16);                //顯示小數(shù)部分  
  174. //                                t=0;
  175. ////                                LED0=!LED0;//LED閃爍
  176. //                  }
  177.                 }
  178. //                t++;
  179.                 if(Old_Count != Count)                                                                                                                //如果先前的計(jì)數(shù)值與當(dāng)前計(jì)數(shù)值不相等,說明編碼器已轉(zhuǎn)動(dòng)打印當(dāng)前數(shù)值
  180.                 {
  181.                         LED1=0;
  182.                         OLED_ShowStr(0, 0,"AUTO Parking Station",1);
  183.                 }
  184. //                                
  185.         }         
  186.         
  187. }
復(fù)制代碼

所有資料51hei提供下載:
平衡車.rar (379.73 KB, 下載次數(shù): 221)
這里還有一個(gè)是我平衡車3D模型,可以進(jìn)行3D打印:





平衡車3D模型.zip

771.74 KB, 下載次數(shù): 59, 下載積分: 黑幣 -5

評(píng)分

參與人數(shù) 3黑幣 +70 收起 理由
luliang02003 + 10 共享資料的黑幣獎(jiǎng)勵(lì)!
songfengyi + 10 共享資料的黑幣獎(jiǎng)勵(lì)!
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2018-8-6 17:39 | 只看該作者
好東東 能補(bǔ)一下圖嗎?本站所有會(huì)員等級(jí)都能發(fā)圖的
回復(fù)

使用道具 舉報(bào)

板凳
ID:381406 發(fā)表于 2018-8-6 17:47 | 只看該作者
admin 發(fā)表于 2018-8-6 17:39
好東東 能補(bǔ)一下圖嗎?本站所有會(huì)員等級(jí)都能發(fā)圖的

好的,我先拍下圖片,謝謝您

評(píng)分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

地板
ID:383832 發(fā)表于 2018-8-7 17:45 | 只看該作者
非常不錯(cuò),有圖更好
回復(fù)

使用道具 舉報(bào)

5#
ID:273087 發(fā)表于 2018-8-15 16:04 | 只看該作者
厲害厲害
回復(fù)

使用道具 舉報(bào)

6#
ID:321034 發(fā)表于 2018-9-3 13:58 | 只看該作者
老哥~  你車輪和電機(jī)在哪買的 連接可以發(fā)一下不
回復(fù)

使用道具 舉報(bào)

7#
ID:379452 發(fā)表于 2018-9-5 13:34 | 只看該作者
這也太強(qiáng)了吧
回復(fù)

使用道具 舉報(bào)

8#
ID:403941 發(fā)表于 2018-9-30 10:08 | 只看該作者
為什么打不開,只要頭文件,沒有可以打開的程序
回復(fù)

使用道具 舉報(bào)

9#
ID:169916 發(fā)表于 2018-11-14 10:38 | 只看該作者
好東西,謝謝分享,最近在做兩輪平衡小車
回復(fù)

使用道具 舉報(bào)

10#
ID:457495 發(fā)表于 2018-12-28 17:34 | 只看該作者
有用什么 傳感器嗎
回復(fù)

使用道具 舉報(bào)

11#
ID:280082 發(fā)表于 2019-2-21 14:14 | 只看該作者
參考一下
回復(fù)

使用道具 舉報(bào)

12#
ID:250818 發(fā)表于 2019-7-6 06:50 來自手機(jī) | 只看該作者
謝謝樓主分享
回復(fù)

使用道具 舉報(bào)

13#
ID:648092 發(fā)表于 2019-11-23 21:30 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

14#
ID:520507 發(fā)表于 2019-12-24 20:37 來自手機(jī) | 只看該作者
大佬,請(qǐng)問下使用扭力和減速比與你的不同的電機(jī),需要修改程序的哪里?
回復(fù)

使用道具 舉報(bào)

15#
ID:894365 發(fā)表于 2021-3-20 16:53 | 只看該作者
樓主牛逼
!!!!
回復(fù)

使用道具 舉報(bào)

16#
ID:1130286 發(fā)表于 2024-8-7 17:27 | 只看該作者
厲害,佩服佩服,我有個(gè)壞的平衡車能修好嗎
回復(fù)

使用道具 舉報(bào)

17#
ID:1113739 發(fā)表于 2024-9-5 11:54 | 只看該作者
老哥,這機(jī)械位置結(jié)構(gòu)也能站得起來,強(qiáng)啊
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区麻豆 | 国产美女永久免费无遮挡 | 91成人小视频 | 中文在线视频 | 亚洲人人 | 精品中文在线 | 国产精品久久一区二区三区 | 中文字幕在线观看一区 | 国产精品美女久久久久久久网站 | 干干干操操操 | 国产日韩av一区二区 | 蜜桃特黄a∨片免费观看 | 成人在线观看免费 | av黄色免费 | avtt国产 | 欧美一级在线免费 | 中文字幕高清免费日韩视频在线 | jizjizjiz中国护士18 | 天天综合久久 | 欧美国产在线一区 | 久久三级影院 | 九九av | 欧美一级久久 | 国产高清精品网站 | 波多野结衣先锋影音 | 综合激情av| 中文字幕亚洲在线 | 午夜精品久久久久久久久久久久 | 中文字幕在线观看视频一区 | 国产激情第一页 | 日韩一区二区在线视频 | 久久九九99 | 久久婷婷国产 | 蜜桃一区二区三区 | 日本男人天堂 | 日韩中文在线 | 欧美a在线 | 亚洲欧美国产毛片在线 | 四虎影院在线观看av | 成人激情视频在线 | 亚洲免费高清 |