用stc51单片机控制uln2003驱动直流马达,为啥马达只抖动一下?代码没问题,在开发板能用

用stc51单片机控制uln2003驱动直流马达,为啥马达只抖动一下?代码没问题,在开发板能用,第1张

uln2003是达林顿驱动芯片,一路输入一路输出一一对应。如果确定程序没有问题,建议使用单片机控制MOS管或三极管,看电机是否正常运转,其原理和用2003一个样。

如果用MOS管可以转,则是2003的问题,如果也不转,再检查程序吧。

STC12C56xxAD芯片用pwm调速程序的代码如下:

sbit k1=P3^4

sbit k2=P3^5

void delay(unsigned int cnt)

{

unsigned char i

for(cnt>0cnt--)

for(i=0i<250i++)

}

void main()

{

CCON=0//PCA初始化

CL=0//PCA的16位计数器低八位

CH=0//PCA的16位计数器高八位

CMOD=0x00//选择 系统时钟/12 为计数脉冲,则PWM的频率f=sysclk/256/12

CCAP0H=0x80// 占空比控制

CCAP0L=0x80

PCA_PWM0=0x00//控制占空比的第九位为0

CCAPM0=0x42//允许P13作为PWM输出

CR=1//启动PCA计数器

while(1)

{

if(k1==0)

{

delay(200)

while(k1==0)

CCAP0H+=5//占空比调节

CCAP0L+=10

}

if(k2==0)

{

delay(200)

while(k2==0)

CCAP0H-=5//占空比调节

CCAP0L-=5

}

}

}

这个STI6608驱动器输入信号是Pluse+DIR方式控制,可以带2个步进电机。Reset可以置位步进电机到位置1。刚启动是置位1次就可以了。以下编一简单的演示程序:

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned char

sbit pluse1=P1^0

sbit pluse2=P1^1

sbit dir1=P1^2

sbit dir2=P1^3

sbit reset1=P1^4

sbit reset2=P1^5

void delay(uint a)

{

uint i

while(a--)for(i=0i<1100i++)

}

main()

{

uint i

reset1=0

reset2=0

delay(1000)

reset1=1

reset2=1

while(1)

    {

    for(i=0i<4800i++)

        {

        pluse1=~pluse1

        dir1=1

        delay(5)

        }

    for(i=0i<4800i++)

        {

        pluse2=~pluse2

        dir2=1

        delay(5)

        }

    for(i=0i<4800i++)

        {

        pluse1=~pluse1

        dir1=0

        delay(5)

    for(i=0i<4800i++)

        {

        pluse2=~pluse2

        dir2=0

        delay(5)

        }        

    }

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11419596.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存