单片机对电机的调速控制电路

合集下载

基于stm32单片机的直流电机调速系统设计

基于stm32单片机的直流电机调速系统设计

基于stm32单片机的直流电机调速系统设计
本文介绍一种基于STM32单片机的直流电机调速系统设计,主要包括硬件电路设计和软件程序设计两部分。

硬件电路设计:
该电机调速系统的主要硬件电路包括电源模块、STM32单片机控制电路、直流电机驱动电路和反馈电路。

1. 电源模块
电源模块包括AC/DC变换模块和稳压模块,用于将输入的AC电压转换为适宜单片机和电机工作的DC电压。

2. STM32单片机控制电路
STM32单片机控制电路包括主控芯片STM32单片机、晶振、复位电路和下载程序电路等。

3. 直流电机驱动电路
直流电机驱动电路包括电机驱动芯片(如L298N)和电机,用于控制电机的转
速和方向。

4. 反馈电路
反馈电路包括编码器和光电传感器等,用于实现电机转速的反馈和闭环控制。

软件程序设计:
该电机调速系统的软件程序采用C语言编写,主要包括定时器计数、PWM输出控制、编码器读取、PID算法控制等模块。

1. 定时器计数
通过STM32单片机内部定时器计数来实现电机转速的测量和控制。

2. PWM输出控制
采用STM32单片机内部PWM输出控制模块控制电机的转速,并实现电机方向的控制。

3. 编码器读取
通过编码器读取电机的转速信息,并反馈到单片机进行控制和显示。

4. PID算法控制
采用PID(比例、积分、微分)算法控制电机的转速,实现闭环控制,提高控制精度。

总之,基于STM32单片机的直流电机调速系统设计,既可以提高电机运行的效率和精度,又可以简化电路结构和减小系统成本,具有较好的应用前景。

单片机控制直流电机调速课件

单片机控制直流电机调速课件

电机调速应用实例
机器人控制
电机调速应用于机器人的运动控制,提高机 器人的精度和速度。
工业设备
电机调速应用于各种工业设备,提高生产效 率和质量。
电动车驱动
电机调速应用于电动车的驱动控制,实现高 效能耗和长续航里程。
风力发电
电机调速应用于风力发电装置,优化风能的 利用效率。
总结
1 单片机控制直流电
机调速是一种常见 的应用
单片机控制直流电机调速 课件
本课件将介绍单片机控制直流电机调速的原理和应用。通过详细讲解控制系 统搭建和调速实现方法,以及PID调节算法的应用,帮助您深入理解电机调速。
直流电机调速原理
1 电压控制
改变电机供电电压以控制转速。
2 电流控制
调整电机驱动电流以改变负载对转速的影 响。
3 脉宽调制
4 反馈调节
2
脉宽调制方法
通过改变脉冲宽度来调节电机的平均电压。
3
PID调节方法
结合比例、积分和微分控制来实现精确的电机调速。
PID调节算法在电机控制中的应用
PID调节算法是一种常用的闭环控制方法,可以根据实际转速和目标转速进行调节,实现精确的电机调 速。 该算法通过比例控制、积分控制和微分控制来实现稳定的调速效果。 PID调节算法在电机控制中得到广泛应用,为工业自动化和机电一体化技术的发展提供了重要支持。
通过改变脉冲宽度来控制驱动电机的平均 电压。
使用转速传感器等反馈信号进行闭环控制。
电机调速系统搭建
硬件搭建
使用单片机和面包板搭建电机 调速系统。
电路连接
将电机与单片机连接,建立电 机调速的电路。
传感器连接
将转速传感器连接至电路,用 于反馈调节。

51单片机控制直流电机PWM调速

51单片机控制直流电机PWM调速

51单片机控制直流电机PWM调速
实验目的
1.掌握脉宽调制(PWM) 的方法。

2.用程序实现脉宽调制,并对直流电机进行调速控制。

实验设备
PC 机一台,单片机最小系统,驱动板、直流电机,连接导线等
实验原理
1.PWM (Pulse Width Modulation) 简称脉宽调制。

即,通过改变输出脉冲
的占空比,实现对直流电机进行调压调速控制。

2.实验线路图:
实验内容:
1. 利用实验室提供的单片机应用系统及直流电机驱动电路板,编制控制程序,实现直流电机PWM调速控制。

实验思考题
本实验中是通过改变脉冲的占空比,周期T 不变的方法来改变电机转速的,还有什么办法能改变电机的转速,应该怎么实现?
附件:
L298简介:
L298N 为SGS-THOMSON Microelectronics 所出产的双全桥步进电机专用驱动芯片( Dual Full-Bridge Driver ) ,内部包含4信道逻辑驱动电路,是一种二相和四相步进电机的专用驱动器,可同时驱动2个二相或1个四相步进电机,内含二个H-Bridge 的高电压、大电流双全桥式驱动器,接收标准TTL逻辑准位信号,可驱动46V、2A以下的步进电机,且可以直接透过电源来调节输出电压;此芯片可直接由单片机的IO端口来提供模拟时序信号。

PWM电机调速原理及51单片机PWM程序经典

PWM电机调速原理及51单片机PWM程序经典

PWM电机调速原理及51单片机PWM程序经典pwm电机调速原理对于电机的转速调整,我们是采用脉宽调制(pwm)办法,控制电机的时候,电源并非连续地向电机供电,而是在一个特定的频率下以方波脉冲的形式提供电能。

不同占空比的方波信号能对电机起到调速作用,这是因为电机实际上是一个大电感,它有阻碍输入电流和电压突变的能力,因此脉冲输入信号被平均分配到作用时间上,这样,改变在始能端pe2和pd5上输入方波的占空比就能改变加在电机两端的电压大小,从而改变了转速。

此电路中用微处理机去同时实现脉宽调制,通常的方法存有两种:(1)用软件方式来实现,即通过执行软件延时循环程序交替改变端口某个二进制位输出逻辑状态去产生脉宽调制信号,设置相同的延时时间获得相同的充电电流。

(2)硬件实验自动产生pwm信号,不挤占cpu处置的时间。

这就要用到atmega8515l的在pwm模式下的计数器1,具体内容可参考相关书籍。

51单片机pwm程序产生两个pwm,要求两个pwm波形占空都为80/256,两个波形之间要错开,不能同时为高电平!高电平之间相差48/256,pwm这个功能在pic单片机上就存有,但是如果你就要用51单片机的话,也就是可以的,但是比较的麻烦.可以用定时器t0去掌控频率,定时器t1去掌控充电电流:大致的的编程思路就是这样的:t0定时器中断就是使一个i0口输入高电平,在这个定时器t0的中断当中再生制动定时器t1,而这个t1就是使io口输入低电平,这样发生改变定时器t0的初值就可以发生改变频率,发生改变定时器t1的初值就可以发生改变充电电流。

*程序思路说明:****关于频率和占空比的确定,对于12m晶振,假定pwm输出频率为1khz,这样定时中断次数**预设为c=10,即0.01ms中断一次,则th0=ff,tl0=f6;由于预设中断时间为0.01ms,这样**可以设定占空比可从1-100变化。

