基于单片机的直流电机控制PWM调速代码

发布者:DataExplorer最新更新时间:2021-10-18 来源: eefocus关键字:单片机  直流电机控制  PWM调速 手机看文章 扫描二维码
随时随地手机看文章

在这里插入图片描述

(PWM)脉冲宽度调制


脉冲宽度调制是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。


所谓PWM,就是脉冲宽度调制技术,其具有两个很重要的参数:频率和占空比。频率,就是周期的倒数;占空比,就是高电平在一个周期内所占的比例。

在这里插入图片描述

本次使用了电机驱动模块是L298N

在这里插入图片描述

实物图如下,改模块常用直流电机的驱动

在这里插入图片描述

其内部结构图如下图所示

在这里插入图片描述

续流二极管(flyback diode),有时也称为飞轮二极管或是snubber二极管,是一种配合电感性负载使用的二极管,当电感性负载的电流有突然的变化或减少时,电感二端会产生突变电压,可能会破坏其他元件。配合续流二极管时,其电流可以较平缓地变化,避免突波电压的发生。


我们通常所说的“续流二极管”由于在电路中起到续流的作用而得名,一般选择快速恢复二极管或者肖特基二极管来作为“续流二极管”,它在电路中一般用来保护元件不被感应电压击穿或烧坏,以并联的方式接到产生感应电动势的元件两端,并与其形成回路,使其产生的高电动势在回路以续电流方式消耗,从而起到保护电路中的元件不被损坏的作用 [1] 。

在这里插入图片描述

本次程序实现原理通过单片机IO口输出高低电平驱动电机的正反转,然后再通过定时器产生PWM信号进而调速

定时器初始化


void motor_Init()

{

EA=1;//打开总中断

TMOD=0x01; //定时器工作方式

TH0=(65535-1000)/256; //初值约1ms

TL0=(65535-1000)%256; 

ET0=1; //打开定时器中断

TR0=1; //打开定时器

}


定时器中断函数


/*

 * @description : 定时器中断函数,利用定时器产生PWM调速信号

 * @param :无

 * @return : 无

 */

void Time() interrupt 1

{

static unsigned char count=0; 

TH0=(65535-1000)/256;  //重装初值

TL0=(65535-1000)%256; //重装初值

count++;

if(count==20)count=0;

if(count>=speedA)

{

ENA=1;

}

else{

ENA=0;

}

if(count>=speedB)

{

ENB=1;

}

else{

ENB=0;

}


}


控制电机方向


/*

 * @description : 电机转向

 * @param : 0-A正 1 F反  2-B正 3-B反

 * @return : 无

 */

void motor(unsigned char status)

{

if(status==0)

{

IN1=0;

IN2=1;

}

if(status==1)

{

IN1=1;

IN2=0;

}

if(status==3)

{

IN3=0;

IN4=1;

}

if(status==4)

{

IN3=1;

IN4=0;

}

}


通过PWM信号占空比调节AB的速度

单片机定时器产生1ms一次中断,并且通过调节speedA与speedB调节速度


PWM

两个重要的概念,频率、占空比

  频率是指每秒钟信号从高电平到低电平再回到高电平的次数,为一个PWM波周期的倒数。上图中频率=1/(0.003+0.001)=250 HZ


  占空比是指高电平持续时间比一个周期持续的时间。上图中占空比=1/(1+3)=25%,所以可以通过控制占空比,来控制输出的等效电压。


  所以对于方波的话,频率和占空比就确定了一个波。


怎么能产生一个PWM波?

  方法1:利用芯片内部模块输出PWM信号,STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4路的 PWM 输出,这样, STM32 最多可以同时产生 30 路 PWM 输出! 但是!!!同一个定时器TIM只能产生一个频率的PWM波,你只能改变占空比。 具体例程见一下实战篇STM32部分。


  方法2:利用IO口高低电平转变输出PWM信号,比如上图中先把电平置1,维持1ms,然后将电平拉低,维持3ms,再将电平置高,如此循环往复下去,就可以产生一个周期4毫秒占空比为25%的PWM波了。具体方法就是给IO口加一个定时器,用定时器中断来实现及时切换高低电平。 具体历程见以下51单片机部分。


定时器

  要想使用51单片机来产生一路PWM,根据上述的方法2,首先你应该知道什么是定时器?定时器是怎么工作的?


定时器:和计数器说的是一个东西,因为它既能计时也能计数。定时器的实质是,由机器频率向一个16位寄存器累加,累加满溢出时触发中断。为了产生一个我们想要的时间间隔。比如说1s,所以我们要在这个寄存器里设定一个初值,以至于让它在这个初值上累加可以产生一个1s的倍数。这样我们就得到了稳定的时间间隔。


  这个寄存器分为TH(高八位)和TL(低八位)。所以我们需要把计算好的初值分成两部分分别放入TH和TL。


关键字:单片机  直流电机控制  PWM调速 引用地址:基于单片机的直流电机控制PWM调速代码

上一篇:基于51单片机的俄罗斯方块
下一篇:51单片机的直流电机PWM调速系统设计

推荐阅读最新更新时间:2024-11-17 10:11

速度!兆易创新RISC-V内核MCU登场,布局新赛道
8月22日,向来低调的兆易创新(GigaDevice)在北京召开了一场盛大的、主题为“智领全球,芯动未来”的发布会,这次会议的主角是:基于RISC-V内核的32位通用MCU——GD32V系列。新品一经发布,技术微信群便自发开启了讨论模式: “RISC-V 芯片量产了?” “是不是和兆易F103系列引脚兼容啊?底层库兼容吗?” “期待,兆易速度真快!一整套开发环境,还有那么多demo !“ 无疑,越来越受欢迎的 RISC-V 内核及落地产品,成了全场关注的焦点。 为何是 RISC-V? 众所周知, 作为国内首家推出 ARM 系列的32位通用 MCU 产品公司,兆易创新拥有非常全面的产品线,可以满足各种应用需求。据
[单片机]
速度!兆易创新RISC-V内核<font color='red'>MCU</font>登场,布局新赛道
基于单片机的正弦信号发生器的设计
   一.方案   1. 常见信号源制作方法:采用DDS,即直接数字频率合成,其原理方框图如图0所示,   它以有别于其它频率合成方法的优越性能和特点成为现代频率合成技术中的佼佼者。具体体现在相对带宽、频率转换时间短、频率分辨率高、输出相位连续、可产生宽带正交信号及其他多种调制信号、可编程和全数字化、控制灵活方便等方面,并具有极高的性价比。   2.调幅电路:用增益可变运放AD603,其传输带宽高达90MHZ,完全可以满足输出信号频率的要求。   3.调频电路 :压控振荡器   压控振荡器的输出频率是随着输入电压的改变而改变的,鉴于此,如果用调制信号来控制压控振荡器的输入电压,即可实现调频。这样显然简单而容易控制,且
