標(biāo)題:
STM32F407平衡小車源碼
[打印本頁]
作者:
夕陽無限
時(shí)間:
2018-10-27 16:48
標(biāo)題:
STM32F407平衡小車源碼
網(wǎng)上搜了很多資料最后用MPU6050陀螺儀通過角度和電機(jī)速度做成的串級PID平衡小車
實(shí)驗(yàn)器材:
探索者STM32F4開發(fā)板
實(shí)驗(yàn)?zāi)康?
學(xué)習(xí)MPU6050 六軸傳感器(三軸加速度+三軸陀螺儀)的使用.
硬件資源:
1,DS0(連接在PF9)
2,串口1(波特率:115200,PA9/PA10連接在板載USB轉(zhuǎn)串口芯片CH340上面)
3,ALIENTEK 2.8/3.5/4.3/7寸TFTLCD模塊(通過FSMC驅(qū)動(dòng),FSMC_NE4接LCD片選/A6接RS)
4,KEY0按鍵(連接在PE4)
5,MPU6050傳感器(連接在PB8(SCL),PB9(SDA)上面,INT(PC0)未用到).
實(shí)驗(yàn)現(xiàn)象:
本實(shí)驗(yàn)開機(jī)后,先初始化MPU6050,然后利用DMP庫,初始化MPU6050及使能DMP,最后,在死循環(huán)里面不停
讀。簻囟葌鞲衅、加速度傳感器、陀螺儀、DMP姿態(tài)解算后的歐拉角等數(shù)據(jù),通過串口上報(bào)給上位機(jī)(溫
度不上報(bào)),利用上位機(jī)軟件(ANO_Tech匿名四軸上位機(jī)_V2.6.exe),可以實(shí)時(shí)顯示MPU6050的傳感器狀
態(tài)曲線,并顯示3D姿態(tài),可以通過KEY0按鍵開啟/關(guān)閉數(shù)據(jù)上傳功能。同時(shí),在LCD模塊上面顯示溫度和歐拉
角等信息。DS0來指示程序正在運(yùn)行。另外,本例程也可以通過USMART調(diào)用MPU_Read_Byte/MPU_Write_Byte
等函數(shù),來實(shí)現(xiàn)對MPU6050寄存器的讀寫操作(僅在UPLOAD OFF狀態(tài)下).
注意事項(xiàng):
1,4.3寸和7寸屏需要比較大電流,USB供電可能不足,請用外部電源適配器(推薦外接12V 1A電源).
2,本例程在LCD_Init函數(shù)里面(在ILI93xx.c),用到了printf,如果不初始化串口1,將導(dǎo)致液晶無法顯示!!
3,ANO_Tech匿名四軸上位機(jī)_V2.6.exe軟件所在路徑:開發(fā)板光盤-->6,軟件資料-->軟件-->匿名四軸上位機(jī)
4,ANO_Tech匿名四軸上位機(jī)使用方法,請看軟件文件夾下的README.txt。
5,注意:串口波特率為500Kbps!!
PS:ANO_Tech匿名四軸上位機(jī) 功能十分強(qiáng)大,學(xué)習(xí)使用需要花費(fèi)一點(diǎn)時(shí)間(半天左右),請大家耐心看匿名提供
的視頻/文檔教程學(xué)習(xí),不要浮躁。
單片機(jī)源程序如下:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "usmart.h"
#include "mpu6050.h"
#include "inv_mpu.h"
#include "inv_mpu_dmp_motion_driver.h"
#include "pwmout.h"
#include "control.h"
#include "oled.h"
#include "exti.h"
#include "algorithm_pid.h"
int Encoder_Left,Encoder_Right;
int Moto1,Moto2; //電機(jī)PWM變量 應(yīng)是Motor的 向Moto致敬
float Angle_Balance,Gyro_Balance;
extern short s1,s2;
extern PID_Struct PID_Pitch;
float pitch,roll,yaw; //歐拉角
short aacx,aacy,aacz; //加速度傳感器原始數(shù)據(jù)
short gyrox,gyroy,gyroz; //陀螺儀原始數(shù)據(jù)
short temp;
float x;
int main(void)
{
u8 t=0;
int t1=0,t2=0;
Stm32_Clock_Init(336,25,2,7);//設(shè)置時(shí)鐘,168Mhz
delay_init(168); //延時(shí)初始化
TIM4_PWM_Init(7200,0);
led_init(); //初始化LED
key_init(); //初始化按鍵
MPU_Init(); //初始化MPU6050
mpu_dmp_init();
OLED_Init();
MiniBalance_Motor_Init();
EXTIX_Init();
TIM3_Int_Init(50-1,8400-1);
while(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((t%5)==0)
{
temp=pitch*10;
if(temp<0)
{
OLED_ShowString(0,0,"-",16); //顯示負(fù)號
temp=-temp; //轉(zhuǎn)為正數(shù)
}else OLED_ShowString(0,0," ",16); //去掉負(fù)號
OLED_ShowNum(10,0,temp/10,3,16); //顯示整數(shù)部分
OLED_ShowNum(26,0,temp%10,1,16); //顯示小數(shù)部分
t1=s1;
if(t1<0)
{
OLED_ShowString(60,20,"-",16); //顯示負(fù)號
t1=-t1; //轉(zhuǎn)為正數(shù)
}else OLED_ShowString(60,20," ",16); //去掉負(fù)號
OLED_ShowNum(70,20,t1,5,16); //顯示整數(shù)部分
t2=s2;
if(t2<0)
{
OLED_ShowString(60,40,"-",16); //顯示負(fù)號
t2=-t2; //轉(zhuǎn)為正數(shù)
}else OLED_ShowString(60,40," ",16); //去掉負(fù)號
OLED_ShowNum(70,40,t2,5,16); //顯示整數(shù)部分
OLED_ShowNum(0,30,PWM2,4,16);
OLED_ShowNum(0,50,PWM1,4,16);
OLED_Refresh_Gram();
t=0;
LED0=~LED0;//LED閃爍
//*************************************************************************************************************
}t++;
}
}
}
復(fù)制代碼
所有資料51hei提供下載:
平衡倒立擺.rar
(684.34 KB, 下載次數(shù): 65)
2018-11-1 02:07 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
Cortex發(fā)燒友
時(shí)間:
2019-8-3 11:07
寫的亂七八糟的
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1