主页 > 科技生活 >大鸭梨烤鸭_单片机控制直流电机怎么调速,怎么编程?? >

大鸭梨烤鸭_单片机控制直流电机怎么调速,怎么编程??

单片机控制直流电机怎么调速,怎么编程??
用pwm来调速过不同型号的机代同,我这mega128的8位!
#include

void delly(unsigned char A);
void drlly(unsigned char B);

void main(void)
{ DDRB=0xff;
//PORTB=0xff;

delly(1);
drlly(1);

}
void delly(unsigned char A)
{TCCR0=0x00;
ASSR=0x01;
TCNT0=A;
OCR0=255-A;
// TIFR=0X03;
TCCR0=0X7a;
// while(!(TIFR&0x02));
}
void drlly(unsigned char B)
{TCCR2=0x00;
ASSR=0x01;
TCNT2=B;
OCR2=255-B;
// TIFR=0X03;
TCCR2=0X7a;
// while(!(TIFR&0x02));
}可用pwm调速!就是调节脉冲的频率或者说是周期
什么是直流电机的软启动,如何用51单片机编程实现?
就是用程序来驱动,比如说用单片驱动直流电机,假设P1.1口接直流电动机,给个高电平就可以启动电机。那么编程的时候,给P1.1赋值,即P1.1=01H,就可以启动了。追问

这是软启动吗?什么叫软启动呢?请解释详细点!追答

大功率电机一般采用软启动.大功率电机如果直接启动,启动电流比较大,可能出现问题(如保险系统,输电线路,电机线圈等).软启动装置是:在电机启动时,通过接触器将电机接法改为Y接,电机初步启动后通过接触器改为△接.原理为:当电机Y接时,每组线圈将承受输电电压的1/1.732倍电压(即3开方的倒数),当电机△时,每组线圈直接承受输电电压,这样就实现了软启动.
单片机C语言编程:用PWM控制直流电机转速


最低0.27元开通文库会员,查看完整内容>

原发布者:ljy199216

#include#defineucharunsignedchar#defineuintunsignedintsbitKEY1=P3^4;sbitKEY2=P3^5;sbitKEY3=P3^6;sbitIN1=P1^0;sbitIN2=P1^1;sbitENA=P1^2;sfrldata=0x80;sbitdula=P2^6;sbitwela=P2^7;//sbitlcden=P3^4;//uchartimer,ms,t_set=1;ucharT_N=100;ucharT_N1=100;ucharT_H_N=50;ucharT_H_N1=50;voidmsplay(uchar,uchar);ucharcodex1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//ucharcodex2[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};ucharcodex3[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//ucharcodex4[]={0x01,0x02,0x04,0x08,0x10,0x20};voiddelay(uintz)//延时函数{uintx;for(x=z;x>0;x--);}voidKey_Scan(){if(KEY1==0){delay(20);while(KEY1);T_H_N++;if(T_H_N>=99){T_H_N=99;}}if(KEY2==0){delay(20);while(!KEY2);T_H_N--;if(T_H_N<=1){T_H_N=1;}}if(KEY3==0){delay(15);while(!KEY3);IN1=~IN1;IN2=~IN2;}}voidMotor_Init(){#include

#define uchar unsigned char
/*****************************************************************************
* TH0和TL0是计0的高8位和低8位计数器,计算办法:TL0=(65536-C)%256;*
* TH0=(65536-C)/256,其中C为所要计数的次数即多间产生一次中断;TMOD是计数器*
* 工作模式选择,0X01表示选用模式1,它有16位计数器,最大计数脉冲为65536,最长时 *
* 间为1ms*65536=65.536ms*
******************************************************************************/
#define V_TH00XFF
#define V_TL00XF6
#define V_TMOD 0X01

void init_sys(void);/*系统初始化函数*/
void Delay5Ms(void);

unsigned char ZKB1,ZKB2;

void main (void)
{
init_sys();
ZKB1=40;/*占空比初始值设定*/
ZKB2=70;/*占空比初始值设定*/
while(1)
{
if (!P1_1) //如果按了+键,增加占空比
{
Delay5Ms();
if (!P1_1)
{
ZKB1++;
ZKB2=100-ZKB1;
}
}

if (!P1_2) //如果按了-键,减少占空比
{
Delay5Ms();
if (!P1_2)
{
ZKB1--;
ZKB2=100-ZKB1;
}
}
/*对占空比值限定范围*/
if (ZKB1>99) ZKB1=1;
if (ZKB1<1) ZKB1=99;
}
}

/******************************************************
*函数功能:对系统进行初始化,包括定时器初始化和变量初始化*/
void init_sys(void)/*系统初始化函数*/
{
/*定时器初始化*/
TMOD=V_TMOD;
TH0=V_TH0;
TL0=V_TL0;
TR0=1;
ET0=1;
EA=1;
}

