28BYJ48为什么不根据脉冲数转相应圈数 而是一直在转?
时间:10-02
整理:3721RD
点击:
光控窗帘设计 28BYJ48为什么不根据脉冲数转相应圈数 而是一直在转?设置N值小一点就转动几十度,大一点就一直转了,为什么? 谢谢!
uchar code FFW[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
uchar code REV[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
int a;
int n;
char m_flag=1; //窗帘状态 0 关 1开
char mm;
sbit MAN_ATUO=P3^5;
sbit open_shart=P3^6;
uint m;
int MANATUO() //为0时 自动 为 1 时手动
{
if(MAN_ATUO==0)
{ { a=!a; }
while(!MAN_ATUO);
}
return a;
}
int openshart() //为 0时 关闭 为1时 打开
{
if(open_shart==0&&MANATUO()==1)
{ { n=!n; }
while(!open_shart);
}
return n;
}
void DelayMS(uint ms)
{
uchar i;
while(ms--)
{
for(i=0;i<120;i++);
} }
void SETP_MOTOR_FFW(uchar n)
{
uchar i,j;
for(i=0;i<5*n;i++)
{
for(j=0;j<8;j++)
{
P1 = FFW[j];
DelayMS(2);
}}}
void SETP_MOTOR_REV(uchar n)
{
uchar i,j;
for(i=0;i<5*n;i++)
{
for(j=0;j<8;j++)
{
P1 = REV[j];
DelayMS(2);
}}}
//********************************************************************************************
if(MANATUO()==1) // 手动
{
if(openshart()==1 && m_flag==0) //开启信号。并且 窗子是关闭的 则打开。
{
m_flag=1;
SETP_MOTOR_FFW(N);
}
else if (openshart()==0&&m_flag==1)
{
m_flag=0;
SETP_MOTOR_REV(N);
}
}
/*************************************************************************************/
if(MANATUO()==1) // 手动
{
if(openshart()==1 && m_flag==0) //开启信号。并且 窗子是关闭的 则打开。
{
m_flag=1;
SETP_MOTOR_FFW(N);
}
else if (openshart()==0&&m_flag==1)
{
m_flag=0;
SETP_MOTOR_REV(N);
} }
if(MANATUO()==0) //自动
{
if(m_flag==0&&m_flag==1)
{
}
if(signal>=100&&m_flag==1) //自动关闭
{ m_flag=0;
SETP_MOTOR_REV(N);
}
else if(signal<=25&&m_flag==0) //自动打开窗帘
{ m_flag=1;
SETP_MOTOR_FFW(N);
}
}
代码太长了 没时间看,,,其工作原理是 每一个脉冲转动一定的度数,,这个还是带64倍减速的
我记得好像一共4098个脉冲 刚好转一圈来着~
谢谢小编分享,谢谢小编分享,谢谢小编分享,谢谢小编分享,谢谢小编分享,谢谢小编分享,谢谢小编分享,谢谢小编分享,谢谢小编分享,
