音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(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ù)
懷疑發(fā)現(xiàn)LPC2210芯片的一個(gè)bug(關(guān)于PWM)
首先測(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
圖片
 

3樓: >>參與討論
studyhard
放大之后就看不出波形有問題了
 

4樓: >>參與討論
studyhard
如果把PWM的周期加大
如果把PWM的周期加大,-----|..............|-----|..........|的間隔周期也會(huì)同步加大,而周期如果大到一定程度,比如1000us以上,用我的示波器無論如何調(diào)整參數(shù)都無法捕捉到該錯(cuò)誤波形。

5樓: >>參與討論
foyyof
re:
PWMMCR &= (~0x03);                                          //reset PWMTC when PWMMR0 matched and disable interrupt
你只用MR5,這里設(shè)置MR0?

6樓: >>參與討論
studyhard
有問題嗎?
我用的是單邊沿觸發(fā)模式,MR0控制了PWM波形的周期,而MR5控制了波形的占空比。

7樓: >>參與討論
jiangbo123
我也沒有看出來程序的問題
情況描述得這么清楚,實(shí)在是提問人的楷模,呵呵。
如果這樣zlg還不能給予答復(fù),那么他們的技術(shù)支持真的不能令人滿意了。
我頂!

8樓: >>參與討論
zlgARM
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
補(bǔ)充:使用您的程序,我們沒能重現(xiàn)這個(gè)錯(cuò)誤。
 
10樓: >>參與討論
studyhard
“看到錯(cuò)誤波形后,然后對(duì)錯(cuò)誤波形進(jìn)行放大,看是否存在問題。”
看到錯(cuò)誤波形之后,放大之后依然可以看到錯(cuò)誤波形。而且我現(xiàn)在的用法是將PWM的輸出與另外一個(gè)波形進(jìn)行與操作,查看與操作的輸出同樣可以看到該錯(cuò)誤波形,該錯(cuò)誤波形(輸出維持高電平)使得與門輸出直接和另外一個(gè)與門輸入波形一樣。

11樓: >>參與討論
studyhard
另外
我將PWM5換到PWM2,現(xiàn)象一樣,甚至同時(shí)允許PWM5和PWM2的時(shí)候,輸出完全一樣的錯(cuò)誤波形。

12樓: >>參與討論
autozmy
那你請(qǐng)換個(gè)示波器試試,我們這邊測(cè)試沒有問題。
    

13樓: >>參與討論
studyhard
我再次在LPC2210的開發(fā)板上實(shí)驗(yàn)實(shí)驗(yàn)并且現(xiàn)象重現(xiàn)!
我的示波器是泰克的TDS3052,500mHz, 5GS/s,用另外一臺(tái)泰克的示波器現(xiàn)象一樣。下面是波形放大之后看到的。

14樓: >>參與討論
autozmy
re
    你用的是什么板子?是不是在EasyARM2200開發(fā)板上跑?還有沒有其它與PWM無關(guān)的程序在跑,是不是在其它地方也有操作到與PWM相關(guān)的

* - 本貼最后修改時(shí)間:2005-4-29 9:56:40 修改者:autozmy

15樓: >>參與討論
studyhard
謝謝您的回復(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
re
    我們使用的AGILENT 54622D 數(shù)字示波器, 即使大于20ms也沒有觀察到錯(cuò)誤波形,很正常啊。


17樓: >>參與討論
studyhard
您能用我的bin文件試試嗎?
我的程序里面沒有做任何其他工作。我的main函數(shù)里面只有一個(gè)函數(shù)調(diào)用:
void main()
{
   PWMInit();
}

現(xiàn)象依然。這回真是奇怪了,有哪位網(wǎng)友手頭有板子,能幫我試試嗎?

18樓: >>參與討論
zlgARM
re.
這個(gè)BIN文件燒錄到哪里,EasyARM2200標(biāo)配是2210,沒有內(nèi)部FLASH

19樓: >>參與討論
studyhard
LPC2200開發(fā)板不是有外部FLASH嗎??
 
20樓: >>參與討論
studyhard
能留個(gè)電話嗎?
 
21樓: >>參與討論
zlgARM
請(qǐng)垂詢:020-22644384
 

* - 本貼最后修改時(shí)間:2005-4-29 11:25:47 修改者:zlgARM

22樓: >>參與討論
exdata
re
有沒有debug斷點(diǎn)跟蹤過?這倒像程序異常的樣子,程序重新開始跑。。。

23樓: >>參與討論
studyhard
我已經(jīng)將程序燒錄進(jìn)去了
復(fù)位了n次,現(xiàn)象還是一樣。

24樓: >>參與討論
studyhard
電話打不通呀!
 
25樓: >>參與討論
exdata
似乎是我沒有描述清楚:
“您的程序像進(jìn)入異常情況被重復(fù)復(fù)位的現(xiàn)象”

26樓: >>參與討論
zlgARM
很抱歉,剛才號(hào)碼寫錯(cuò)了,已經(jīng)修正。
 
27樓: >>參與討論
studyhard
我再次用邏輯分析儀抓獲該波形。
我再次用邏輯分析儀抓獲該波形。

28樓: >>參與討論
studyhard
放大
 

29樓: >>參與討論
studyhard
繼續(xù)放大
 

30樓: >>參與討論
studyhard
放大
 

* - 本貼最后修改時(shí)間:2005-4-29 12:13:41 修改者:studyhard

31樓: >>參與討論
studyhard
依然是放大
這次可以明顯看到問題波形

32樓: >>參與討論
studyhard
為了保證測(cè)試環(huán)境一樣
to zlgArm:您能用我的bin文件,并且在LPC2210的CPU下測(cè)試一下嗎?我還試過了雙邊沿觸發(fā)模式下的波形,情況一樣!

33樓: >>參與討論
studyhard
希望大家一起來研究!
請(qǐng)手里有測(cè)試環(huán)境的朋友能幫我試試,該問題最終搞清楚之后我會(huì)對(duì)提供幫助或者提出建設(shè)性意見的網(wǎng)友表示感謝!提供44b0x下移植成功的nuclues操作系統(tǒng)源代碼(同樣很容易就可以移植到PHILIPS的arm)以供學(xué)習(xí)之用!謝謝!

34樓: >>參與討論
studyhard
to exdata
我可以確定我的程序沒有復(fù)位:
1、我在仿真器上跑過,停下仿真器,程序指向while(1);的地方。
2、我的程序復(fù)位之后會(huì)讓蜂鳴器響一聲,系統(tǒng)復(fù)位之后我只聽到一次響聲,但是波形持續(xù)輸出。

35樓: >>參與討論
xuekcd832
換個(gè)模擬示波器看看。
 
36樓: >>參與討論
pubstar
這樣吧,另外加一個(gè)定時(shí)器,讓口定時(shí)翻轉(zhuǎn),比如10ms翻轉(zhuǎn)一次
這樣,從其它方面看看CPU運(yùn)行是否正常

37樓: >>參與討論
jiangbo123
我也開始懷疑示波器的問題了,靠。
 
38樓: >>參與討論
greatbin
我分析:程序運(yùn)行一會(huì)兒就從頭跑了,導(dǎo)致波形一會(huì)兒一個(gè)斷面
 

* - 本貼最后修改時(shí)間:2005-4-30 15:51:12 修改者:greatbin

39樓: >>參與討論
jiangbo123
程序應(yīng)該沒有復(fù)位的,前面好像提到過。
確實(shí)很奇怪。呵呵。

* - 本貼最后修改時(shí)間:2005-5-1 22:48:36 修改者:jiangbo123

40樓: >>參與討論
ray0812
我覺得示波器問題可能性大些
    數(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è)很好的主意。

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請(qǐng)教一條匯編指令
boot loader 1.63 與EASYJTAG不兼容?
put_char() 可不可這樣寫
AXD突然沒法用了
啟動(dòng)代碼!
免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)