即0.01ms*100=1ms******************************************************************************* /#include#defineucharunsignedchar/******************************************************************************th0和tl0是计数器0的高8位和低8位计数器,计算办法:tl0=(65536-c)%6;**th0=(65536-c)/256,其中c为所要计数的次数即为多长时间产生一次中断;tmod就是计数器**工作模式挑选,0x01则表示采用模式1,它存有16十一位计数器,最小计数脉冲为65536,最久时**间为1ms*65536=65.536ms******************************************************************************* /#definev_th00xff#definev_tl00xf6#definev_tmod0x01voidinit_sys(void);/*系统初始化函数*/voiddelay5ms(void);unsignedcharzkb1,zkb2;voidmain(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;}}/*******************************************************函数功能:对系统进行初始化,包括定时器初始化和变量初始化*/voidinit_sys(void)/*系统初始化函数*/{/*定时器初始化*/tmod=\th0=v_th0;tl0=v_tl0;tr0=1;et0=1;ea=\}//延时voiddelay5ms(void){unsignedinttempcyc=1000;while(tempcyc--);}/*中断函数*/voidtimer0(void)interrupt1using2{staticucharclick=\/*中断次数计数器变量*/th0=v_th0;/*恢复定时器初始值*/tl0=v_tl0;++click;if(click>=100)click=\if(click<=zkb1)/*当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/p1_3=0;elsep1_3=1;if(click<=zkb2)p1_4=0;elsep1_4=1;}<1.下面就是avr的程序,51产生pwm波麻烦,可以用avr。

毕业设计(论文)-单片机控制的电机交流调速系统设计

毕业设计(论文)-单片机控制的电机交流调速系统设计

毕业设计毕业设计任务书摘要............................................................................................. 错误!未定义书签。

第1章引言................................................................................. 错误!未定义书签。

1.1单片机的产生和发展.......................................................... 错误!未定义书签。

1.2交流调速系统的现状.......................................................... 错误!未定义书签。

第2章硬件设计....................................................................... 错误!未定义书签。

2.1系统总体方案设计.............................................................. 错误!未定义书签。

2.2主回路设计.......................................................................... 错误!未定义书签。

2.2.1整流滤波电路的设计................................................ 错误!未定义书签。

2.2.2整流电路意义总结.................................................... 错误!未定义书签。

2.3整流电路分类...................................................................... 错误!未定义书签。

单片机控制电动机调速测速器(修改) (2)

单片机控制电动机调速测速器(修改) (2)

红外对管器件测转速
• 在本项目中,我们对转速的采集所采用的传感器 是红外对管。我们所采用红外对管的原因有如下 几点: • 1、红外对管的价格便宜。 • 2、红外对管的灵敏度虽然不是很高但完全能 够满足低压直流电机的速度采集。 • 3、红外对管的驱动和信号转换电路比较简单。
红外对管
• • 红外对管是红外线发射管与光敏接收管,或者红外线接收管,或者红外线接收头配合在一起使用时 候的总称。红外线 在光谱中波长自0.76至400微米的一段称为红外线,红外线是不可见光线。 所有高于绝对零度(-273.15℃)的物质都可以产生红外线。现代物理学称之为热射线。医用红外 线可分为两类:近红外线与远红外线。 红外线发射管红外线发射管在LED封装行业中主要有三个常用的波段,如下850NM、875NM、 940NM。根据波长的特性运用的产品也有很大的差异,850NM波长的主要用于红外线监控设备, 875NM主要用于医疗设备,940NM波段的主要用于红外线控制设备。EG:红外线遥控器、光电开 关、光电计数设备等。 光敏接收管它是一个具有光敏特征的PN结,属于光敏二极管,具有单向导电性,因此工作时需加 上反向电压。无光照时,有很小的饱和反向漏电流(暗电流)。此时光敏管不导通。当光照时,饱和 反向漏电流马上增加,形成光电流,在一定的范围内它随入射光强度的变化而增大。红外线接收管 红外线接收管功能与光敏接收管相似只是不受可见光的干扰,感光面积大,灵敏度高,属于光敏二 极管,一般只对红外线有反应。 红外线接收头就是在红外线接收管的基础上增加了 对微弱信号进行放大的处理的电路,类似与三极 管的放大效果。
目录 目录
第一章 任务与要求 第二章 硬件电路设计 第三章 软件设计
第一章 项目描述
单片机控制直流电动机调速,单片机属于前端的控 制级,只需要能够产生可调的PWM波形就可以,PWM 脉宽调制,调节电机的输入占空比就可以控制电机的平 均电压,控制转速。驱动级,在控制级后。因为单片机 弱电不能直接驱动电机这样的强电,所以需要用功率开 关器件(如MOSFET等)来驱动电机。基本思路就是通 过弱电控制强电(本任务控制的为小型直流电动机)。 通过测速元件及LCD显示,在屏幕上能看到电机的转 速 ,这就是最简单的单片机调速测速器。 本设计以单片机为核心,应用红外传感器,电机驱 动电路和LCD显示来实现的。

单片机产生PWM信号控制直流电机调速的源代码

单片机产生PWM信号控制直流电机调速的源代码

单片机产生PWM信号控制直流电机调速的源代码本例程利用2051的T0产生双路PWM信号,推动L293D或L298N为直流电机调速,程序已通过调试。

接L298N时相应的管脚上最好接上10K的上拉电阻。

有什么不对的地方欢迎大家批评指正!/* =======直流电机的PWM速度控制程序======== *//* 晶振采用11.0592M,产生的PWM的频率约为91Hz */#include<reg51.h>#include<math.h>#define uchar unsigned char#define uint unsigned intsbit en1=P1^0; /* L298的Enable A */sbit en2=P1^1; /* L298的Enable B */sbit s1=P1^2; /* L298的Input 1 */sbit s2=P1^3; /* L298的Input 2 */sbit s3=P1^4; /* L298的Input 3 */sbit s4=P1^5; /* L298的Input 4 */uchar t=0; /* 中断计数器*/uchar m1=0; /* 电机1速度值*/uchar m2=0; /* 电机2速度值*/uchar tmp1,tmp2; /* 电机当前速度值*//* 电机控制函数index-电机号(1,2); speed-电机速度(-100—100) */void motor(uchar index, char speed){if(speed>=-100 && speed<=100){if(index==1) /* 电机1的处理*/{m1=abs(speed); /* 取速度的绝对值*/if(speed<0) /* 速度值为负则反转*/{s1=0;s2=1;}else /* 不为负数则正转*/{s1=1;s2=0;}}if(index==2) /* 电机2的处理*/{m2=abs(speed); /* 电机2的速度控制*/if(speed<0) /* 电机2的方向控制*/{s3=0;s4=1;}else{s3=1;s4=0;}}}}void delay(uint j) /* 简易延时函数*/{for(j;j>0;j--);}void main(){uchar i;TMOD=0x02; /* 设定T0的工作模式为2 */ TH0=0x9B; /* 装入定时器的初值*/TL0=0x9B;EA=1; /* 开中断*/ET0=1; /* 定时器0允许中断*/TR0=1; /* 启动定时器0 */while(1) /* 电机实际控制演示*/{for(i=0;i<=100;i++) /* 正转加速*/{motor(1,i);motor(2,i);delay(5000);}for(i=100;i>0;i--) /* 正转减速*/{motor(1,i);motor(2,i);delay(5000);}for(i=0;i<=100;i++) /* 反转加速*/{motor(1,-i);motor(2,-i);delay(5000);}for(i=100;i>0;i--) /* 反转减速*/{motor(1,-i);motor(2,-i);delay(5000);}}}void timer0() interrupt 1 /* T0中断服务程序*/{if(t==0) /* 1个PWM周期完成后才会接受新数值*/{tmp1=m1;tmp2=m2;}if(t<tmp1) en1=1; else en1=0; /* 产生电机1的PWM信号*/ if(t<tmp2) en2=1; else en2=0; /* 产生电机2的PWM信号*/ t++;if(t>=100) t=0; /* 1个PWM信号由100次中断产生*///4级速度可调:0、1、2、3;对应占空比:0、1/4、2/4、3/4#include<reg52.h>sbit key=P3^6;sbit motor=P2^4;unsigned char key_scan(void);void motor_set(unsigned char v) ;void motor_init(void);unsigned char PWM_H=0,n=0,i=0;void main(){motor_init();while(1){if (key_scan() == 1){motor_set(i%4);}}}//电机转动void motor_run() interrupt 3{if(n<PWM_H) motor=1;else motor=0;n++;if(n>=4) n=0;}//速度控制,4级速度可调:0、1、2、3;对应占空比:0、1/4、2/4、3/4 void motor_set(unsigned char v){if (v>3) v=3;if (v == 0) TR1 = 0;else{TR1 = 1;PWM_H = v;}}//电机初始化void motor_init(void){EA=1;ET1=1;TMOD=TMOD & 0X0F | 0x20;}//扫描按键unsigned char key_scan(void){unsigned char on = 0,i;while(1){if(key==0) //判断是否按下{for(i=0;i<100;i++); //软件延时if(key==0) //再次判断是否按下{on = 1;break; //跳出循环}}}while(key==0);return 1;}}。

