娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年11月09日(星期六)

正在發(fā)生

2019年11月09日 | 二輪平衡機(jī)器人控制器代碼

發(fā)布者:VelvetDreamer 來源: 51hei關(guān)鍵字:二輪平衡機(jī)器人  控制器  Mega16 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

//MCU:Mega16;晶振:8MHz;


//PWM:4KHz;濾波器頻率:100Hz;系統(tǒng)頻率:100Hz;10ms;


//二輪平衡機(jī)器人項(xiàng)目


#include


#include


#include


//#define checkbit(var,bit)     (var&(0x01<<(bit)))     /*定義查詢位函數(shù)*/


//#define setbit(var,bit)     (var|=(0x01<<(bit)))     /*定義置位函數(shù)*/


//#define clrbit(var,bit)     (var&=(~(0x01<<(bit)))) /*定義清零位函數(shù)*/


//-------------------------------------------------------


//輸出端口初始化


void PORT_initial(void)


{


DDRA=0B00000000;


PINA=0X00;


PORTA=0X00;


DDRB=0B00000000;


PINB=0X00;


PORTB=0X00;


DDRC=0B00010000;


PINC=0X00;


PORTC=0X00;


DDRD=0B11110010;


PIND=0X00;


PORTD=0X00;


}


//-------------------------------------------------------


//定時(shí)器1初始化


void T1_initial(void)        


