|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
懷疑發(fā)現(xiàn)LPC2210芯片的一個(gè)bug(關(guān)于PWM) |
| 作者:studyhard 欄目:ARM技術(shù) |
首先測(cè)試代碼如下: /** * Set the period of chop for print motor * * @param i32Us the period(us) * * @return None */ void vSetPWMPeriod(uint32 i32Us) { PWMMR0 = (uint32)((((fp32)Fpclk/1000000)/(PWMPR+1)) * i32Us); PWMLER |= 0x01; } /** * Set the duty of chop for print motor * * @param i8Duty the chop duty(%) * * @return 0 -- OK * !0 -- error */ int iSetPWMDuty(int8 i8Duty) { int32 i32Ticks; if(i8Duty > 100) { return EParameter; } PWMTCR = 0; PWMTCR = 0x02; //reset PWMTC i32Ticks = PWMMR0; //get the whole period //now ONLY PWM5 is used PWMMR5 = (int32)((fp32)i32Ticks * i8Duty / 100); PWMLER |= (0x01 << 5); return 0; } /** * start pwm OUTPUT * * @param i8Duty the chop duty(%) * * @return None */ void vStartPWM(void) { PWMTCR = 0x02; //reset PWMTC PWMTCR = 0x09; //enable PWM } /** * stop the pwm OUTPUT * * @param None * * @return None */ void vStopPWM(void) { PWMTCR = 0; } /** * Initialize the pwm function for motot current CONTROL * * @param None * * @return None */ void PWMInit(void) { PINSEL1 &= (~(0x03 << 10)); //config p0.21 as PWM5 connected PINSEL1 |= (0x01 << 10); PWMPR = 1; //clock frequency for PWM = Fpclk/2; PWMTCR = 0; PWMPC = 0; PWMMCR &= (~0x03); //reset PWMTC when PWMMR0 matched and disable interrupt PWMMCR |= (0x01 << 1); PWMMCR &= (~(0x03 << 16)); //disable interrupt for MR5 matched PWMPCR &= (~(0x01 << 5)); //selects SINGLE edge CONTROLled mode for PWM5 PWMPCR |= (0x01 << 13); //enable PWM5 OUTPUT vSetPWMPeriod(60); iSetPWMDuty(70); vStartPWM(); while(1); } 在配置完P(guān)WM5輸出之后,CPU進(jìn)入死循環(huán),未運(yùn)行其他任務(wù)并且禁止全部中斷。 結(jié)果輸出的波形如下: 。。。。|..............|-----|..............|-----|..........|。。。。。。。 波形解釋: ......... 輸出準(zhǔn)確的周期60us,占空比70%的波形(按照程序正確輸出),時(shí)間大約30ms | 表示分割符號(hào) ---- 表示輸出維持高電平不動(dòng)(時(shí)間持續(xù)大概3ms) 。。。。。 表示波形周期性重復(fù),省略。 以上波形周期性反復(fù)。 按照我的理解,PWM輸出如果能輸出2個(gè)以上周期的正確波形,應(yīng)該就沒有問題,結(jié)果該代碼在LPC2210上輸出的波形是正常輸出和維持高電平間隔出現(xiàn),非常之奇怪。我反復(fù)檢查了代碼和datasheet描述,感覺程序沒有問題。 該代碼用了很長(zhǎng)時(shí)間才發(fā)現(xiàn)這個(gè)問題,用示波器如果把時(shí)間寬度調(diào)整到小于20ms就看不出來波形有問題,一旦調(diào)整到大于20ms才發(fā)現(xiàn)波形有問題! 請(qǐng)大家有條件的可以做做實(shí)驗(yàn),也請(qǐng)高手指出問題所在?謝謝! * - 本貼最后修改時(shí)間:2005-4-29 8:03:06 修改者:studyhard |
| 2樓: | >>參與討論 |
| 作者: studyhard 于 2005/4/28 19:54:00 發(fā)布:
圖片
|
|
| 3樓: | >>參與討論 |
| 作者: studyhard 于 2005/4/28 19:56:00 發(fā)布:
放大之后就看不出波形有問題了
|
|
| 4樓: | >>參與討論 |
| 作者: studyhard 于 2005/4/28 20:04:00 發(fā)布:
如果把PWM的周期加大 如果把PWM的周期加大,-----|..............|-----|..........|的間隔周期也會(huì)同步加大,而周期如果大到一定程度,比如1000us以上,用我的示波器無論如何調(diào)整參數(shù)都無法捕捉到該錯(cuò)誤波形。 |
|
| 5樓: | >>參與討論 |
| 作者: foyyof 于 2005/4/28 23:32:00 發(fā)布:
re: PWMMCR &= (~0x03); //reset PWMTC when PWMMR0 matched and disable interrupt 你只用MR5,這里設(shè)置MR0? |
|
| 6樓: | >>參與討論 |
| 作者: studyhard 于 2005/4/29 7:55:00 發(fā)布:
有問題嗎? 我用的是單邊沿觸發(fā)模式,MR0控制了PWM波形的周期,而MR5控制了波形的占空比。 |
|
| 7樓: | >>參與討論 |
| 作者: jiangbo123 于 2005/4/29 7:58:00 發(fā)布:
我也沒有看出來程序的問題 情況描述得這么清楚,實(shí)在是提問人的楷模,呵呵。 如果這樣zlg還不能給予答復(fù),那么他們的技術(shù)支持真的不能令人滿意了。 我頂! |
|
| 8樓: | >>參與討論 |
| 作者: zlgARM 于 2005/4/29 8:48:00 發(fā)布:
re: 您觀察方式不太準(zhǔn)確。 您設(shè)置的PWM周期為60us,因而您的觀察分辨率應(yīng)該在與之相當(dāng)?shù)姆秶鷥?nèi),不要差別太大。如您說的大于20ms,這就和示波器有關(guān)系了。 不過您可以這么看,先定位在ms級(jí)別,看到錯(cuò)誤波形后,然后對(duì)錯(cuò)誤波形進(jìn)行放大,看是否存在問題。 |
|
| 9樓: | >>參與討論 |
| 作者: zlgARM 于 2005/4/29 9:01:00 發(fā)布:
補(bǔ)充:使用您的程序,我們沒能重現(xiàn)這個(gè)錯(cuò)誤。 |
|
| 10樓: | >>參與討論 |
| 作者: studyhard 于 2005/4/29 9:23:00 發(fā)布:
“看到錯(cuò)誤波形后,然后對(duì)錯(cuò)誤波形進(jìn)行放大,看是否存在問題。” 看到錯(cuò)誤波形之后,放大之后依然可以看到錯(cuò)誤波形。而且我現(xiàn)在的用法是將PWM的輸出與另外一個(gè)波形進(jìn)行與操作,查看與操作的輸出同樣可以看到該錯(cuò)誤波形,該錯(cuò)誤波形(輸出維持高電平)使得與門輸出直接和另外一個(gè)與門輸入波形一樣。 |
|
| 11樓: | >>參與討論 |
| 作者: studyhard 于 2005/4/29 9:24:00 發(fā)布:
另外 我將PWM5換到PWM2,現(xiàn)象一樣,甚至同時(shí)允許PWM5和PWM2的時(shí)候,輸出完全一樣的錯(cuò)誤波形。 |
|
| 12樓: | >>參與討論 |
| 作者: autozmy 于 2005/4/29 9:26:00 發(fā)布:
那你請(qǐng)換個(gè)示波器試試,我們這邊測(cè)試沒有問題。 |
|
| 13樓: | >>參與討論 |
| 作者: studyhard 于 2005/4/29 9:49:00 發(fā)布:
我再次在LPC2210的開發(fā)板上實(shí)驗(yàn)實(shí)驗(yàn)并且現(xiàn)象重現(xiàn)! 我的示波器是泰克的TDS3052,500mHz, 5GS/s,用另外一臺(tái)泰克的示波器現(xiàn)象一樣。下面是波形放大之后看到的。
|
|
| 14樓: | >>參與討論 |
| 作者: autozmy 于 2005/4/29 9:54:00 發(fā)布:
re 你用的是什么板子?是不是在EasyARM2200開發(fā)板上跑?還有沒有其它與PWM無關(guān)的程序在跑,是不是在其它地方也有操作到與PWM相關(guān)的 * - 本貼最后修改時(shí)間:2005-4-29 9:56:40 修改者:autozmy |
|
| 15樓: | >>參與討論 |
| 作者: studyhard 于 2005/4/29 9:59:00 發(fā)布:
謝謝您的回復(fù)! 我做了一個(gè)在LPC2200開發(fā)板上運(yùn)行的bin文件請(qǐng)直接燒錄到FLASH起始地址運(yùn)行。我已經(jīng)驗(yàn)證過了,在PWM2和PWM5上輸出同樣的問題波形。我確定不是示波器的問題,只是如果在示波器的正常觸發(fā)模式下,如果時(shí)間設(shè)置到10ms(或者更低),則觀察不到該現(xiàn)象。 http://www.21icsearch.com/buzi/upimage/upfile/20054291004130.pdf 一下鏈接是bin文件,請(qǐng)下載之后,把文件名修改成bin,然后燒錄實(shí)驗(yàn)。這里不讓上傳bin文件。 http://www.21icsearch.com/buzi/upimage/upfile/20054291004130.pdf |
|
| 16樓: | >>參與討論 |
| 作者: zlgarm 于 2005/4/29 10:08:00 發(fā)布:
re 我們使用的AGILENT 54622D 數(shù)字示波器, 即使大于20ms也沒有觀察到錯(cuò)誤波形,很正常啊。 |
|
| 17樓: | >>參與討論 |
| 作者: studyhard 于 2005/4/29 10:14:00 發(fā)布:
您能用我的bin文件試試嗎? 我的程序里面沒有做任何其他工作。我的main函數(shù)里面只有一個(gè)函數(shù)調(diào)用: void main() { PWMInit(); } 現(xiàn)象依然。這回真是奇怪了,有哪位網(wǎng)友手頭有板子,能幫我試試嗎? |
|
| 18樓: | >>參與討論 |
| 作者: zlgARM 于 2005/4/29 10:17:00 發(fā)布:
re. 這個(gè)BIN文件燒錄到哪里,EasyARM2200標(biāo)配是2210,沒有內(nèi)部FLASH。 |
|
| 19樓: | >>參與討論 |
| 作者: studyhard 于 2005/4/29 10:19:00 發(fā)布:
LPC2200開發(fā)板不是有外部FLASH嗎?? |
|
| 20樓: | >>參與討論 |
| 作者: studyhard 于 2005/4/29 10:20:00 發(fā)布:
能留個(gè)電話嗎? |
|
| 21樓: | >>參與討論 |
| 作者: zlgARM 于 2005/4/29 10:27:00 發(fā)布:
請(qǐng)垂詢:020-22644384 * - 本貼最后修改時(shí)間:2005-4-29 11:25:47 修改者:zlgARM |
|
| 22樓: | >>參與討論 |
| 作者: exdata 于 2005/4/29 10:29:00 發(fā)布:
re 有沒有debug斷點(diǎn)跟蹤過?這倒像程序異常的樣子,程序重新開始跑。。。 |
|
| 23樓: | >>參與討論 |
| 作者: studyhard 于 2005/4/29 10:40:00 發(fā)布:
我已經(jīng)將程序燒錄進(jìn)去了 復(fù)位了n次,現(xiàn)象還是一樣。 |
|
| 24樓: | >>參與討論 |
| 作者: studyhard 于 2005/4/29 10:44:00 發(fā)布:
電話打不通呀! |
|
| 25樓: | >>參與討論 |
| 作者: exdata 于 2005/4/29 11:21:00 發(fā)布:
似乎是我沒有描述清楚: “您的程序像進(jìn)入異常情況被重復(fù)復(fù)位的現(xiàn)象” |
|
| 26樓: | >>參與討論 |
| 作者: zlgARM 于 2005/4/29 11:24:00 發(fā)布:
很抱歉,剛才號(hào)碼寫錯(cuò)了,已經(jīng)修正。 |
|
| 27樓: | >>參與討論 |
| 作者: studyhard 于 2005/4/29 11:33:00 發(fā)布:
我再次用邏輯分析儀抓獲該波形。 我再次用邏輯分析儀抓獲該波形。
|
|
| 28樓: | >>參與討論 |
| 作者: studyhard 于 2005/4/29 11:34:00 發(fā)布:
放大
|
|
| 29樓: | >>參與討論 |
| 作者: studyhard 于 2005/4/29 11:35:00 發(fā)布:
繼續(xù)放大
|
|
| 30樓: | >>參與討論 |
| 作者: studyhard 于 2005/4/29 11:36:00 發(fā)布:
放大 * - 本貼最后修改時(shí)間:2005-4-29 12:13:41 修改者:studyhard |
|
| 31樓: | >>參與討論 |
| 作者: studyhard 于 2005/4/29 11:37:00 發(fā)布:
依然是放大 這次可以明顯看到問題波形
|
|
| 32樓: | >>參與討論 |
| 作者: studyhard 于 2005/4/29 12:08:00 發(fā)布:
為了保證測(cè)試環(huán)境一樣 to zlgArm:您能用我的bin文件,并且在LPC2210的CPU下測(cè)試一下嗎?我還試過了雙邊沿觸發(fā)模式下的波形,情況一樣! |
|
| 33樓: | >>參與討論 |
| 作者: studyhard 于 2005/4/29 12:09:00 發(fā)布:
希望大家一起來研究! 請(qǐng)手里有測(cè)試環(huán)境的朋友能幫我試試,該問題最終搞清楚之后我會(huì)對(duì)提供幫助或者提出建設(shè)性意見的網(wǎng)友表示感謝!提供44b0x下移植成功的nuclues操作系統(tǒng)源代碼(同樣很容易就可以移植到PHILIPS的arm)以供學(xué)習(xí)之用!謝謝! |
|
| 34樓: | >>參與討論 |
| 作者: studyhard 于 2005/4/29 12:12:00 發(fā)布:
to exdata 我可以確定我的程序沒有復(fù)位: 1、我在仿真器上跑過,停下仿真器,程序指向while(1);的地方。 2、我的程序復(fù)位之后會(huì)讓蜂鳴器響一聲,系統(tǒng)復(fù)位之后我只聽到一次響聲,但是波形持續(xù)輸出。 |
|
| 35樓: | >>參與討論 |
| 作者: xuekcd832 于 2005/4/29 15:04:00 發(fā)布:
換個(gè)模擬示波器看看。 |
|
| 36樓: | >>參與討論 |
| 作者: pubstar 于 2005/4/29 16:31:00 發(fā)布:
這樣吧,另外加一個(gè)定時(shí)器,讓口定時(shí)翻轉(zhuǎn),比如10ms翻轉(zhuǎn)一次 這樣,從其它方面看看CPU運(yùn)行是否正常 |
|
| 37樓: | >>參與討論 |
| 作者: jiangbo123 于 2005/4/30 9:43:00 發(fā)布:
我也開始懷疑示波器的問題了,靠。 |
|
| 38樓: | >>參與討論 |
| 作者: greatbin 于 2005/4/30 12:02:00 發(fā)布:
我分析:程序運(yùn)行一會(huì)兒就從頭跑了,導(dǎo)致波形一會(huì)兒一個(gè)斷面 * - 本貼最后修改時(shí)間:2005-4-30 15:51:12 修改者:greatbin |
|
| 39樓: | >>參與討論 |
| 作者: jiangbo123 于 2005/5/1 22:10:00 發(fā)布:
程序應(yīng)該沒有復(fù)位的,前面好像提到過。 確實(shí)很奇怪。呵呵。 * - 本貼最后修改時(shí)間:2005-5-1 22:48:36 修改者:jiangbo123 |
|
| 40樓: | >>參與討論 |
| 作者: ray0812 于 2005/5/4 22:48:00 發(fā)布:
我覺得示波器問題可能性大些 數(shù)字示波器并不總是以最高取樣率取樣的,而取樣頻率與信號(hào)頻率又不同步,這樣在時(shí)基設(shè)得較長(zhǎng)時(shí)有可能使波形的細(xì)節(jié)丟失。對(duì)于樓主的情況就有可能連續(xù)幾個(gè)樣點(diǎn)都取不到低電平,于是重新樓主所示的波形。這也說明為什么周期增大后和時(shí)基不大時(shí)看不到錯(cuò)誤波形。我覺得,用40us時(shí)基觀測(cè)的波形是準(zhǔn)確的,如果波形沒有任何異常閃爍的話?梢詫⑹静ㄆ鞯娘@示設(shè)為永久保持,看長(zhǎng)時(shí)間是否能抓到錯(cuò)誤的波形。另外,正如一位朋友所說,換一部模擬示波器看看也是個(gè)很好的主意。 |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |