技术文档

单片机的直流电机的pwm控制 看单片机如何控制PWM信号实现直流电机转速控制

小编 2024-10-06 技术文档 23 0

看单片机如何控制PWM信号实现直流电机转速控制

设计中采用了专门的芯片组成了PWM信号的发生系统并且对PWM信号的原理、产生方法以及如何通过软件编程对PWM信号占空比进行调节从而控制其输入信号波形等均作了详细的阐述。另外本系统中使用了红外对管对直流电机的转速进行测量,经过整形电路后将测量值送到单片机,并且最终作为反馈值输入到单片机进行PID运算从而实现了对直流电机速度的控制。在软件方面,文章中详细介绍了PID运算程序初始化程序等的编写思路和具体的程序实现。

1 单片机最小系统:单片机最小系统由51单片机,晶振电路,复位电路,电源组成。大家都比较熟悉,这里不再赘述。

2 四位数码管显示:在应用系统中,设计要求不同,使用的LED显示器的位数也不同,因此就生产了位数,尺寸,型号不同的LED显示器供选择,在本设计中,选择4位一体的数码型LED显示器,简称“4-LED”。本系统中前三位显示电压的整数位,最后一位显示转速的小数位。4-LED显示器引脚如图2所示,是一个共阴极接法的4位LED数码显示管,其中a,b,c,e,f,g为4位LED各段的公共输出端,1、2、3、4分别是每一位的位数选端,dp是小数点引出端,4位一体LED数码显示管的内部结构是由4个单独的LED组成,每个LED的段输出引脚在内部都并联后,引出到器件的外部。

3 电机驱动电路:电机驱动电中是采用ULN2003来驱动。ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。该电路的特点:ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据,输入5VTTL电平,输出可达500mA/50V。ULN2003的引脚图,其中IN1~IN7为输入控制端;OUT1~OUT7为输出端;8脚为芯片的接地端;9脚为公共端,该脚是内部7个续流二极管负极的公共端,各二极管的正极分别接各达林顿管的集电极。用于感性负载时,该脚接负载电源正极,实现续流作用。如果该脚接地,实际上就是达林顿管的集电极对地接通。

当P1.0中为高电平时,其内部三极管导通,使电机转动。当P1.0为低电平时,内部三极管截止,电路断开,电机停止转动。所以在程序中可以利用P1.0口输出PWM波来控制电机的转速。

4 红外测速电路:发射管工作时发出红外线,当接收管收到红外信号时,其电阻变小(本设计相当于从无穷大变到1k左右)。利用其电阻变化,改变接收管分压情况。挡片是利用圆盘上剪四个孔,当挡片随电机转动时,接收管两端电平发生变化,产生脉冲。

5 整形电路:本设计的整形电路是用555定时器接成的施密特触发器。

6 源程序:

#include reg52.h

#define uchar unsigned char

#define uint unsigned int