{


TCCR1A|=(1<

TCCR1B|=(1<

}


//-------------------------------------------------------


//定時(shí)器2初始化


void T2_initial(void)        //T2:計(jì)數(shù)至OCR2時(shí)產(chǎn)生中斷


{


OCR2=0X4E;        //T2:計(jì)數(shù)20ms(0X9C)10ms(0X4E)時(shí)產(chǎn)生中斷;


TIMSK|=(1<

TCCR2|=(1<

}


//-------------------------------------------------------


//外部中斷初始化


void INT_initial(void)


{


MCUCR|=(1<

GICR|=(1<

}


//-------------------------------------------------------


//串口初始化;


void USART_initial( void )


{        


UBRRH = 0X00;


UBRRL = 51;        //f=8MHz;設(shè)置波特率:9600:51;19200:25;


UCSRB = (1<

UCSRC = (1<

UCSRB|=(1<


//-------------------------------------------------------


//串口發(fā)送數(shù)據(jù);


void USART_Transmit( unsigned char data )


{


while ( !( UCSRA & (1<

UDR = data;        //將數(shù)據(jù)放入緩沖器,發(fā)送數(shù)據(jù);



//-------------------------------------------------------


//串口接收數(shù)據(jù)中斷,確定數(shù)據(jù)輸出的狀態(tài);


#pragma interrupt_handler USART_Receive_Int:12


static char USART_State;


void USART_Receive_Int(void)


{


USART_State=UDR;//USART_Receive();


}


//-------------------------------------------------------


//計(jì)算LH側(cè)輪速:INT0中斷;


//-------------------------------------------------------


static int speed_real_LH;


//-------------------------------------------------------


#pragma interrupt_handler SPEEDLHINT_fun:2


void SPEEDLHINT_fun(void)


{


if (0==(PINB&BIT(0)))


{


speed_real_LH-=1;


}


else


{


speed_real_LH+=1;



}


//-------------------------------------------------------


//計(jì)算RH側(cè)輪速,:INT1中斷;


//同時(shí)將輪速信號(hào)統(tǒng)一成前進(jìn)方向了;


//-------------------------------------------------------


static int speed_real_RH;


//-------------------------------------------------------


#pragma interrupt_handler SPEEDRHINT_fun:3


void SPEEDRHINT_fun(void)


{


if (0==(PINB&BIT(1)))


{


speed_real_RH+=1;


}


else


{


speed_real_RH-=1;



}


//-------------------------------------------------------


//ADport采樣:10位,采樣基準(zhǔn)電壓Aref


//-------------------------------------------------------


static int AD_data;


//-------------------------------------------------------


int ADport(unsigned char port)


{


ADMUX=port;


ADCSRA|=(1<

while(!(ADCSRA&(BIT(ADIF))));


AD_data=ADCL;


AD_data+=ADCH*256;


AD_data-=512;


return (AD_data);


}


//*


//-------------------------------------------------------


//Kalman濾波,8MHz的處理時(shí)間約1.8ms;


//-------------------------------------------------------


static float angle, angle_dot; //外部需要引用的變量


//-------------------------------------------------------


static const float Q_angle=0.001, Q_gyro=0.003, R_angle=0.5, dt=0.01;


//注意:dt的取值為kalman濾波器采樣時(shí)間;


static float P[2][2] = {


{ 1, 0 },


{ 0, 1 }


};


static float Pdot[4] ={0,0,0,0};


static const char C_0 = 1;


static float q_bias, angle_err, PCt_0, PCt_1, E, K_0, K_1, t_0, t_1;


//-------------------------------------------------------


void Kalman_Filter(float angle_m,float gyro_m)        //gyro_m:gyro_measure


{


angle+=(gyro_m-q_bias) * dt;


Pdot[0]=Q_angle - P[0][1] - P[1][0];


Pdot[1]=- P[1][1];


Pdot[2]=- P[1][1];


Pdot[3]=Q_gyro;


P[0][0] += Pdot[0] * dt;


P[0][1] += Pdot[1] * dt;


P[1][0] += Pdot[2] * dt;


P[1][1] += Pdot[3] * dt;


angle_err = angle_m - angle;


PCt_0 = C_0 * P[0][0];


PCt_1 = C_0 * P[1][0];


E = R_angle + C_0 * PCt_0;


K_0 = PCt_0 / E;


K_1 = PCt_1 / E;


t_0 = PCt_0;


t_1 = C_0 * P[0][1];


P[0][0] -= K_0 * t_0;


P[0][1] -= K_0 * t_1;


P[1][0] -= K_1 * t_0;


P[1][1] -= K_1 * t_1;


angle        += K_0 * angle_err;


q_bias        += K_1 * angle_err;


angle_dot = gyro_m-q_bias;


}


//*/


/*


//-------------------------------------------------------


//互補(bǔ)濾波


//-------------------------------------------------------


static float angle,angle_dot; //外部需要引用的變量


//-------------------------------------------------------        


static float bias_cf;


static const float dt=0.01;


//-------------------------------------------------------


void complement_filter(float angle_m_cf,float gyro_m_cf)


{


bias_cf*=0.998;        //陀螺儀零飄低通濾波;500次均值;


bias_cf+=gyro_m_cf*0.002;


angle_dot=gyro_m_cf-bias_cf;


angle=(angle+angle_dot*dt)*0.90+angle_m_cf*0.05;        


//加速度低通濾波;20次均值;按100次每秒計(jì)算,低通5Hz;


}


*/        


//-------------------------------------------------------


//AD采樣;


//以角度表示;


//加速度計(jì):1.2V=1g=90°;滿量程:1.3V~3.7V;


//陀螺儀:0.5V~4.5V=-80°~+80°;滿量程5V=200°=256=200°;


//-------------------------------------------------------


static float gyro,acceler;


//-------------------------------------------------------


void AD_calculate(void)


{


acceler=ADport(2)+28;        //角度校正


gyro=ADport(3);        


acceler*=0.004069;        //系數(shù)換算:2.5/(1.2*512); // 5/(1.2*1024);5為參考電壓5V;1.2V靈敏度對(duì)應(yīng)加速度1g;1024為AD精度


acceler=asin(acceler);        //反正弦求角度


gyro*=0.00341;        //角速度系數(shù):(3.14/180)* 100/512=0.01364;//(3.14/180)*    (200*0.025)/1024*0.025既5/1024*0.025        


//求得角速度 單位 角度/秒


Kalman_Filter(acceler,gyro);        //卡爾曼濾波 帶入角度。角速度


//complement_filter(acceler,gyro);


}


//-------------------------------------------------------


//PWM輸出


//-------------------------------------------------------


void PWM_output (int PWM_LH,int PWM_RH)


{


if (PWM_LH<0)


{


PORTD|=BIT(6);


PWM_LH*=-1;


}


else


{


PORTD&=~BIT(6);


}


if (PWM_LH>252)


{


PWM_LH=252;


}


if (PWM_RH<0)


{


PORTD|=BIT(7);


PWM_RH*=-1;


}


else


{


PORTD&=~BIT(7);


}


if (PWM_RH>252)


{


PWM_RH=252;


}


OCR1AH=0;


OCR1AL=PWM_LH;        //OC1A輸出;


OCR1BH=0;


OCR1BL=PWM_RH;        //OC1B輸出;


}


//-------------------------------------------------------


//計(jì)算PWM輸出值


//車輛直徑:76mm; 12*64pulse/rev; 1m=3216pulses;


//-------------------------------------------------------        


//static int speed_diff,speed_diff_all,speed_diff_adjust;


//static float K_speed_P,K_speed_I;


static float K_voltage,K_angle,K_angle_dot,K_position,K_position_dot;


static float K_angle_AD,K_angle_dot_AD,K_position_AD,K_position_dot_AD;


static float position,position_dot;


static float position_dot_filter;


static float PWM;


static int speed_output_LH,speed_output_RH;


static int Turn_Need,Speed_Need;


//-------------------------------------------------------        


void PWM_calculate(void)        


{


if ( 0==(~PINA&BIT(1)) )        //左轉(zhuǎn)


{


Turn_Need=-40;


}


else if ( 0==(~PINB&BIT(2)) ) //右轉(zhuǎn)


{


Turn_Need=40;


}


else        //不轉(zhuǎn)


{


Turn_Need=0;


}


if ( 0==(~PINC&BIT(0)) )        //前進(jìn)


{


Speed_Need=-2;


}


else if ( 0==(~PINC&BIT(1)) )        //后退 


{


Speed_Need=2;


}


else        //不動(dòng)


{


Speed_Need=0;


}


K_angle_AD=ADport(4)*0.007;


K_angle_dot_AD=ADport(5)*0.007;


K_position_AD=ADport(6)*0.007;


K_position_dot_AD=ADport(7)*0.007;


position_dot=PWM*0.04;


position_dot_filter*=0.9;        //車輪速度濾波


position_dot_filter+=position_dot*0.1;        


position+=position_dot_filter;


//position+=position_dot;        


position+=Speed_Need;


if (position<-768)        //防止位置誤差過大導(dǎo)致的不穩(wěn)定


{


position=-768;


}


else if  (position>768)


{


position=768;


}


PWM = K_angle*angle *K_angle_AD + K_angle_dot*angle_dot *K_angle_dot_AD + 


K_position*position *K_position_AD + K_position_dot*position_dot_filter *K_position_dot_AD;


speed_output_RH = PWM;// - Turn_Need;


speed_output_LH = - PWM;// - Turn_Need ;


/*


speed_diff=speed_real_RH-speed_real_LH;        //左右輪速差PI控制;


speed_diff_all+=speed_diff;


speed_diff_adjust=(K_speed_P*speed_diff+K_speed_I*speed_diff_all)/2;


*/


PWM_output (speed_output_LH,speed_output_RH);        


}


//-------------------------------------------------------


//定時(shí)器2中斷處理


//-------------------------------------------------------


static unsigned char temp;


//-------------------------------------------------------


#pragma interrupt_handler T2INT_fun:4


void T2INT_fun(void)        


{


AD_calculate();


PWM_calculate();


if(temp>=4)        //10ms即中斷;每秒計(jì)算:100/4=25次;


{        


if (USART_State==0X30)        //ASCII碼:0X30代表字符'0'


{


USART_Transmit(angle*57.3+128);


USART_Transmit(angle_dot*57.3+128);


USART_Transmit(128);        


}


else if(USART_State==0X31)        //ASCII碼:0X30代表字符'1'


{


USART_Transmit(speed_output_LH+128);


USART_Transmit(speed_output_RH+128);        


USART_Transmit(128);


}


else if(USART_State==0X32)        //ASCII碼:0X30代表字符'2'

[1] [2]
關(guān)鍵字:二輪平衡機(jī)器人  控制器  Mega16 引用地址:二輪平衡機(jī)器人控制器代碼

上一篇:AVR單片機(jī)經(jīng)典使用經(jīng)驗(yàn)
下一篇:ATMEGA16L實(shí)現(xiàn)時(shí)間和溫度的循環(huán)顯示程序分享

推薦閱讀

英特爾近日宣布英特爾?至強(qiáng)?處理器產(chǎn)品家族迎來兩位新成員:Cascade Lake-AP(預(yù)計(jì)2019年上半年發(fā)布)和面向入門級(jí)服務(wù)器的英特爾?至強(qiáng)?E-2100處理器(現(xiàn)已正式發(fā)布)。這兩個(gè)新產(chǎn)品系列建立在英特爾至強(qiáng)平臺(tái)長達(dá)20年的領(lǐng)導(dǎo)地位之上,讓客戶可以更加靈活地選擇最符合自身需求的解決方案。 “我們一直致力于提供能滿足客戶系統(tǒng)需求的各種工作負(fù)載優(yōu)化...
摘要:介紹了一種可進(jìn)行遠(yuǎn)程監(jiān)測和控制的數(shù)據(jù)采集系統(tǒng)。多個(gè)測控節(jié)點(diǎn)組成ZigBee無線傳輸網(wǎng)絡(luò),利用GPRS模塊連接因特網(wǎng)擴(kuò)展傳輸范圍,與基于LabVIEW的上位機(jī)程序進(jìn)行TCP/IP協(xié)議通信,從而實(shí)現(xiàn)遠(yuǎn)程監(jiān)控。下位機(jī)設(shè)計(jì)了數(shù)據(jù)幀和采集控制指令;協(xié)調(diào)器網(wǎng)關(guān)可對(duì)數(shù)據(jù)進(jìn)行選擇性接收和處理,并實(shí)現(xiàn)斷線后自動(dòng)連接;上位機(jī)完成對(duì)采集數(shù)據(jù)的解析、顯示以及保存,并能...
以寫數(shù)據(jù)為例,提供的函數(shù)有 GPIO_SetBits GPIO_ResetBits GPIO_WriteBit GPIO_Write 比如我在PD口的高八位接了個(gè)并行的數(shù)據(jù)線,低八位為控制,有輸入有輸出。怎么實(shí)現(xiàn)對(duì)高八位寫任意數(shù)而第八位不受影響呢。 前兩個(gè)函數(shù)肯定都不可以。 第三個(gè)也不行,是對(duì)一個(gè)或多個(gè)IO口置位或復(fù)位。 第四個(gè)是寫整個(gè)口,勢必影 響到第八位的控制信號(hào)啊。 能想到的是...
經(jīng)過數(shù)十年發(fā)展,長三角和京津冀地區(qū)已經(jīng)形成了中國半導(dǎo)體產(chǎn)業(yè)最為成熟的重要兩極。隨著全國多地區(qū)掀起發(fā)展半導(dǎo)體產(chǎn)業(yè)的浪潮,粵港澳大灣區(qū)作為中國最大的的芯片消費(fèi)和應(yīng)用市場,把廣東省打造成中國半導(dǎo)體產(chǎn)業(yè)新一極,推動(dòng)粵港澳大灣區(qū)與京津冀、長三角地區(qū)優(yōu)勢互補(bǔ)、協(xié)同發(fā)展的新一輪產(chǎn)業(yè)變革正在醞釀中。商務(wù)部對(duì)外貿(mào)易司副司長張冠彬在11月6日第四屆進(jìn)...

史海拾趣

問答坊 | AI 解惑

用于機(jī)頂盒設(shè)計(jì)的高性能模擬開關(guān)

本帖最后由 jameswangsynnex 于 2015-3-3 20:00 編輯 隨著機(jī)頂盒的設(shè)計(jì)加入更多新興功能,如作為錄象程序的硬盤、緊湊型閃存接口和視頻點(diǎn)播 (VOD) 機(jī)器,模擬開關(guān)在這類應(yīng)用中繼續(xù)得以廣泛采用。選用正確的開關(guān),設(shè)計(jì)人員不僅能縮短產(chǎn)品面市 ...…

查看全部問答∨

Nucleus實(shí)時(shí)操作系統(tǒng)分析報(bào)告

Nucleus實(shí)時(shí)操作系統(tǒng)分析報(bào)告 Nucleus實(shí)時(shí)操作系統(tǒng)是Accelerater Technology公司開發(fā)的嵌入式RTOS產(chǎn)品,只需一次性購買Licenses,就可以獲得操作系統(tǒng)的源碼。 Nucleus的特點(diǎn): 內(nèi)核和網(wǎng)絡(luò)協(xié)議都以源碼的形式提供,用戶可以根據(jù)需要修改,這是N ...…

查看全部問答∨

誰知道示波器ss-7611怎么

我剛開始學(xué)習(xí)電子知識(shí)  很多都不懂  誰知道示波器ss-7611怎么樣用啊,或者有詳細(xì)資料也行,感激ing…

查看全部問答∨

Fundamentals_of_Instrumentation_and_Measurement.pdf

寒假回家前人品爆發(fā)第二帖。 書名:Fundamentals_of_Instrumentation_and_Measurement 作者:Dominique Placko 出版社:Published in Great Britain and the United States in 2007 by ISTE Ltd 版次:第一版 總頁數(shù):555 文件格式:PDF ...…

查看全部問答∨

51單片機(jī)與上位機(jī)的串口通訊問題!!! 急急急

應(yīng)該沒什么問題的啊,就是不通訊 ! 程序如下: #include <REG52.H>                          #include <stdio.h>            & ...…

查看全部問答∨

CE 6.0內(nèi)存映射讀文件速度慢,急!

先講講5.0情況: 5.0內(nèi)存映射讀取文件,會(huì)有物理內(nèi)存進(jìn)行緩存,這樣重復(fù)讀取相同內(nèi)容時(shí)直接從內(nèi)存緩沖中取得,直到所有物理內(nèi)存耗盡(low_memory情況),這時(shí)5.0會(huì)一次性全部自動(dòng)釋放所有物理內(nèi)存,之后的文件讀取又要從文件去取到內(nèi)存了。這里的物 ...…

查看全部問答∨

cdma2000和wcdma哪個(gè)網(wǎng)絡(luò)好

&nbsp;&nbsp; 本人要開始做無線通信,產(chǎn)品功能是實(shí)現(xiàn)把火車站的關(guān)于列車的乘客客票信息在火車到站時(shí)發(fā)到火車的終端上以為檢票用。以前沒做過這方面的,現(xiàn)在考慮用哪個(gè)3G 的標(biāo)準(zhǔn)好,wcdma網(wǎng)絡(luò)覆蓋有cdma覆蓋好嗎 ,還有就是穩(wěn)定性問題。雖然不是 ...…

查看全部問答∨

zigbee輸出頻譜

我一直有個(gè)問題不是很清楚,zigbee發(fā)送0和1數(shù)據(jù),按照MSK的來理解,0和1應(yīng)該分別對(duì)應(yīng)一個(gè)頻率,所以在RF輸出的時(shí)候頻譜應(yīng)該是在兩個(gè)地方有主峰,例如在一個(gè)channel中,以2.405G為中心,有數(shù)據(jù)發(fā)送時(shí)候應(yīng)該分別在2.405G+500K處,和2.405G-500K處有主 ...…

查看全部問答∨

收到MSP430 LaunchPad 開發(fā)板后,發(fā)現(xiàn)串口例程調(diào)試不通?

自從參加TI論壇的活動(dòng),獲得LaunchPad 開發(fā)板后,本想利用MSP430G2553芯片做個(gè)小控制設(shè)備。因?yàn)樾枰玫酱冢碗S便調(diào)試了一下TI提供的幾個(gè)串口例程,結(jié)果用串口調(diào)試助手調(diào)試時(shí),發(fā)現(xiàn)沒有收到發(fā)出的數(shù)據(jù),不過,那個(gè)定時(shí)器模擬串口的例子可以調(diào)通 ...…

查看全部問答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 丰宁| 茶陵县| 铜梁县| 义马市| 和田市| 南充市| 高清| 晋州市| 华蓥市| 唐山市| 逊克县| 贡觉县| 张家口市| 阳新县| 大足县| 芦山县| 南江县| 文昌市| 白玉县| 梓潼县| 色达县| 高州市| 平舆县| 花垣县| 田阳县| 惠州市| 晋中市| 界首市| 浙江省| 鄂尔多斯市| 鄂伦春自治旗| 南召县| 顺义区| 德令哈市| 榆林市| 阆中市| 桐庐县| 勐海县| 乐昌市| 东城区| 扶沟县|