2021-08-22 16:18:33 索煒達電子 727
項目編號:E430
文件大?。?7M
源碼說明:帶中文注釋
開發(fā)環(huán)境:C編譯器
簡要概述
平衡車代碼+MATLAB上位機代碼 本來是想做一個小車只需采集并發(fā)送數(shù)據(jù),接收并執(zhí)行simulink的命令,用simulink來做姿態(tài)解算和PID平衡控制的項目,但是在調(diào)試了三天之后以失敗告終,主要原因是藍牙模塊的傳輸速度太慢了,所以就轉而求其次,用matlab寫了個上位機做姿態(tài)顯示并且發(fā)送一些指令控制小車前進后退,當然也可以用手機藍牙串口發(fā)送指令來控制。
軟件架構
1.上位機的代碼和exe程序在MATLABGUI文件夾。
2.平衡小車代碼在balance_car文件夾。
相關說明
1.陀螺儀X軸正方向為小車的正前方。
2.我的主控芯片是STM32F103C8T6。
3.電機驅動模塊用的L298N。
4.OLED使用的是4線SPI通訊協(xié)議,3線SPI應該亦可以。
5.PID參數(shù)我沒有認真調(diào),最近比較忙調(diào)了一個上午感覺能用就沒再調(diào)了,如果車體跟我一樣的話不用調(diào)或者微調(diào)就可以跑起來。
6.主控板我是參照我畫的原理圖用洞洞板搭的,有興趣的小伙伴可以畫板制作PCB,如果你是L298N的話請直接使用我的管腳連接方案,這也是我看手冊規(guī)劃出來的,畢竟在程序里面改管腳是比較麻煩的而且容易出現(xiàn)BUG。
7.沒有做航向角的原因是MPU6050沒有磁力計,計算出來的航向角偏移的很厲害,而且對于平衡車來說沒有航向角對控制沒有影響,而且好的磁力計不便宜。有興趣的話可以加個磁力計,并且MPU也支持外擴磁力計很方便,這樣的話就可以做慣性導航。
8.由于小車做了拿起保護,必須要將小車平放保持Pitch和Roll在0度左右兩秒才能啟動。
硬件原理圖
目錄│文件列表:
└ balancecar
├ balancecar_code
│ │ keilkill.bat
│ ├ MiniBalance
│ │ ├ CONTROL
│ │ │ │ control.c
│ │ │ └ control.h
│ │ ├ DataScope_DP
│ │ │ │ DataScope_DP.C
│ │ │ └ DataScope_DP.h
│ │ ├ DMP
│ │ │ │ dmpKey.h
│ │ │ │ dmpmap.h
│ │ │ │ inv_mpu.c
│ │ │ │ inv_mpu.h
│ │ │ │ inv_mpu_dmp_motion_driver.c
│ │ │ └ inv_mpu_dmp_motion_driver.h
│ │ ├ filter
│ │ │ │ filter.c
│ │ │ └ filter.h
│ │ ├ MPU6050
│ │ │ │ MPU6050.c
│ │ │ └ mpu6050.h
│ │ └ show
│ │ │ show.c
│ │ └ show.h
│ ├ MiniBalance_COER
│ │ │ core_cm3.c
│ │ │ core_cm3.h
│ │ └ startup_stm32f10x_md.s
│ ├ MiniBalance_HARDWARE
│ │ ├ ADC
│ │ │ │ adc.c
│ │ │ └ adc.h
│ │ ├ DataScope_DP
│ │ │ │ DataScope_DP.C
│ │ │ └ DataScope_DP.h
│ │ ├ DMP
│ │ │ │ dmpKey.h
│ │ │ │ dmpmap.h
│ │ │ │ inv_mpu.c
│ │ │ │ inv_mpu.h
│ │ │ │ inv_mpu_dmp_motion_driver.c
│ │ │ └ inv_mpu_dmp_motion_driver.h
│ │ ├ ENCODER
│ │ │ │ encoder.c
│ │ │ └ encoder.h
│ │ ├ EXTI
│ │ │ │ exti.c
│ │ │ └ exti.h
│ │ ├ IIC
│ │ │ │ IOI2C.c
│ │ │ └ IOI2C.h
│ │ ├ KEY
│ │ │ │ key.c
│ │ │ └ key.h
│ │ ├ LED
│ │ │ │ LED.C
│ │ │ └ LED.H
│ │ ├ MOTOR
│ │ │ │ motor.c
│ │ │ └ motor.h
│ │ ├ MPU6050
│ │ │ │ MPU6050.c
│ │ │ └ mpu6050.h
│ │ ├ MY_OLED
│ │ │ │ my_oled.c
│ │ │ └ my_oled.h
│ │ ├ OLED
│ │ │ │ oled.c
│ │ │ │ oled.h
│ │ │ └ oledfont.h
│ │ ├ STMFLASH
│ │ │ │ stmflash.c
│ │ │ └ stmflash.h
│ │ ├ TIMER
│ │ │ │ timer.c
│ │ │ └ timer.h
│ │ ├ USART2
│ │ │ │ usart2.c
│ │ │ └ usart2.h
│ │ └ USART3
│ │ │ usart3.c
│ │ └ usart3.h
│ ├ OBJ
│ │ │ adc.crf
│ │ │ adc.d
│ │ │ adc.o
│ │ │ control.crf
│ │ │ control.d
│ │ │ control.o
│ │ │ core_cm3.crf
│ │ │ core_cm3.d
│ │ │ core_cm3.o
│ │ │ datascope_dp.crf
│ │ │ datascope_dp.d
│ │ │ datascope_dp.o
│ │ │ delay.crf
│ │ │ delay.d
│ │ │ delay.o
│ │ │ encoder.crf
│ │ │ encoder.d
│ │ │ encoder.o
│ │ │ ExtDll.iex
│ │ │ exti.crf
│ │ │ exti.d
│ │ │ exti.o
│ │ │ filter.crf
│ │ │ filter.d
│ │ │ filter.o
│ │ │ inv_mpu.crf
│ │ │ inv_mpu.d
│ │ │ inv_mpu.o
│ │ │ inv_mpu_dmp_motion_driver.crf
│ │ │ inv_mpu_dmp_motion_driver.d
│ │ │ inv_mpu_dmp_motion_driver.o
│ │ │ ioi2c.crf
│ │ │ ioi2c.d
│ │ │ ioi2c.o
│ │ │ key.crf
│ │ │ key.d
│ │ │ key.o
│ │ │ led.crf
│ │ │ led.d
│ │ │ led.o
│ │ │ MiniBalance.axf
│ │ │ MiniBalance.build_log.htm
│ │ │ minibalance.crf
│ │ │ minibalance.d
│ │ │ MiniBalance.hex
│ │ │ MiniBalance.htm
│ │ │ MiniBalance.lnp
│ │ │ minibalance.o
│ │ │ MiniBalance.sct
│ │ │ MiniBalance_MiniBalance.dep
│ │ │ MiniBalance_sct.Bak
│ │ │ misc.crf
│ │ │ misc.d
│ │ │ misc.o
│ │ │ motor.crf
│ │ │ motor.d
│ │ │ motor.o
│ │ │ mpu6050.crf
│ │ │ mpu6050.d
│ │ │ mpu6050.o
│ │ │ my_oled.crf
│ │ │ my_oled.d
│ │ │ oled.crf
│ │ │ oled.d
│ │ │ oled.o
│ │ │ show.crf
│ │ │ show.d
│ │ │ show.o
│ │ │ startup_stm32f10x_md.d
│ │ │ startup_stm32f10x_md.o
│ │ │ stm32f10x_adc.crf
│ │ │ stm32f10x_adc.d
│ │ │ stm32f10x_adc.o
│ │ │ stm32f10x_bkp.crf
│ │ │ stm32f10x_bkp.d
│ │ │ stm32f10x_bkp.o
│ │ │ stm32f10x_can.crf
│ │ │ stm32f10x_can.d
│ │ │ stm32f10x_can.o
│ │ │ stm32f10x_cec.crf
│ │ │ stm32f10x_cec.d
│ │ │ stm32f10x_cec.o
│ │ │ stm32f10x_crc.crf
│ │ │ stm32f10x_crc.d
│ │ │ stm32f10x_crc.o
│ │ │ stm32f10x_dac.crf
│ │ │ stm32f10x_dac.d
│ │ │ stm32f10x_dac.o
│ │ │ stm32f10x_dbgmcu.crf
│ │ │ stm32f10x_dbgmcu.d
│ │ │ stm32f10x_dbgmcu.o
│ │ │ stm32f10x_dma.crf
│ │ │ stm32f10x_dma.d
│ │ │ stm32f10x_dma.o
│ │ │ stm32f10x_exti.crf
│ │ │ stm32f10x_exti.d
│ │ │ stm32f10x_exti.o
│ │ │ stm32f10x_flash.crf
│ │ │ stm32f10x_flash.d
│ │ │ stm32f10x_flash.o
│ │ │ stm32f10x_fsmc.crf
│ │ │ stm32f10x_fsmc.d
│ │ │ stm32f10x_fsmc.o
│ │ │ stm32f10x_gpio.crf
│ │ │ stm32f10x_gpio.d
│ │ │ stm32f10x_gpio.o
│ │ │ stm32f10x_i2c.crf
│ │ │ stm32f10x_i2c.d
│ │ │ stm32f10x_i2c.o
│ │ │ stm32f10x_it.crf
│ │ │ stm32f10x_it.d
│ │ │ stm32f10x_it.o
│ │ │ stm32f10x_iwdg.crf
│ │ │ stm32f10x_iwdg.d
│ │ │ stm32f10x_iwdg.o
│ │ │ stm32f10x_pwr.crf
│ │ │ stm32f10x_pwr.d
│ │ │ stm32f10x_pwr.o
│ │ │ stm32f10x_rcc.crf
│ │ │ stm32f10x_rcc.d
│ │ │ stm32f10x_rcc.o
│ │ │ stm32f10x_rtc.crf
│ │ │ stm32f10x_rtc.d
│ │ │ stm32f10x_rtc.o
│ │ │ stm32f10x_sdio.crf
│ │ │ stm32f10x_sdio.d
│ │ │ stm32f10x_sdio.o
│ │ │ stm32f10x_spi.crf
│ │ │ stm32f10x_spi.d
│ │ │ stm32f10x_spi.o
│ │ │ stm32f10x_tim.crf
│ │ │ stm32f10x_tim.d
│ │ │ stm32f10x_tim.o
│ │ │ stm32f10x_usart.crf
│ │ │ stm32f10x_usart.d
│ │ │ stm32f10x_usart.o
│ │ │ stm32f10x_wwdg.crf
│ │ │ stm32f10x_wwdg.d
│ │ │ stm32f10x_wwdg.o
│ │ │ stmflash.crf
│ │ │ stmflash.d
│ │ │ stmflash.o
│ │ │ sys.crf
│ │ │ sys.d
│ │ │ sys.o
│ │ │ system_stm32f10x.crf
│ │ │ system_stm32f10x.d
│ │ │ system_stm32f10x.o
│ │ │ timer.crf
│ │ │ timer.d
│ │ │ timer.o
│ │ │ usart.crf
│ │ │ usart.d
│ │ │ usart.o
│ │ │ usart2.crf
│ │ │ usart2.d
│ │ │ usart2.o
│ │ │ usart3.crf
│ │ │ usart3.d
│ │ └ usart3.o
│ ├ STM32F10x_FWLib
│ │ ├ inc
│ │ │ │ misc.h
│ │ │ │ stm32f10x_adc.h
│ │ │ │ stm32f10x_bkp.h
│ │ │ │ stm32f10x_can.h
│ │ │ │ stm32f10x_cec.h
│ │ │ │ stm32f10x_crc.h
│ │ │ │ stm32f10x_dac.h
│ │ │ │ stm32f10x_dbgmcu.h
│ │ │ │ stm32f10x_dma.h
│ │ │ │ stm32f10x_exti.h
│ │ │ │ stm32f10x_flash.h
│ │ │ │ stm32f10x_fsmc.h
│ │ │ │ stm32f10x_gpio.h
│ │ │ │ stm32f10x_i2c.h
│ │ │ │ stm32f10x_iwdg.h
│ │ │ │ stm32f10x_pwr.h
│ │ │ │ stm32f10x_rcc.h
│ │ │ │ stm32f10x_rtc.h
│ │ │ │ stm32f10x_sdio.h
│ │ │ │ stm32f10x_spi.h
│ │ │ │ stm32f10x_tim.h
│ │ │ │ stm32f10x_usart.h
│ │ │ └ stm32f10x_wwdg.h
│ │ └ src
│ │ │ misc.c
│ │ │ stm32f10x_adc.c
│ │ │ stm32f10x_bkp.c
│ │ │ stm32f10x_can.c
│ │ │ stm32f10x_cec.c
│ │ │ stm32f10x_crc.c
│ │ │ stm32f10x_dac.c
│ │ │ stm32f10x_dbgmcu.c
│ │ │ stm32f10x_dma.c
│ │ │ stm32f10x_exti.c
│ │ │ stm32f10x_flash.c
│ │ │ stm32f10x_fsmc.c
│ │ │ stm32f10x_gpio.c
│ │ │ stm32f10x_i2c.c
│ │ │ stm32f10x_iwdg.c
│ │ │ stm32f10x_pwr.c
│ │ │ stm32f10x_rcc.c
│ │ │ stm32f10x_rtc.c
│ │ │ stm32f10x_sdio.c
│ │ │ stm32f10x_spi.c
│ │ │ stm32f10x_tim.c
│ │ │ stm32f10x_usart.c
│ │ └ stm32f10x_wwdg.c
│ ├ SYSTEM
│ │ ├ delay
│ │ │ │ delay.c
│ │ │ └ delay.h
│ │ ├ sys
│ │ │ │ sys.c
│ │ │ └ sys.h
│ │ └ usart
│ │ │ usart.c
│ │ └ usart.h
│ └ USER
│ │ EventRecorderStub.scvd
│ │ MiniBalance.c
│ │ MiniBalance.map
│ │ MiniBalance.uvgui.passoni
│ │ MiniBalance.uvguix.25521
│ │ MiniBalance.uvgui_passoni.bak
│ │ MiniBalance.uvopt
│ │ MiniBalance.uvoptx
│ │ MiniBalance.uvproj.saved_uv4
│ │ MiniBalance.uvprojx
│ │ MiniBalance_MiniBalance.dep
│ │ MiniBalance_uvopt.bak
│ │ MiniBalance_uvproj.bak
│ │ startup_stm32f10x_md.lst
│ │ stm32f10x.h
│ │ stm32f10x_conf.h
│ │ stm32f10x_it.c
│ │ stm32f10x_it.h
│ │ system_stm32f10x.c
│ │ system_stm32f10x.h
│ ├ DebugConfig
│ │ └ MiniBalance_STM32F103C8_1.0.0.dbgconf
│ └ RTE
│ └ _MiniBalance
│ └ RTE_Components.h
├ MATLABGUI
│ │ callback.m
│ │ cargui2.fig
│ │ cargui2.m
│ │ cargui2.prj
│ │ readme
│ ├ cargui2
│ │ │ PackagingLog.html
│ │ ├ for_redistribution
│ │ │ └ MyAppInstaller_web.exe
│ │ ├ for_redistribution_files_only
│ │ │ │ cargui2.exe
│ │ │ │ icon.ico
│ │ │ │ readme.txt
│ │ │ └ splash.png
│ │ └ for_testing
│ │ │ cargui2.exe
│ │ │ mccExcludedFiles.log
│ │ │ readme.txt
│ │ │ requiredMCRProducts.txt
│ │ └ splash.png
│ └ cargui2_resources
│ │ icon.ico
│ │ icon_16.png
│ │ icon_24.png
│ │ icon_32.png
│ └ icon_48.png
└ png
│ IMG_20210712_110320.jpg
│ IMG_20210712_110326.jpg
│ QQ截圖20210712111616.png
│ sch.png
└ 航天 地球 航拍照片.jpg