各位大神,小弟想用單軸搖桿(0-5V模擬量輸出)控制步進電機的方向和轉速,請問如何實現,以下是我的程序,但用Proteus仿真發現: 1.脈沖的輸出和搖桿的變化不對應。 2.脈沖波形中間會規律的出現一段較長時間的低電平或高電平。 希望各位大神指點!感謝! #include<reg52.h> #define uchar unsigned char #define uint unsigned int /*ADC0809將搖桿模擬信號轉換為數字信號*/ sbit ST=P0^0; //P0為ADC0809信號控制口 sbit EOC=P0^1; sbit OE=P0^2; sbit CLK=P0^3; sbit shineng=P2^0; // 步進電機驅動 sbit fangxiang=P2^1; sbit zhuan=P2^2; uchar num; uchar pwm; //控制脈沖頻率 uchar u_cai; //信號采集 void timestart() //ADC0809模塊初始化 { TMOD=0x01; TH1=(65536-1)/256; TL1=(65536-1)%256; TH0=(65536-10000)/256; TL0=(65536-10000)%256;
ET0=1; EA=1; ET1=1; TR1=1;
}
void delay(uint xms) //延時函數 { uinti,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); }
void jisuan(uchar u_cai) //通過采集的模擬信號計算脈沖周期 { if(u_cai<=125) { fangxiang=1; pwm=u_cai+1; } elseif((u_cai>125)&&(u_cai<=135)) { pwm=255; shineng=0; } else { fangxiang=0; pwm=-1*(u_cai-129)+126; } }
} void caishu() //ADC0809信號采集程序 {
ST=0; ST=1; ST=0; OE=1; delay(8); u_cai=P1; OE=0;
}
void main() { timestart(); shineng=1;
while(1) { num=0; caishu(); jisuan(u_cai); TR0=1; }
}
void time1() interrupt 3 { TH1=(65536-1)/256; TL1=(65536-1)%256; CLK=~CLK; }
void time0() interrupt 1 { TH0=(65536-100)/256; TL0=(65536-100)%256;
num++; if(num==pwm) { num=0; zhuan=~zhuan;
} }
|