用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

}

}

}

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

uchar stepd[]={0x11,0x23,0x22,0x66,0x44,0xcc,0x88,0x99}

uchar num=0

uint t=0,sec=0

void t0isr() interrupt 1

{

TH0=(65536-10000)/256

TL0=(65536-10000)%256

P2=stepd[num]

num++

num%=8

}

void t1isr() interrupt 3

{

TH1=(65536-50000)/256

TL1=(65536-50000)%256

t++

if(t>=20)

{

t=0

sec++

if(sec>=30)

{

sec=0

TR0=0 //时间到,点击停止。

}

}

}

main()

{

TMOD=0x11

TH0=(65536-10000)/256

TL0=(65536-10000)%256

TH1=(65536-50000)/256

TL1=(65536-50000)%256

TR0=1

TR1=1

ET1=1

ET0=1

EA=1

while(1)

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存