//延时
void Delay5Ms(void)
{
unsigned int TempCyc = 1000;
while(TempCyc--);
}

/*中断函数*/
void timer0(void) interrupt 1 using 2
{
static uchar click='0';/*中断次数计数器变量*/
TH0=V_TH0;/*恢复定时器初始值*/
TL0=V_TL0;
++click;
if (click>=100) click='0';

if (click<=ZKB1)/*当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/
P1_3=0;
else
P1_3=1;

if (click<=ZKB2)
P1_4=0;
else
P1_4=1;

}只是调占空比的,希望对你有帮助,调试好的本回答被提问者采纳void delayms(INT16U k)。。。。。可以设置一段延时程序大约是1ms
{ INT16U a,s;
for(a=k;a>0;a--)
for(s=110;s>0;s--);
}

void PWM()M1,M4为电机的使能端1时电机工作,为0时电机不工作,
电机导通和不导通的时间的控制就能产生PWM信号,在这
里只要调节speed的变化就可以调节PWM信号的占空比了。
{
M1=1;M4=1;
delayms(speed);
M1=0;M4=0;
delayms(30-speed);

}
//你可以在这里加一个键盘检测程序来控制电机的占空比来调节减速还是加速
这是加速程序
{
speed=speed+5;
if(speed>=30)
speed=30;

}
这是减速程序
{

if(speed!=5)
speed=speed-5;
else
speed=5;
}粉色#include
#define
uchar
unsigned
char
/*****************************************************************************
*
TH0和TL0是计数0的高8位和低8位计数器,计法:TL0=(65536-C)%256;
*
*
TH0=(65536-C)/256,其中C为所要计数的次数即多长时生一断;TMOD是计数器*
*
工作模式选择,0X01表示选用模式1,它有16位计数器,最大计数脉冲为65536,最长时
*
*
间为1ms*65536=65.536ms
*
******************************************************************************/
#define
V_TH0
0XFF
#define
V_TL0
0XF6
#define
V_TMOD
0X01
void
init_sys(void);
/*系统初始化函数*/
void
Delay5Ms(void);
unsigned
char
ZKB1,ZKB2;
void
main
(void)
{
init_sys();
ZKB1=40;
/*占空比初始值设定*/
ZKB2=70;
/*占空比初始值设定*/
while(1)
{
if
(!P1_1)
//如果按了+键,增加占空比
{
Delay5Ms();
if
(!P1_1)
{
ZKB1++;
ZKB2=100-ZKB1;
}
}
if
(!P1_2)
//如果按了-键,减少占空比
{
Delay5Ms();
if
(!P1_2)
{
ZKB1--;
ZKB2=100-ZKB1;
}
}
/*对占空比值限定范围*/
if
(ZKB1>99)
ZKB1=1;
if
(ZKB1<1)
ZKB1=99;
}
}
/******************************************************
*函数功能:对系统进行初始化,包括定时器初始化和变量初始化*/
void
init_sys(void)
/*系统初始化函数*/
{
/*定时器初始化*/
TMOD=V_TMOD;
TH0=V_TH0;
TL0=V_TL0;
TR0=1;
ET0=1;
EA=1;
}
//延时
void
Delay5Ms(void)
{
unsigned
int
TempCyc
=
1000;
while(TempCyc--);
}
/*中断函数*/
void
timer0(void)
interrupt
1
using
2
{
static
uchar
click='0';
/*中断次数计数器变量*/
TH0=V_TH0;
/*恢复定时器初始值*/
TL0=V_TL0;
++click;
if
(click>=100)
click='0';
if
(click<=ZKB1)
/*当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/
P1_3=0;
else
P1_3=1;
if
(click<=ZKB2)
P1_4=0;
else
P1_4=1;
}只是调占空比的,希望对你有帮助,调试好的
用l298n的模块去控制一个两线的直流电机,用单片机怎么用c语言编程才能控制电机的转速,谢谢各位!
转向要靠舵出pwm波形,最好是50hz
电机只是控制 控制占空比就可
void timer0() interrupt 1
{

d_count++;
if(d_count==d_num)
duoji=0;
if(d_count==480)
{
d_count=0;
duoji=1;
}

TH0=(65536-10)/256;
TL0=(65536-10)%256;

}pwm呗,周期性开通,调节开通时间就能调速追问

能帮忙写个程序参考下吗?谢谢!追答

什么单片机啊追问

stc89c52RD的追答

设个一百微秒的定时器,一个变量在里面加一。加到一百清零把一个io口置高,大于某个值置低。改变那个值的大小就能控速了追问

还是不懂,能帮忙写个程序参考下吗,谢谢!


上一篇: 下一篇: