欢迎光临散文网 会员登陆 & 注册

第9章-步进电机与蜂鸣器(上:步进电机)

2023-08-27 10:56 作者:feifeiluan2  | 我要投稿

总结:外面步进电机转1圈,对应单片机发4096次信号

把转几圈的度数转换成单片机发几次信号,

逆时针转对应那个数组从0-7依次发

顺时针转对应那个数组从7-0依次发

发送频率是500,2ms发一次,发太快可能不转.

一个引脚的输出有2种情况

输出0(拉地)+输出高阻(旁观),,,或者,,,,输出0(拉地)+输出1(电源)


课后第4题,

#include <reg52.h>

typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
typedef signed char i8;
typedef signed int i16;
typedef signed long i32;

i32 beats = 0;

code u8 BeatCode[8] = {0x0E, 0x0C, 0x0D, 0x09, 0x0B, 0x03, 0x07, 0x06};

i32 anyAngle=180;

//正角度是逆时针转,负角度是顺时针转
void StartMotor(i32 angle)
{
    EA=0;
    beats=(angle*4096)/360;
    EA=1;
}

void StopMotor()
{
    EA=0;
    beats=0;
    EA=1;
}

void TrunMotor()
{
    static u8 index=0;
    u8 tmp;

    if(beats)
    {
        if(beats>0)
        {
            beats--;
            index++;
            index&=0x07;
        }else
        {
            beats++;
            index--;
            index&=0x07;
        }
        tmp=P1;
        tmp&=0xF0;
        tmp|=BeatCode[index];
        P1=tmp;

    }else
    {
        P1|=0x0F;
    }
}


void main(void)
{
    TMOD = 0x01;
    TH0 = 0xFC;
    TL0 = 0x66;
    ET0 = EA = TR0 = 1;

    StartMotor(anyAngle);
    while (1)
    {
        ;
    }
}


void Timer0_ISR()interrupt 1
{
    TH0=0xFC;
    TL0=0x66;

    TrunMotor();
}

第9章-步进电机与蜂鸣器(上:步进电机)的评论 (共 条)

分享到微博请遵守国家法律