单片机pwm控制电机转速

单片机pwm控制电机转速,第1张

单片机控制电机转速:

如果只有一个转向的话就比较容易了,如果要有正反两个转向,就需要一个H桥,并且两个I/O口输出高低电频控制。

比如用P1口的P10,P11,P12三个I/O口接按键,P34口接电频输出,编个定时程序及按键程序,如果是快(全速运行),那就P34口直接输出高电频“1”;中(50%),那就让P34口0—50ms输出高电频“1”,50ms—100ms输出低电频“0”,后面就一直以50ms进行一次取反;慢(就用10%吧),0—40ns输出高电频“1”,41ns—400ns输出低电频“0”,这样为一个周期,后面就一直循环吧。

如果按键P10按下,执行方式1,全速运行,否则以默认方式运行;按键P11按下,执行方式2,改变占空比,以50%的速度运行,否则,不作改变;按键P12按下,执行方式3,改变占空比,以10%的速度运行,否则,不作改变。

1、PWM波是控制直流电机的

通俗的说,5V直流电机在5V的情况下肯定速度最快,在0V的情况下肯定不转了

这样电源0~5V就对应了不同的速度

问题是怎么才能实现0~5V的变化呢?

于是就用PWM波控制mos管来给直流电机供电。PWM就是一个矩形波,通过控制高电平和低电平的时间来控制MOS管导通的时间。MOS管在高电平的时候导通,就相当于5V电源直接加到电机上;MOS管在低电平的时候截止,就相当于0V电源加到电机上。

PWM又叫脉宽调制,就是控制高电平占一个周期的比例。而这个PWM波就是控制5V电源加到电机上的时间,从而控制了电机。

2、例程:

#include <reg52h>

sbit KEY1 = P3^4;

sbit PWM = P1^5;

unsigned char CYCLE; //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 01ms

unsigned char PWM_ON ;//定义高电平时间

void delay(unsigned int cnt)

{

while(--cnt);

}

main()

{

unsigned char PWM_Num;//定义档位

TMOD |=0x01;//定时器设置 1ms in 12M crystal

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;//定时1mS

IE= 0x82; //打开中断

TR0=1;

CYCLE = 10;// 时间可以调整 这个是10步调整 周期10ms 8位PWM就是256步

while(1)

{

if(!KEY1)

{

delay(10000);

if(!KEY1)

{

PWM_Num++;

if(PWM_Num==4)PWM_Num=0;

switch(PWM_Num){

case 0:P0=0x06;PWM_ON=0;break;//高电平时长

case 1:P0=0x5B;PWM_ON=4;break;

case 2:P0=0x4F;PWM_ON=6;break;

case 3:P0=0x66;PWM_ON=8;break;

default:break;

}

}

}

}

}

//

/ 定时中断 /

//

void tim(void) interrupt 1 using 1

{

static unsigned char count; //

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;//定时1mS

if (count==PWM_ON)

{

PWM = 1; //灯灭

}

count++;

if(count == CYCLE)

{

count=0;

if(PWM_ON!=0) //如果左右时间是0 保持原来状态

PWM = 0;//灯亮

}

基于51单片机直流电机调速测速仿真原理是以STC90C52RC单片机为主控芯片,利用PWM的原理,通过按键对直流电机进行调速,实现正反转;采用霍尔传感器对直流电机的转动进行计数,并通过主控芯片将采集到的计数值转化为直流电机的当前速度值;利用LCD1602显示模块将计算得到的值进行实时显示。

51单片步进电机控制原理与控制设计程序

51单片步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。步进电机可分为反应式步进电机(简称vr)、永磁式步进电机(简称pm)和混合式步进电机(简称hb)。

51单片步进电机区别于其他控制电机的最大特点是,它是通过输入脉冲信号来进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。

51单片步进电机的驱动电路根据控制信号工作,控制信号由单片机产生。其基本原理作用如下:

(1)控制换相顺序

通电换相这一过程称为脉冲分配。例如:三相步进电机的三拍工作方式,其各相通电顺序为a-b-c-d,通电控制脉冲必须严格按照这一顺序分别控制a,b,c,d相的通断。

(2)控制步51单片进电机的转向

如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。

(3)控制51单片步进电机的速度

如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。两个脉冲的间隔越短,步进电机就转得越快。调整单片机发出的脉冲频率,就可以对步进电机进行调速。步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位移,通俗地说:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。通过控制脉冲个数即可以控制角位移量,从而达到准确定位的目的;同时通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

用PWM进行电机调速

#include<reg52h>

#include <intrinsh>

sbit ENA=P2^1;

sbit ENB=P2^2;

sbit OUTA1=P2^3;

sbit OUTA2=P2^4;

sbit OUTB1=P2^5;

sbit OUTB2=P2^6;

unsigned char PWM_ON1;

unsigned char PWM_ON2;

#define CYCLE 10

void Init_Timer0(void);

void qianjin()

{

PWM_ON1=1;

PWM_ON2=1;

OUTA1=0;

OUTA2=1;

OUTB1=0;

OUTB2=1;

}

void houtui()

{

PWM_ON1=6;

PWM_ON2=6;

OUTA1=1;

OUTA2=0;

OUTB1=1;

OUTB2=0;

}

void zuozhuan()

{

PWM_ON1=6;

PWM_ON2=0;

OUTA1=0;

OUTA2=1;

OUTB1=0;

OUTB2=1;

}

void youzhuan()

{

PWM_ON1=0;

PWM_ON2=6;

OUTA1=0;

OUTA2=1;

OUTB1=0;

OUTB2=1;

}

void DelayMs_12M(unsigned int n)

{

unsigned int i=0,j=0;

for(i=0;i<n;i++)

for(j=0;j<123;j++);

}

void tingzhi()

{

PWM_ON1=0;

PWM_ON2=0;

}

void main(void)

{

Init_Timer0();

while(1)

{

qianjin();

} }

void Init_Timer0(void)

{

TMOD|= 0x01;

EA=1;

ET0=1;

TR0=1;

}

void Timer0_isr(void) interrupt 1

{

unsigned char count1,count2;

TH0=(65536-2000)/256;

TL0=(65536-2000)%256;

if (count1==PWM_ON1)

{

ENA=0;

}

count1++;

if(count1==CYCLE)

{

count1=0;

if(PWM_ON1!=0)

ENA=1;

}

if(count2==PWM_ON2)

{

ENB=0;

}

count2++;

if(count2==CYCLE)

{

count2=0;

if(PWM_ON2!=0)

ENB=1;

}

}

这是我以前控制小车速度的一个程序,参考一下

以上就是关于单片机pwm控制电机转速全部的内容,包括:单片机pwm控制电机转速、求52单片机pwm控制电机转速程序C语言、基于51单片机直流电机调速测速仿真原理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9501659.html

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

发表评论

登录后才能评论

评论列表(0条)

保存