[单片机]
基于<font color='red'>单片机</font>的正弦信号发生器的设计
8051单片机波特率计算公式(配套C语言例程)
8051单片机使用定时器1工作在方式2的情况下作为串口波特率发生器,其波特率=(2smod /32)×(定时器T1溢出率),其中smod是PCON 7 ,表示是否波特率加倍,Fsoc是系统的晶振大小。 波特率公式中:T1溢出率=溢出周期的倒数;溢出周期=(256-TH1)×12/Fosc; 最终公式: 波特率:Baud=(2smod × Fsoc)/(32 ×12×(256-TH1)) 我们一般不太关注波特率的计算,而是关心选用的传输速度(波特率)去反算定时器1(自动重装模式)的初值(TH1),所以将上面的公式导一下,得到TH1的公式: TH1=256-(Fsoc×2smod)/(12×32×Baud) 下面针对串口发送程序,水寒
[单片机]
单片机驱动LED数码管显示总结
用单片机驱动LED数码管有很多方法,按显示方式分,有静态显示和动态(扫描)显示,按译码方式可分硬件译码和软件译码之分。   静态显示就是显示驱动电路具有输出锁存功能,单片机将所要显示的数据送出后就不再管,直到下一次显示数据需要更新时再传送一次新数据,显示数据稳定,占用很少的CPU时间。动态显示需要CPU时刻对显示器件进行数据刷新,显示数据有闪烁感,占用的CPU时间多。这两种显示方式各有利弊;静态显示虽然数据稳定,占用很少的CPU时间,但每个显示单元都需要单独的显示驱动电路,使用的硬件较多;动态显示虽然有闪烁感,占用的CPU时间多,但使用的硬件少,能节省线路板空间。   硬件译码就是显示的段码完全由硬件完成,CPU只要送出标准的BC
[单片机]
基于51单片机的康复仪研究
1. 引言   人类的平衡能力是人能够进行各种运动的基础,人的站立、坐卧、行走都需要有平衡能力。一旦人的平衡能力有障碍,则人的行动能力就受制约,给学习、生活带来极大的不便。在现代化的社会,人口老龄化问题突出,老年人因某种疾病而导致脑损伤引起平衡能力降低,行动能力受阻。因此,在临床治疗中,需要一种能对平衡功能检验的设备。我校在上海瑞金医院的协作下,在分析了国际、国内有关资料的基础上,应用先进的计算机控制技术研制成功了多功能的人体平衡康复仪。使用该仪器可以客观、定量地进行平衡功能的测试、分析和训练,可以地进行平衡能力的静态测试和动态训练。为临床研究提供了有效的手段。   2.仪器功能   ·仪器的测量范围:10---360k
[单片机]
基于51<font color='red'>单片机</font>的康复仪研究
功耗再降低 飞思卡尔推新款汽车电控系统MCU解决方案
近日,飞思卡尔公司针对汽车电子系统推出了一款新型Qorivva微控制器及两款S12 MagniV系列最新末端节点设备(end-node device),以满足汽车电子系统对网络带宽和数据处理能力及数据安全性日益增长的要求,此外,新型MCU的工作功耗也得到降低。 随着车内电控单元数量的增多(超过100个,执行代码超过1000万行),各单元之间的连通性也需随之增强。目前,平均每辆汽车内部联网中用来输送信号的铜线长达几英里,重达150磅(68千克)左右。在单个ECU芯片上集成更多的功能并提升执行代码的智能度能够有效减少汽车电子系统中ECU的数量,如此一来,可以节省大量的铜线布置,减轻了整车重量,从而提升了燃油效率。 目前,ISO
[单片机]
单片机学习——IIC总线及EEPROM实验之一
题目:简单的流水灯实验。用EEPROM实现。 解决方案:(c语言编程) #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int uchar code table ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f ,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; void delay1(uint); sbit scl=P3^3; sbit sda=P3^4; void delay() //短延时子程序 { ;; } void i
[单片机]
SPI总线在51单片机系统中的实现
  一个完整的单片机系统,通常包括键盘输入、显示输出、打印输出、数据采集等许多功能模块。这些功能模块一般是通过I/O端口实现与单片机的数据交换,但是单片机的I/O端口有限,且一般用来处理数字信号,从而产生了总线式传输模式。   现在大多数单片机都是传统的三总线结构,即地址,数据,控制三总线。由于方便控制,三总线得到广泛的应用。但是作为并行总线,它也有一定的局限性。不适合远距离的传输。与I/O口的数目存在矛盾。随着电子技术的进步,发展出很多新的总线接口,如USB、I2C、CAN、SPI、1-Wire等。这些总线的特点都是串行接口,只需要几根甚至一根线就可以实现数据的传输。本文通过对支持SPI总线的AD器件MAX189性能分析,简要介
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved