欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
單片機(jī)程序編譯沒(méi)有問(wèn)題,燒錄后控制不了步進(jìn)電機(jī)
[打印本頁(yè)]
作者:
新手-菜鳥(niǎo)
時(shí)間:
2018-11-17 13:41
標(biāo)題:
單片機(jī)程序編譯沒(méi)有問(wèn)題,燒錄后控制不了步進(jìn)電機(jī)
#include "reg52.h"
void delay(unsigned int t);
//Motor
sbit F1 = P1^0;
sbit F2 = P1^1;
sbit F3 = P1^2;
sbit F4 = P1^3;
sbit k1 =P3^0;
sbit k2=P3^1;
sbit RX=P0^6; //
sbit TX=P0^7;
sbit shuidi=P0^3;
sbit hongyai=P0^0;
sbit yali=P0^2;
bit flag1=0;
bit flag2=0;
signed int time=0;
unsigned int timer=0;
unsigned long S=0;
unsigned char code FFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6}; //反轉(zhuǎn)
unsigned char code FFZ[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe}; //正轉(zhuǎn)
void Conut(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S= (long)(time*0.17); //算出來(lái)是CM
if((S>=4000)||flag1==1) //
{
flag1=0;
}
}
void zd0() interrupt 1 //T0中斷用來(lái)計(jì)數(shù)器溢出,超過(guò)測(cè)距范圍
{
flag1=1; //中斷溢出標(biāo)志
}
void panduan()
{
TMOD=0x11; //設(shè)T0為方式1,GATE=1;
TH0=0;
TL0=0;
TH1=0xf8; //2MS定時(shí)
TL1=0x30;
ET0=1; //允許T0中斷
ET1=1; //允許T1中斷
TR1=1; //開(kāi)啟定時(shí)器
EA=1; //總中斷
{
while(!RX); //當(dāng)RX為零時(shí)等待
TR0=1; //開(kāi)啟計(jì)數(shù)
while(RX); //當(dāng)RX為1計(jì)數(shù)并等待
TR0=0; //關(guān)閉計(jì)數(shù)
Conut(); //計(jì)算
if(S<80)
flag2=0;
else
flag2=0;
}
//調(diào)節(jié)轉(zhuǎn)速
}
void motor_FFW()
{
unsigned char i;
{
for (i=0; i<8; i++)
{
if(hongyai==0) P1 = FFW[i]&0x1f; //調(diào)取數(shù)據(jù)
if(k2==0) P1 = FFW[i]&0x1f;
if(yali==0) P1 = FFW[i]&0x1f;
if(flag2==0)P1 = FFW[i]&0x1f;
delay(1);
}
}
}
void motor_FFZ()
{
unsigned char i;
{
for (i=0; i<8; i++)
{
if(k1==0) P1 = FFZ[i]&0x1f;
if(shuidi==0) P1 = FFZ[i]&0x1f;
delay(1); //調(diào)節(jié)轉(zhuǎn)速
}
}
}
void main()
{
while(1)
{
if(flag2==0)
motor_FFW();
if(shuidi==0)
motor_FFZ();
if(hongyai==0)
motor_FFW();
if(yali==0)
motor_FFW();
}
}
復(fù)制代碼
編譯沒(méi)有問(wèn)題,程序燒錄后控制不了五線四相步進(jìn)電機(jī)
求大神解決!
作者:
angmall
時(shí)間:
2018-11-17 21:23
你的程序有缺陷,我給你來(lái)個(gè)程序試試
/*-----------------------------------------------
名稱(chēng):步進(jìn)電機(jī)
內(nèi)容:本程序用于測(cè)試4相步進(jìn)電機(jī)常規(guī)驅(qū)動(dòng)
使用1-2相勵(lì)磁
1-2相激勵(lì)功率增倍,步進(jìn)角度減半,抖動(dòng)減少
順序如下 a-ab-b-bc-c-cd-d-da 又稱(chēng)4相8拍
------------------------------------------------*/
#include <reg52.h>
sbit A1=P1^0; //定義步進(jìn)電機(jī)連接端口
sbit B1=P1^1;
sbit C1=P1^2;
sbit D1=P1^3;
#define Coil_AB1 {A1=1;B1=1;C1=0;D1=0;}//AB相通電,其他相斷電
#define Coil_BC1 {A1=0;B1=1;C1=1;D1=0;}//BC相通電,其他相斷電
#define Coil_CD1 {A1=0;B1=0;C1=1;D1=1;}//CD相通電,其他相斷電
#define Coil_DA1 {A1=1;B1=0;C1=0;D1=1;}//D相通電,其他相斷電
#define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通電,其他相斷電
#define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通電,其他相斷電
#define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通電,其他相斷電
#define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通電,其他相斷電
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部斷電
unsigned char Speed;
bit Flag;
/*------------------------------------------------
uS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無(wú)返回值
unsigned char 是定義無(wú)符號(hào)字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編,大致延時(shí)
長(zhǎng)度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無(wú)返回值
unsigned char 是定義無(wú)符號(hào)字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編
------------------------------------------------*/
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延時(shí)1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
主函數(shù)
------------------------------------------------*/
main()
{
unsigned int i=512;//旋轉(zhuǎn)一周時(shí)間
EA=1; //全局中斷開(kāi)
EX0=1; //外部中斷0開(kāi)
IT0=1; //1表示邊沿觸發(fā)
Speed=10;
while(1){
Coil_OFF
while((i--)&&Flag) //正向
{ Coil_A1
DelayMs(Speed);
Coil_AB1 //遇到Coil_AB1 用{A1=1;B1=1;C1=0;D1=0;}代替
DelayMs(Speed); //改變這個(gè)參數(shù)可以調(diào)整電機(jī)轉(zhuǎn)速 ,
//數(shù)字越小,轉(zhuǎn)速越大,力矩越小
Coil_B1
DelayMs(Speed);
Coil_BC1
DelayMs(Speed);
Coil_C1
DelayMs(Speed);
Coil_CD1
DelayMs(Speed);
Coil_D1
DelayMs(Speed);
Coil_DA1
DelayMs(Speed);
}
Coil_OFF
i=512;
while((i--)&&(!Flag))//反向
{
Coil_A1
DelayMs(Speed);
Coil_DA1 //遇到Coil_AB1 用{A1=1;B1=1;C1=0;D1=0;}代替
DelayMs(Speed); //改變這個(gè)參數(shù)可以調(diào)整電機(jī)轉(zhuǎn)速 ,
//數(shù)字越小,轉(zhuǎn)速越大,力矩越小
Coil_D1
DelayMs(Speed);
Coil_CD1
DelayMs(Speed);
Coil_C1
DelayMs(Speed);
Coil_BC1
DelayMs(Speed);
Coil_B1
DelayMs(Speed);
Coil_AB1
DelayMs(Speed);
}
}
}
/*------------------------------------------------
外部中斷程序
------------------------------------------------*/
void ISR_INT0(void) interrupt 0
{
if(!INT0)
{
DelayMs(10);//在此處可以添加去抖動(dòng)程序,防止按鍵抖動(dòng)造成錯(cuò)誤
if(!INT0)
//while(!INT1);//等待按鍵釋放
{
Flag=!Flag;
}
}
}
復(fù)制代碼
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1