[討論] 同樣的程式碼 卻不同的結果@ @

作者: alexanjou (盜版神話)   2013-08-02 21:26:50
這個問題困擾我很久了...
我想利用89S52控制我的無刷直流馬達
程式碼成功的compiler過 也能燒到8051裡了
電路圖也蠻簡單的 我也很確定不會接錯
可是 為什麼我接到直流馬達時 卻始終聽到錯誤的聲音「滴、滴、滴」
而我同學卻說一樣的程式碼 他的馬達就能動
程式的設計是這樣的
首先
在馬達的自檢階段 我的頻寬是1000
接著 我按P2的按鈕 開始增加其頻寬
最後達到2000 馬達開始運轉
而我現在馬達 只有開機聲 但是沒有自檢的聲音
這個問題讓我快要抓狂了QQ 我實在不知道是哪邊出了錯
希望能有大大給我一些建議
感謝
(以下附上我的程式碼)
#include "reg51.h"
//for 8051 12MHz
//range 1100~2100
//0x44c~0x834 12bit
int pwm=1100;
int base=20000;
int speed(int motor,int c);
void wait();
void main ()
{
P1=0x00;
P2=0xff;
IE=0x8A;
TH1=0xb1;
TL1=0xe0;
TH0=(65536-pwm)/256;
TL0=(65536-pwm)%256;
TMOD=0x11;
TCON=0x50;
while(1)
{
if(P2==0x7f)
{
pwm=speed(pwm,1);
wait();
P2=0xff;
}else if(P2==0xbf)
{
pwm=speed(pwm,0);
wait();
P2=0xff;
}
}
}
void low(void) interrupt 1// time0
{
P1=0x00;
TR0=0;
TH0=(65536-pwm)/256;
TL0=(65536-pwm)%256;
}
void high(void) interrupt 3// time1
{
TH1=0xb1;
TL1=0xe0;
P1=0xff;
TR0=1;
}
int speed(int motor,int c)
{
if(motor<2100 && c==1)
motor=motor+50;
else if(motor>1100 && c==0)
motor=motor-50;
return motor;
}
void wait()
{
while(P2!=0xff)
{P2=0xff;}
}
作者: cwl751005 (緯)   2013-08-03 04:16:00
用的也是同一個硬體嗎?另外同學也是89S52?題外話一下= =,我最近有時出現同一程式碼(C51)用C51系列跟S51系列會有不同問題出現原PO可以先作硬體排除再對程式碼下手,同個程式應該不會有太大問題(除非燒錄中出錯= =+)
作者: ruemann (路人甲)   2013-08-03 13:19:00
有示波器可以看一下你的PWM有沒有照預期的速度變化嗎?
作者: damody (天亮damody)   2013-08-03 16:45:00
馬達的回授有偏差嗎? 示波器看沒問題就是馬達的問題了。
作者: alexanjou (盜版神話)   2013-08-03 23:56:00
恩恩 好 周一去試試看
作者: derek5566 (你說呢)   2013-08-04 21:30:00
可能是馬達懷掉 ?當初我也是馬達不動,拉了示波器看波形才確定code沒錯,結果是馬達壞了

Links booklink

Contact Us: admin [ a t ] ucptt.com