程序的大致思路如下:兩個(gè)定時(shí)器配置為編碼器模式,用于小車(chē)的兩個(gè)輪子編碼脈沖計(jì)數(shù),計(jì)數(shù)器向上或向下計(jì)數(shù)溢出,均在二者的中斷函數(shù)中記錄記錄。還有一個(gè)定時(shí)器用作計(jì)時(shí)用,規(guī)定時(shí)間內(nèi)進(jìn)入中斷,在中斷函數(shù)中對(duì)數(shù)據(jù)進(jìn)行處理。我用的光電碼盤(pán)是100線的,在選擇的計(jì)數(shù)模式下,轉(zhuǎn)一圈產(chǎn)生400個(gè)計(jì)數(shù)脈沖。程序如下:
double first_cnt,second_cnt,encoder_timer_overflow_sample;
static volatile double encoder_timer_overflow;
double rotor_speed = 0;
unsigned char i = 0;
//first_cnt是第一次讀計(jì)數(shù)器的值,second_cnt是第二次讀計(jì)數(shù)器的值,encoder_timer_overflow記錄計(jì)數(shù)器的溢出次數(shù)(不管是向上溢出還是向下溢出)
int main(void)
{
Myusart_Init();
Encoder_Init();
first_cnt = TIM_GetCounter(ENCODER_TIMER); //第一次讀取編碼器計(jì)數(shù)值
encoder_timer_overflow = 0;//初始時(shí)令編碼器計(jì)數(shù)溢出次數(shù)為零,認(rèn)為一個(gè)處理周期內(nèi)其值小于double類的極值
while(1);
}
double Get_Rotor_Speed(void)//double Get_Rotor_Speed()
{
double delta_cnt;//記錄前后讀取計(jì)數(shù)器計(jì)數(shù)器計(jì)數(shù)的差值
double w_rotor,line_speed,circle_number = 0;
second_cnt = TIM_GetCounter( ENCODER_TIMER );//讀取編碼器計(jì)數(shù)值
encoder_timer_overflow_sample = encoder_timer_overflow;//從encoder_timer_overflow中讀取溢出次數(shù)
if ( (ENCODER_TIMER->CR1 & TIM_CounterMode_Down) == TIM_CounterMode_Down )
{
// encoder timer down-counting 編碼器是向下計(jì)數(shù),
delta_cnt = ( second_cnt - first_cnt - encoder_timer_overflow_sample * (4 * ENCODER_PPR) );
// a negetive value計(jì)算前后兩次讀取的計(jì)數(shù)總差值
}
else
{
//encoder timer up-counting編碼器向上計(jì)數(shù)
delta_cnt = ( second_cnt - first_cnt + encoder_timer_overflow_sample * (4 * ENCODER_PPR) );
// a positive value
}
first_cnt = second_cnt;//保存第二次的讀取值,以便下一次使用
encoder_timer_overflow = 0;//溢出次數(shù)清零
circle_number = delta_cnt / 400.0 / 98.777946;//計(jì)算兩次讀取時(shí)間內(nèi)車(chē)輪轉(zhuǎn)了多少圈
//400 : the count value of CNT for rotor rotate a circle
//98.777946 : the decrease speed rate of motor 減速箱的減速比,delta是轉(zhuǎn)子所轉(zhuǎn)的圈數(shù)
w_rotor = ( circle_number * 2 * 3.141592 ) / 0.03;//計(jì)算角速度,2*pi*轉(zhuǎn)的圈數(shù)/計(jì)數(shù)時(shí)間(為0.03s)
//the wheel's w_rotor ,calculate time is 1 minute
//circle_number * 2 * 3.141592 delta_angle by radian
//w_rotor unit: degree by radian per second
line_speed = ( w_rotor * 64.68 / 2.0 ) / 10.0;//計(jì)算線速度,v=w*r車(chē)輪直徑64.68mm,除以10轉(zhuǎn)化為cm
//the wheel's line_speed, unit: cm per seconds
//64.68 / 2.0 mm: radius of wheel
//printf ( " w_rotor=%8lf line_speed =%8lf\r\n ",w_rotor,line_speed );
return line_speed;
}
void TIM3_IRQHandler(void)//定時(shí)器3定時(shí)器0.03秒,在中斷函數(shù)中進(jìn)行平均值濾波。
{
if ( i<8 )
{
rotor_speed += Get_Rotor_Speed();//assume rotor_speed will not larger than double_max
i++;
}
else
{
rotor_speed /= i; //讀取8次值,然后取平均值
printf ( " a%8lf\r\n ",rotor_speed * 100 );//a, +500 used for OSC
//clear to 0 for next use
i = 0;
rotor_speed = 0;//清零,以備下次使用
}
/* Clear the interrupt pending flag */
TIM_ClearFlag(TIM3,TIM_FLAG_Update);
}
上一篇:STM32定時(shí)器---正交編碼器模式詳解
下一篇:STM32F4XX 采集編碼器的溢出處理
推薦閱讀
史海拾趣
以下是五個(gè)電子行業(yè)里Display Engineering Services公司發(fā)展起來(lái)的相關(guān)故事:
故事一:
在科技日新月異的今天,XX公司憑借其在Display Engineering Services領(lǐng)域的專業(yè)技術(shù)和創(chuàng)新能力,逐漸嶄露頭角。起初,XX公司只是一家專注于顯示屏研發(fā)的小型技術(shù)公司,但在市場(chǎng)需求的驅(qū)動(dòng)下,公司意識(shí)到為客戶提供定制化的顯示屏解決方案具有巨大潛力。于是,XX公司開(kāi)始將重心轉(zhuǎn)移到Display Engineering Services上,通過(guò)深入了解客戶需求,提供從設(shè)計(jì)、制造到安裝的全流程服務(wù)。經(jīng)過(guò)數(shù)年的努力,XX公司不僅積累了豐富的經(jīng)驗(yàn),還建立起一支專業(yè)的技術(shù)團(tuán)隊(duì),贏得了業(yè)界的廣泛認(rèn)可。
故事二:
YY公司的發(fā)展歷程頗具傳奇色彩。該公司最初只是一家為電子產(chǎn)品提供顯示屏配件的供應(yīng)商。然而,隨著市場(chǎng)競(jìng)爭(zhēng)的加劇,YY公司意識(shí)到單純提供配件已無(wú)法滿足客戶需求。于是,公司決定轉(zhuǎn)型為Display Engineering Services提供商,致力于為客戶提供顯示屏的定制設(shè)計(jì)和優(yōu)化服務(wù)。YY公司憑借其卓越的技術(shù)實(shí)力和敏銳的市場(chǎng)洞察力,成功轉(zhuǎn)型,并在短時(shí)間內(nèi)實(shí)現(xiàn)了業(yè)務(wù)的快速增長(zhǎng)。如今,YY公司已成為行業(yè)內(nèi)的佼佼者,其顯示屏解決方案廣泛應(yīng)用于各個(gè)領(lǐng)域。
故事三:
ZZ公司是一家專注于Display Engineering Services的創(chuàng)業(yè)公司。在創(chuàng)立之初,公司面臨著資金短缺、技術(shù)瓶頸等諸多困難。然而,創(chuàng)始人憑借對(duì)技術(shù)的熱愛(ài)和對(duì)市場(chǎng)的敏銳洞察,帶領(lǐng)團(tuán)隊(duì)攻克了一個(gè)又一個(gè)技術(shù)難題。同時(shí),ZZ公司還積極尋求外部合作,與多家知名企業(yè)建立了緊密的合作關(guān)系,共同開(kāi)發(fā)具有市場(chǎng)競(jìng)爭(zhēng)力的顯示屏產(chǎn)品。在團(tuán)隊(duì)成員的共同努力下,ZZ公司逐漸在Display Engineering Services領(lǐng)域嶄露頭角,成為了一家備受矚目的創(chuàng)新型企業(yè)。
故事四:
AA公司的發(fā)展歷程充滿了挑戰(zhàn)與機(jī)遇。在成立初期,公司面臨著激烈的市場(chǎng)競(jìng)爭(zhēng)和不斷變化的客戶需求。為了應(yīng)對(duì)這些挑戰(zhàn),AA公司決定加大研發(fā)投入,不斷提升自身的技術(shù)實(shí)力。同時(shí),公司還積極拓展國(guó)際市場(chǎng),與全球多家知名企業(yè)建立了合作關(guān)系。通過(guò)不斷的技術(shù)創(chuàng)新和市場(chǎng)拓展,AA公司逐漸在Display Engineering Services領(lǐng)域樹(shù)立了良好的品牌形象,贏得了客戶的信賴和支持。
故事五:
BB公司是一家歷史悠久的Display Engineering Services企業(yè)。多年來(lái),公司始終堅(jiān)持以客戶需求為導(dǎo)向,不斷提升服務(wù)質(zhì)量和技術(shù)水平。為了保持競(jìng)爭(zhēng)優(yōu)勢(shì),BB公司不斷引進(jìn)先進(jìn)的生產(chǎn)設(shè)備和技術(shù)人才,加強(qiáng)內(nèi)部管理和質(zhì)量控制。同時(shí),公司還積極參與行業(yè)交流和合作,與國(guó)內(nèi)外多家知名企業(yè)建立了良好的合作關(guān)系。在多年的發(fā)展中,BB公司積累了豐富的經(jīng)驗(yàn)和技術(shù)優(yōu)勢(shì),成為了行業(yè)內(nèi)的領(lǐng)軍企業(yè)之一。其顯示屏解決方案廣泛應(yīng)用于各個(gè)領(lǐng)域,并獲得了多項(xiàng)國(guó)內(nèi)外技術(shù)專利和榮譽(yù)。
DC Components公司在追求經(jīng)濟(jì)效益的同時(shí),也積極履行社會(huì)責(zé)任。公司注重環(huán)保和可持續(xù)發(fā)展,通過(guò)采用環(huán)保材料和節(jié)能技術(shù),降低生產(chǎn)過(guò)程中的環(huán)境影響。此外,公司還積極參與公益活動(dòng),回饋社會(huì),為社區(qū)的和諧發(fā)展做出了積極貢獻(xiàn)。這些舉措不僅提升了公司的社會(huì)形象,也為公司的長(zhǎng)期發(fā)展奠定了堅(jiān)實(shí)基礎(chǔ)。
飛虹光電科技集團(tuán)在轉(zhuǎn)型過(guò)程中,相繼成立了多家高科技企業(yè),如山西飛虹微納米光電科技有限公司、山西飛虹半導(dǎo)體照明有限公司等。這些企業(yè)之間形成了良好的協(xié)同發(fā)展機(jī)制,共同推進(jìn)半導(dǎo)體激光器和LED材料的研發(fā)與應(yīng)用。通過(guò)產(chǎn)學(xué)研一體化模式,飛虹系列企業(yè)依托多所高等院校技術(shù)平臺(tái),不斷提升自身研發(fā)實(shí)力和市場(chǎng)競(jìng)爭(zhēng)力,為中國(guó)電子行業(yè)的發(fā)展貢獻(xiàn)了重要力量。
Davies Molding公司深知,人才是企業(yè)發(fā)展的核心動(dòng)力。因此,公司高度重視團(tuán)隊(duì)建設(shè)與人才培養(yǎng)。通過(guò)建立完善的培訓(xùn)體系,Davies Molding公司不斷提升員工的技能和素質(zhì),打造了一支高素質(zhì)、專業(yè)化的團(tuán)隊(duì)。這支團(tuán)隊(duì)不僅為公司的發(fā)展提供了有力保障,還為行業(yè)的進(jìn)步做出了積極貢獻(xiàn)。
EMS GmbH公司自創(chuàng)立之初,就專注于汽車(chē)轉(zhuǎn)換器注塑件(微動(dòng)開(kāi)關(guān))的研發(fā)和生產(chǎn)。公司投入大量資源進(jìn)行技術(shù)創(chuàng)新,逐步積累起了一系列核心專利技術(shù)。這些技術(shù)不僅涵蓋了汽車(chē)轉(zhuǎn)換器注塑件生產(chǎn)的所有關(guān)鍵技術(shù),還獲得了多個(gè)國(guó)際品質(zhì)管理組織機(jī)構(gòu)及主流整車(chē)廠的雙重、三重認(rèn)證。這些專利技術(shù)的積累,使EMS GmbH公司在汽車(chē)轉(zhuǎn)換器注塑件領(lǐng)域確立了行業(yè)領(lǐng)先地位。
1999年,Chemtronics迎來(lái)了一個(gè)重要的轉(zhuǎn)折點(diǎn),成為Illinois Tool Works Inc的全資子公司。這一變化為Chemtronics帶來(lái)了更多的資源和支持,使其能夠進(jìn)一步擴(kuò)大生產(chǎn)規(guī)模、提升研發(fā)能力,并在全球范圍內(nèi)拓展業(yè)務(wù)。
DOS 微軟一開(kāi)始選用了派特森的Q-DOS “QUICK AND DISK OPERATING SYSTEM ”為基礎(chǔ)然后再擴(kuò)充功能而成 MS-DOS,主要是采用由IBM 提供的使用8088 微處理器的計(jì)算機(jī)作開(kāi)發(fā)平臺(tái),它是以16 字節(jié)單人單工操作系統(tǒng),特別適合一些功能簡(jiǎn)單 ...… 查看全部問(wèn)答∨ |
請(qǐng)教關(guān)于PXA270喚醒源的設(shè)置 專家好: 我的PDA前兩天在公司測(cè)試部門(mén)發(fā)現(xiàn),按鍵進(jìn)入深度休眠后,不能馬上按鍵喚醒,只有等5~6秒(大約值)后才能馬上喚醒 我的按鍵休眠是設(shè)置的GPIO0,喚醒源也是GPIO0 具體的設(shè)置如下: &nbs ...… 查看全部問(wèn)答∨ |
shuiyan 大哥你好! 小弟最近在搞OAL里的中斷函數(shù)OALTimerInit遇到個(gè)問(wèn)題,是這樣的: 我在private下的armtrap.s里發(fā)現(xiàn)了中斷的異常跳轉(zhuǎn)表 VectorInstructions ldr pc, [p ...… 查看全部問(wèn)答∨ |
|
touch panel驅(qū)動(dòng) 奇怪問(wèn)題! 本人把wince6.0下的DeviceEmulator改到我的2440的開(kāi)發(fā)板上運(yùn)行,因?yàn)镈eviceEmulator是基于2410的,現(xiàn)在改到2440下改動(dòng)也不是太大, 目前wince6.0的桌面已經(jīng)可以顯示出來(lái)了,但是觸摸屏卻一直動(dòng)不了,后來(lái)跟蹤發(fā)現(xiàn)觸摸屏驅(qū)動(dòng)已經(jīng)加載,而且第一次點(diǎn) ...… 查看全部問(wèn)答∨ |
不好意思,問(wèn)一下這個(gè)問(wèn)題:-sh: ./helloworld: not found 我是一名初學(xué)者,今天終于完成了博創(chuàng)S3C2410上Linux 2.6.22的移植,網(wǎng)卡,文件系統(tǒng)都能正常使用,感覺(jué)蠻有成就感的。 但如今這個(gè)問(wèn)題不知道如何解決了: 用編譯內(nèi)核和Busybox 1.5.1的編譯器編譯了一個(gè)helloworld,在開(kāi)發(fā)板上用NFS掛載上,運(yùn)行./hello ...… 查看全部問(wèn)答∨ |
$(\'swf_vSx\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://www.tudou.com/v/IJy11e9LXmk/v.swf\'), \'quality\', ...… 查看全部問(wèn)答∨ |
我寫(xiě)了兩段不同的verilog代碼來(lái)實(shí)現(xiàn)同一個(gè)功能,現(xiàn)在我想比較哪個(gè)代碼在FPGA上跑的更快,我在Quartus II里如何看出來(lái)呢,請(qǐng)各位指導(dǎo)我一下,謝謝?!? 查看全部問(wèn)答∨ |
用jlink V8給目標(biāo)板提供3.3V電壓,就是把jlink 里面的跳線帽插到3.3V pin上然后連接 2148,一直這樣提示,試了兩個(gè)2148了,都是這樣的提示我如果用目標(biāo)板自己的電源,也是同樣的提示Feature(s): RDI,FlashDL,FlashBP,JFlash,GDBFullVTarget = 3.300 ...… 查看全部問(wèn)答∨ |
目的:制作一個(gè)模塊,該模塊能檢測(cè)紅外發(fā)射管發(fā)出的紅外線,波長(zhǎng)為940nm,紅外接收頭型號(hào)為IRM-3638,當(dāng)有接收頭接收到紅外光,那么模塊上的LED燈就亮 我畫(huà)的電路圖如下: 但是我的板子沒(méi)有達(dá)到預(yù)期目標(biāo),LED燈不亮,接收頭沒(méi)有 ...… 查看全部問(wèn)答∨ |
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦
- 神經(jīng)形態(tài)芯片可能是革新機(jī)器人實(shí)時(shí)電機(jī)控制的未來(lái)
- 從三個(gè)方面理解ARM嵌入式系統(tǒng)
- 自動(dòng)報(bào)警 基于MCU的家庭防盜報(bào)警系統(tǒng)的設(shè)計(jì)
- 存儲(chǔ)控制器及其訪問(wèn)外設(shè)的原理
- 基于51系列單片機(jī)的智能照明控制系統(tǒng)設(shè)計(jì)方案
- 基于STM32的四旋翼飛行器控制系統(tǒng)
- 單片機(jī)應(yīng)用編程技巧解析
- 基于89C52的教室智能節(jié)能照明系統(tǒng)設(shè)計(jì)
- 一種新型的雨量光照傳感器的設(shè)計(jì)
- RISC-V人才該怎么培養(yǎng)?專家這樣說(shuō)
- 割草機(jī)器人,四大流派的巔峰之戰(zhàn)
- 車(chē)載顯示迎來(lái)三大革命丨“形態(tài)”革命
- 什么是“CDC+空懸”?
- 汽車(chē)電子信息安全:如何有效保護(hù)硬件Debug口?
- 新能源汽車(chē)核心技術(shù)之“大三電”、“小三電”
- 芯原如何推動(dòng)RISC-V嵌入式軟件人才發(fā)展?
- Arm 技術(shù)助力《國(guó)家地理》探險(xiǎn)家繪制地球海洋圖景
- Arm SME2 技術(shù)加速安卓 AI 升級(jí),驅(qū)動(dòng)移動(dòng)應(yīng)用下一代功能革新
- VGA接口定義、功能用途和種類
- 直播已結(jié)束|如何通過(guò)【TI MSPM0 固件示例】及【常用電機(jī)驅(qū)動(dòng)器方案和拓?fù)洹?,?0分鐘內(nèi)旋轉(zhuǎn)電機(jī)
- 快來(lái)訪問(wèn)泰克高速串行通信專題 配置您的專屬解決方案 贏好禮!
- 有獎(jiǎng)活動(dòng)“庖丁”解智能睡眠監(jiān)測(cè)儀,一波“水軍”來(lái)圍觀
- ADI有獎(jiǎng)下載活動(dòng)之20:基于NDIR和PID的ADI氣體探測(cè)器解決方案和新產(chǎn)品
- 【已結(jié)束】RIGOL直播|示波器、可編程直流電源應(yīng)用分享
- 村田在線課堂:健康篇
- 快來(lái)應(yīng)援吧!投票選出你最愛(ài)的TI培訓(xùn)課程
- 怎樣在機(jī)器人風(fēng)口到來(lái)前活下去,B端市場(chǎng)是現(xiàn)在的救生場(chǎng)
- 車(chē)規(guī)級(jí)BLE方案如何應(yīng)用在汽車(chē)上
- 助力智能化發(fā)展,Molex 推出多種高性能產(chǎn)品
- ST聯(lián)合艾睿電子發(fā)布電子燃油噴射參考設(shè)計(jì)方案
- 倡導(dǎo)智能化,“智能家居及樓宇創(chuàng)新”研討會(huì)即將開(kāi)幕
- arm 匯編語(yǔ)法
- 單片機(jī)定時(shí)器設(shè)置的門(mén)鈴
- 51單片機(jī)讀寫(xiě)RC522卡(LCD12864)RFID開(kāi)發(fā)程序與原理圖
- 單片機(jī)DIY小型電壓表
- nRF24L01+51單片機(jī)無(wú)線語(yǔ)音點(diǎn)滴報(bào)警系統(tǒng)
- 請(qǐng)教一下UART2中斷的問(wèn)題!
- MSP430Ware使用筆記 初始化XT1
- 單片機(jī)開(kāi)發(fā)板
- 現(xiàn)在已經(jīng)有五個(gè)網(wǎng)友回復(fù)我了,還有一個(gè)名額。。。。。。收到我站內(nèi)信的趕緊回復(fù)我吧
- FPGA高級(jí)技巧請(qǐng)教?
- CC3200 Wifi 模塊燒錄程序
- tft顏色顯示錯(cuò)誤
- 有誰(shuí)熟悉 2440? 驅(qū)動(dòng)問(wèn)題!
- 【MSP430 編譯器使用經(jīng)驗(yàn)】+使用CCS不愁找不到資料和例程
- 轉(zhuǎn)手FPGA開(kāi)發(fā)板