[討論] 同樣的程式碼 卻不同的結果@ @
這個問題困擾我很久了...
我想利用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;}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.166.5.9
→
08/03 04:16, , 1F
08/03 04:16, 1F
→
08/03 04:19, , 2F
08/03 04:19, 2F
→
08/03 04:20, , 3F
08/03 04:20, 3F
→
08/03 04:22, , 4F
08/03 04:22, 4F
→
08/03 04:23, , 5F
08/03 04:23, 5F
恩恩 我同學也是用89S52
您說由硬體排除,我昨天也試過將所有的零件都換新的(89S52,電容,振盪器等)
除了電變與無刷馬達我沒換外 其餘的都換過了
所以我在想會不會是程式碼中有我沒法發現的BUG存在 謝謝你的回覆
※ 編輯: alexanjou 來自: 36.239.250.217 (08/03 10:53)
推
08/03 13:19, , 6F
08/03 13:19, 6F
推
08/03 16:45, , 7F
08/03 16:45, 7F
→
08/03 23:56, , 8F
08/03 23:56, 8F
還是說我的code本身有問題是我沒注意到的? 有高手可以撥冗幫我檢查一下嗎?
感激不盡> <"
※ 編輯: alexanjou 來自: 36.239.250.217 (08/04 20:32)
推
08/04 21:30, , 9F
08/04 21:30, 9F
→
08/04 21:30, , 10F
08/04 21:30, 10F
我剛已經有接示波器了 有出現預期要出現的圖形(即按按鈕會有變化)
但 如果我接上馬達的訊號線 示波器上的圖形就會跑掉 馬達也無法如期運轉
馬達的電源可以用電供12v 還是一定給用電池?
我目前覺得是馬達或是電變故障的可能比較大~~
※ 編輯: alexanjou 來自: 140.116.179.155 (08/05 15:44)
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
ASM 近期熱門文章
PTT數位生活區 即時熱門文章