標(biāo)題:
STM32自平衡方塊程序,分享資料
[打印本頁(yè)]
作者:
stc89c52wzy
時(shí)間:
2020-4-16 22:42
標(biāo)題:
STM32自平衡方塊程序,分享資料
自平衡方塊,拿去自學(xué)
/*
知乎:天下行走
CSDN:技術(shù)創(chuàng)造無(wú)限可能
閑魚(yú):抉擇之刃銀
*/
/*
針對(duì)角度環(huán)的期望角度為速度環(huán)輸出+機(jī)械中值的提問(wèn):
【一】
問(wèn):
當(dāng)我在小車(chē)(平衡小車(chē))前側(cè)綁一塊小鐵塊,這會(huì)使得機(jī)械中值后傾,=-27度,然后我將車(chē)子扶在機(jī)械中值的角度位置然后開(kāi)機(jī),但車(chē)子一開(kāi)機(jī)就往前跑。為什么?
答:
問(wèn)題分析:
起始速度偏差=0(因?yàn)闆](méi)有動(dòng)輪子呀)——>外環(huán)輸出=0(即內(nèi)環(huán)期望角度=0)
But:開(kāi)局實(shí)際角度= -27度——>開(kāi)局內(nèi)環(huán)輸出就等于(-27-0)*(-1) = +27 //Kp為負(fù)數(shù),這里設(shè)為-1
即根本是因?yàn)殚_(kāi)局時(shí) 外環(huán)輸出!=機(jī)械中值(這里機(jī)械中值可以等效說(shuō)成實(shí)際角度,但不是任何時(shí)候都可以等效說(shuō)成的。譬如我開(kāi)機(jī)時(shí)小車(chē)不擺在機(jī)械中值位置時(shí)就不能等效說(shuō)成。)
=====>>>>所以開(kāi)局時(shí)車(chē)子肯定往前跑。!
解決思想:
起始Target=Real就可以了。
解決方法:
測(cè)機(jī)械中值譬如 = -27度,則使得內(nèi)環(huán)期望角度=外環(huán)輸出 + 機(jī)械中值。
【二】
若:外環(huán)輸出==機(jī)械中值,即開(kāi)局速度偏差=0時(shí),機(jī)械中值=0則外環(huán)輸出=0,即內(nèi)環(huán)輸入=0。
又有內(nèi)環(huán)反饋=0,所以這時(shí)候開(kāi)局內(nèi)環(huán)輸出就等于(0-0)*(-1) = 0===>車(chē)子必然直立靜止在原地。
【三】
若:外環(huán)輸出!=機(jī)械中值,即開(kāi)局速度偏差=0時(shí),機(jī)械中值!=0,但我開(kāi)局不把車(chē)子擺在機(jī)械中值位置。譬如舉例當(dāng)機(jī)械中值=-27度,我開(kāi)機(jī)將車(chē)子實(shí)際角度擺在0度位置。則此時(shí)
速度偏差=0則外環(huán)輸出=0,即內(nèi)環(huán)輸入=0。
又有內(nèi)環(huán)反饋=0===>理論上小車(chē)直立靜止,BUT!車(chē)子根本不在機(jī)械中值位置,又談何直立靜止,車(chē)子會(huì)根據(jù)重心向前倒下,直立環(huán)立刻發(fā)揮作用-->
-->若小鐵快非常非常輕,還有可能救回來(lái);若鐵塊不輕,則必然車(chē)子一直不斷向前跑不會(huì)停下;若小鐵塊過(guò)重,系統(tǒng)來(lái)不及響應(yīng),車(chē)子會(huì)直接向前倒下;
這,就是結(jié)果。
*/
/*
【硬件占用的GPIO的框架】
編碼器 ||AB相—PA0/PA1
電機(jī) ||PWM——PA8/PA11、PA6/PA7
MPU6050 ||INT——PB5
MPU6050 ||IIC——SCL--PB4/SDA--PB3
OLED ||IIC——SCL--PB8/SDA--PB9
*/
#include "stm32f10x.h"
#include "sys.h"
float Pitch,Roll,Yaw; //角度
short gyrox,gyroy,gyroz; //陀螺儀--角速度
short aacx,aacy,aacz; //加速度
int Encoder_Momentum; //編碼器數(shù)據(jù)(速度)
int PWM_MAX=7000,PWM_MIN=-7000; //PWM限幅變量
int MOTO1,MOTO2; //電機(jī)裝載變量
extern int Velocity_Momentum_out; //輸出變量
int main(void)
{
delay_init();
NVIC_Config();
uart1_init(115200);
OLED_Init();
OLED_Clear();
MPU_Init();
mpu_dmp_init();
MPU6050_EXTI_Init();
Encoder_TIM2_Init();
Encoder_TIM4_Init();
PWM_Init_TIM1(0,7199); //CH1——PA8、CH4——PA11
PWM_Init_TIM3(0,7199); //CH1——PA6、CH2——PA7
OLED_Clear();
OLED_ShowString(5,0,"P",12);
OLED_ShowChar(5,2,'M',12);
OLED_ShowString(64,2,"Stop:",12);
while(1)
{
OLED_Float(0,15,Pitch,1); //角度
OLED_Float(0,70,Velocity_Momentum_out,1); //外環(huán)輸出
OLED_Float(2,5+15,Encoder_Momentum,1); //速度讀取
OLED_Float(3,5,MOTO1,1 ); //電機(jī)PWM
OLED_ShowNumber(64+40,2,stop,1,12); //停止位
}
}
復(fù)制代碼
自平衡方塊GFP.7z
2020-4-20 01:20 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
258.13 KB, 下載次數(shù): 38, 下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1