基于单片机的pid电机调速控制系统的硬件电路设计

基于单片机的pid电机调速控制系统的硬件电路设计

下面是一个基于单片机的PID电机调速控制系统的硬件电路设计示例:
电路中使用了一个STM32F103C8T6微控制器,该MCU内置了PWM输出、ADC输入、定时器计数等功能,非常适合用于电机调速控制。

电机驱动采用了L298N模块,可以
控制两个直流电机的转速和方向。

另外,根据需要,可以加入光电编码器或霍尔传感
器等来获取电机的转速反馈信号。

电路中还使用了一个LCD1602液晶屏来显示电机转速、目标速度、PWM输出等信息,方便用户进行调试和监控。

此外,还可以使用按键开关来控制电机的启停和目标速度
的调节。

在硬件电路设计完成后,需要编写单片机程序来实现PID控制算法、PWM输出、
ADC采样等功能。

通常可以使用Keil、IAR等集成开发环境来编写和调试程序,也可
以使用Arduino IDE等编程环境进行开发。

这只是一个简单的PID电机调速控制系统的硬件电路设计示例,具体的实现方式和细
节可能会因应用场景和需求的不同而有所不同。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机对直流电机的调速控制电路
刘新阳李静晶摘要:
脉宽调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

在所设计的这个电路中,用PWM对直流电机转速做精确控制。

电路中用到的电机驱动芯片L298N是SGS公司的产品,内部包含4通道逻辑驱动电路,是一种二相和四相电机的专用驱动器,即内含二个H桥的高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V、2A以下的电机。

关键字:
PWM 单片机L298 直流电机
一、引言
提到电机转速控制一般大家都会想到调节电机的供电电压,但调节电压会使电机的转矩发生很大的变化。

在实际生活中,很多时候我们希望能在电机转速得到控制的前提下保持电机的转矩,怎样克服这个问题呢,在查询了很多资料和进行了大量实验后我认为使用电机的PWM控制可以很好的解决这一问题。

二、设计原理
在电机控制中我采用了脉宽调制PWM,脉宽宽度调制式(PWM)开关型稳压电路是在控制电路输出频率不变的情况下,通过电压反馈调整其占空比,从而达到稳定输出电压的目的。

模拟信号的值可以连续变化,其时间和幅度的分辨率都没有限制。

9V电池本身就是一种模拟器件,因为它的输出电压并不精确地等于9V,而是随时间发生变化,并可取任何实数值。

与此类似,从电池吸收的电流也不限定在一组
可能的取值范围之内。

而模拟信号与数字信号的区别在于后者的取值通常只能属于预先确定的可能取值集合之内,例如在{0V, 5V}这一集合中取值。

尽管模拟控制看起来可能直观而简单,但它并不总是非常经济或可行的。

其中一点就是,模拟电路容易随时间漂移,因而难以调节。

能够解决这个问题的精密模拟电路可能非常庞大、笨重(如老式的家庭立体声设备)和昂贵。

模拟电路还有可能严重发热,其功耗相对于工作元件两端电压与电流的乘积成正比。