uchar code table[10]={0x3f,0x06,0x5b,

0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管显示码(0-9)

sbit xiaoshudian=P0^7;

sbit wei1=P2^4; //数码管位选定义

sbit wei2=P2^5;

sbit wei3=P2^6;

sbit wei4=P2^7;

sbit beep=P2^3; //蜂鸣器控制端

sbit motor = P1^0; //电机控制

sbit s1_jiasu = P1^4; //加速按键

sbit s2_jiansu= P1^5; //减速按键

sbit s3_jiting=P1^6; //停止/开始按键

uint pulse_count; //INT0接收到的脉冲数

uint num=0; //num相当于占空比调节的精度

uchar speed[3]; //四位速度值存储

float bianhuasudu; //当前速度(理论计算值)

float reallyspeed; //实际测得的速度

float vv_min=0.0;vv_max=250.0;

float vi_Ref=60.0; //给定值

float vi_PreError,vi_PreDerror;

uint pwm=100; //相当于占空比标志变量

int sample_time=0; //采样标志

float v_kp=1.2,v_ki=0.6,v_kd=0.2; //比例,积分,微分常数

void delay (uint z)

{

uint x,y;

for(x=z;x0;x--)

for (y=20;y0;y--);

}

void time_init()

{

ET1=1; //允许定时器T1中断

ET0=1; //允许定时器T0中断

TMOD = 0x15; //定时器0计数,模式1;定时器1定时,模式1

TH1 = (65536-100)/256; //定时器1值,负责PID中断 ,0.1ms定时

TL1 = (65536-100)%6;

TR0 = 1; //开定时器

TR1 = 1;

IP=0X08; //定时器1为高优级

EA=1; //开总中断

}

void keyscan()

{

float j;

if(s1_jiasu==0) //加速

{

delay(20);

if(s1_jiasu==0)

vi_Ref+=10;

j=vi_Ref;

}

while(s1_jiasu==0);

if(s2_jiansu==0) //减速

{

delay(20);

if(s2_jiansu==0)

vi_Ref-=10;

j=vi_Ref;

}

while(s2_jiansu==0);

if(s3_jiting==0)

{

delay(20);

motor=0;

P1=0X00;

P3=0X00;

P0=0x00;

}

while(s3_jiting==0);

}

float v_PIDCalc(float vi_Ref,float vi_SpeedBack)

{

register float error1,d_error,dd_error;

error1=vi_Ref-vi_SpeedBack; //偏差的计算

d_error=error1-vi_PreError; //误差的偏差

dd_error=d_error-vi_PreDerror; //误差变化率

vi_PreError=error1; //存储当前偏差

vi_PreDerror=d_error;

bianhuasudu=(v_kp*d_error+v_ki*vi_PreError+v_kd*dd_error);

return (bianhuasudu);

}

void v_Display()

{

uint sudu;

sudu=(int)(reallyspeed*10); //乘以10之后强制转化成整型

speed[3]=sudu/1000; //百位

speed[2]=(sudu00)/100; //十位

speed[1]=(sudu0)/10; //个位

speed[0]=sudu; //小数点后一位

wei1=0; //第一位打开

P0=table[speed[3]];

delay(5);

wei1=1; //第一位关闭

wei2=0;

P0=table[speed[2]];

delay(5);

wei2=1;

wei3=0;

P0=table[speed[1]];

xiaoshudian=1;

delay(5);

wei3=1;

wei4=0;

P0=table[speed[0]];

delay(5);

wei4=1;

}

void BEEP()

{

if((reallyspeed)=vi_Ref+5||(reallyspeed

{

beep=~beep;

delay(4);

}

}

void main()

{

time_init();

motor=0;

while(1)

{

v_Display();

BEEP();

}

if(s3_jiting==0) //对按键3进行扫描,增强急停效果

{

delay(20);

motor=0;

P1=0X00;

P3=0X00;

P0=0x00;

}

while(s3_jiting==0);

}

void timer0() interrupt 1

{

}

void timer1() interrupt 3

{

TH1 = (65536-100)/256; //1ms定时

TL1 = (65536-100)%6;

sample_time++;

if(sample_time==5000) //采样时间0.1ms*5000=0.5s

{

TR0=0; //关闭定时器0

sample_time=0;

pulse_count=TH0*255+TL0; //保存当前脉冲数

keyscan(); //扫描按键

reallyspeed=pulse_count/(4*0.6); //计算速度

pwm=pwm+v_PIDCalc(vi_Ref,reallyspeed);

if(pwm

if(pwm100)pwm=100;

TH0=TL0=0;

TR0=1; //开启定时器0

}

num++;

if(num==pwm) //此处的num值,就是占空比

{

motor=0;

}

if(num==100) //100相当于占空比调节的精度

{

num=0;

motor=1;

}

}

直流电机驱动方案,除了正反转控制,还可以PWM调速【原创首发】

直流电机(马达)在电子产品中的应用是非常广泛的,特别打印机、电器、遥控玩具上。前进、后退、加速、减速都是常见的应用。

下面给大家分享几个直流电机驱动方案,请大家点赞、关注支持一下。

方案一:TI的DRV8871直流电机驱动方案

此方案特点有:

6.5V~45V宽工作电压内置H桥电机驱动器PWM控制按口集成过流、过热、欠压等保护

DRV8871的内部功能框图如下:

DRV8871的内部功能框图

DRV8871的简化电路原理图如下:

DRV8871简化电路原理图

设计要求:

ILIM接一个电阻做限流,阻值的大小可以按规格书的要求进行计算设计。如果接的电阻为32k,限流为2A。停转控制:IN1和IN2设为低电平。正转控制:IN1为高电平,IN2为低电平,要进行调速时,IN1就要输入PWM信号了,占空比越大,转速越高。反转控制:IN1为低电平,IN2为高电平,IN2就要输入PWM信号了,占空比越大,转速越高。刹车控制:IN1和IN2设为高电平。

PWM调速注意事项:

逻辑输入也可以使用PWM 控制来达到调速功能。当用PWM 波控制一个桥臂时,并且在驱动电流为关断时,由于电机的电感特性要求电流连续流通。这个电流叫做续流。为了操作这种电流,H 桥可以操作在两种不同的状态,快衰减或者慢衰减。在快衰减模式,H 桥是被禁止的,续流电流流经体二极管;在慢衰减模式,电机的下臂是短路的。PWM 控制用于快衰模式,PWM 信号控制一个xIN 管脚,而另一个管脚维持低电平;当运用于慢衰减,另一管脚维持高电平。

此方案是不是很简单呢?此方案适合比较高端的应用,如打印机,工业控制等

方案二: 台湾IC HT7K1201 驱动方案,成本更低

此方案特点如下:

内置1通道H桥驱动电路1.8V~6V驱动电压高达200kHz PWM 输入控制操过流保护,关机保护,输出短路保护6-pin SOT23-6小封装

典型应用电路如下:

典型应用电路

电机控制方法如下表:

电机控制方法

此方案成本更低,适合比较低端的应用,如遥控玩具。

方案三:分立元件搭建H桥驱动电路

下面是H桥驱动电路原理图

元件搭建H桥驱动电路原理图

正转控制:

PWM2设为低电平,H2设为高电平,H1设为低电平PWM1为控制转速控制信号,占空比越大,转速越高。

反转控制:

PWM1设为低电平,H1设为高电平,H2设为低电平PWM2为控制转速控制信号,占空比越大,转速越高。

停转:

PWM1,PWM2设为低电平,H1,H2设为高电平。

过流保护:

AN1接单片机的ADC输入,用于过流检测。

此方案比较灵活,可以根据应用的需求选用合适规格的三级管或者MOS管。

大家可以关注我的头条号@电子产品设计方案 ,我会定时分享经验和方案哦,谢谢大家的点赞和关注。

相关问答

直流电机的 电流大小如何 控制 ?我用 单片机 输出 PWM 给功率器件,...

[最佳回答]1.你做的直流电机控制系统,肯定要有反馈控制环节,即采样电机电流的反馈控制环节,故反馈环节的硬件参数肯定得变化.2.单片机仅能输出PWM信号,不能改...

单片机控制 步进电机和 直流电机 不同之处-盖德问答-化工人互助...

单片机控制步进电机和直流电机不同之处对于直流电机,能否直接通过PWM口,再加功率放大,来驱动直流电机,并调速呢?当然可以!现在常见的电动自行车使用“串激电...

低压 直流电机 怎么自动调电流?

调节电流时,输出端子必须设置成短路。为避免电源故障,请首先将电压降低至大约2V(但是不应将其降低为0,否则将不输出电流),然后将电源的输出端子短路。此时,...

单片机控制pwm 原理详解?

PWM(脉冲宽度调制)是一种通过改变脉冲信号的占空比来实现对电压或电流的控制的技术。在单片机控制中,使用定时器/计数器产生固定频率的脉冲信号,根据所需的占...

麻烦同志们帮个忙呗!如何 控制 无刷电机?,无刷 电机控制 使用周...

不加接口肯定的无法直接驱动的,用驱动的话,需要自己编无刷电机的整个驱动程序,工程量比较大,如果你是需要学习这方面内容的,那么可以考虑,否则建议...

单片机 有多少 PWM 输出的引脚 - 懂得

不是哪,PWM简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。能够有PWM输出只是单片机的个别引脚,这些引脚能够配...

直流电机的控制板 设计怎么样可以提高电机的转速?设计控制板...

[回答]直流电机是最容易控制的。可以通过控制电压、电流等参数进行控制。同时控制几台直流电机不一定要加什么控制板,可是一定要分开设计各控制电路。如需...

pwm 信号发生器使用方法?

PWM信号产生方法脉冲宽度调制(PWM)信号广泛使用在电力变流技术中,以其作为控制信号可完成DC-DC变换(开关电源)、DC-AC变换(逆变电源)、AC-AC变换(斩...基本...

如何用STM32 单片机控制 LED灯带的颜色改变?

RGB三原色LED彩灯,由红色、绿色和蓝色三个独立的灯珠构成,常见的有四个引脚,一个公共端和三个颜色控制端。三个颜色任意组合可以产生其他颜色,如红色和绿色同...

单片机pwm 是什么原理 - 149****8991 的回答 - 懂得

原发布者:大鹏799PWM的工作原理脉宽调制PWM是开关型稳压电源中的术语。这是按稳压的控制方式分类的,除了PWM型,还有PFM型和PWM、PFM混合型。脉宽宽...

猜你喜欢