模拟电路还可能对噪声很敏感,任何扰动或噪声都肯定会改变电流值的大小。

通过以数字方式控制模拟电路,可以大幅度降低系统的成本和功耗。

简而言之,PWM是一种对模拟信号电平进行数字编码的方法。

通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。

PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。

电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。

通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。

只要带宽足够,任何模拟值都可以使用PWM进行编码。

例如使用9V电池来给一个白炽灯泡供电。

如果将连接电池和灯泡的开关闭合50ms,灯泡在这段时间中将得到9V供电。

如果在下一个50ms中将开关断开,灯泡得到的供电将为0V。

如果在1秒钟内将此过程重复10次,灯泡将会点亮并像连接到了一个4.5V电池(9V的50%)上一样。

这种情况下,占空比为50%。

这样利用PWM对电机的控制,就可以在不改变电机转矩前提下对电机进行调速控制了。

三、电路
电路中用到的单片机和电机驱动芯片L298N都用到5V电源,而电机使用的是12V电压,所以我用7805做稳压芯片,如图1。

输入端和输出端的电容起到去耦作用。

图1
直流电机控制采用高性能单片机AT89S52输出可调占空比的PWM方波。

电机驱动芯片为L298N。

直流电机驱动就是利用PWM脉宽控制L298N电流输出大小。

其电路图如图2所示。

图2
图中单片机使用12MHZ晶振,P1.1产生PWM信号,P1.0和P1.2分别产生高低电位控制电机旋转方向。

电机驱动芯片L298N其实就是一个全桥驱动电路。

如图3所示。

它接收的是PWM方波,输出为跟PWM方波占空比相同的外接电压方波。

图3
接线中容易出错的事是L298的15脚和1脚没有接地,这样导致电流不能流向地,电机不转。

芯片的第1、5、6、7引脚控制一个桥,5、7接入高低电平控制电机旋转方向,6号引脚为使能端它接收单片机传来的PWM信号,它们控制的电机由2、3号引脚输出。

10、11、12、15和13、14引脚控制另外的一个桥。

图4为L298N的内部电路。

图4
四、程序
#include <reg51.h>
#include <stdio.h> //PWM调制
#include <math.h>
sbit P10=P1^0; //端口设置
sbit P11=P1^1;
sbit P12=P1^2;
unsigned int j;
void delay (unsigned int m) //延时m*1/31ms子程序{ unsigned int r;
for (;m>0;m--)
{ for (r=0;r<4;r++)
{ ; }
}
}
//主程序
void main (void)
{ void OutputPWM( );
P10=1;
P12=0;
//电机正转
for(j=0;j<32;j++)//输出连续变化的PWM信号,占空比从0开始每秒增加1/31 { OutputPWM ( ); //输出PWM
delay (31000); //延时1S
};
P10=1;
P12=1; //快速停止
delay (3100); //延时0.1S
P10=0;
P12=1;
//电机反转
for (j=10;j<32;j++)//输出连续变化的PWM信号,占空比从0开始每秒增加1/31 { OutputPWM ( ); //输出PWM
delay (31000); //延时1S
};
P10=1;
P12=1; //快速停止
delay (3100); //延时0.1S
}
void OutputPWM (void)
{ P11=0;
delay (31-j);
P11=1;
delay (j);
}
五、实验
PWM调速,试验中是开环的,没有检测装置。

这种其实是没有使用价值的。

PWM的占空比与速度完全不成线性关系。

不要期望精确调速,而且有很大一段PWM死区,即电机不动,这是平均电压没有达到直流电机的启动电压的原因。

PWM波从0-31,满电压为12V,占空比一直到12都不转。

过了12以后非线性非常非常严重。

几乎到21就升到12V再改变也没有意义了。

估计有什么问题。

注意一个很重要的问题,电路中5V和12V一定要共地。

如果不共地,芯片将会无法正常工作。

图5。

相关文档
最新文档