51驱动直流电机——PWM调速

发布者:创意探险最新更新时间:2021-10-24 来源: eefocus关键字:51驱动  直流电机  PWM调速 手机看文章 扫描二维码
随时随地手机看文章

一、直流电机工作原理

1、直流电机正反转

——通过高低电平反转实现


2、电机调速通过PWM波实现

——PWM通过51单片机定时器输出,实现占空比调整。


二、功能程序

端口定义


#include

sbit PWM1=P2^0;  //电机输入1

sbit PWM2=P2^1;  //电机输入2

sbit tiaosu=P2^2;  //调速按键

sbit stop=P2^3;   //停止按键

sbit left=P2^4;   //逆时针按键

sbit right=P2^5;   //顺时针按键


变量定义


typedef unsigned int uint;

typedef unsigned char uchar;

uint t0=25000,t1=25000;//初始占空比为1/2  t0低电平,t1高电平

uint a=25000;//设置定时器装载初值

uchar flag=1;  //选择不同的装载初值

uchar dflag;  //左右转标志位

uchar sudu;  //速度


ms延时函数


void delay(uchar z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}


定时器和中断函数


void time_init()

{

TMOD=0X01;  //定时器0  方式1

TH0=(65535-a)/256;

TL0=(65535-a)%256;  //装载初值

ET0=1; //开启定时器中断使能

EA=1;  //开启总中断

TR0=0;

}

void timer0()interrupt 1 using 0

{

if(flag)

{

flag=0;

PWM1=PWM2=1;

a=t0;

TH0=(65535-a)/256;

TL0=(65535-a)%256;  //重新装载初值

}

else

{

flag=1;

if(dflag==0)

{

PWM1=0;PWM2=1;;

}

else

{

PWM1=1;PWM2=0;

}

a=t1;

TH0=(65535-a)/256;

TL0=(65535-a)%256;  //重新装载初值

}

}


按键扫描函数


void keyscan()

{

if(stop==0)

{

TR0=0;

PWM1=PWM2=1;//关闭定时器,便可停转电机

}

if(left==0)

{

TR0=1;

dflag=1;

}

if(right==0)

{

TR0=1;

dflag=0;

}

if(tiaosu==0)

{

delay(5);  //消抖

if(tiaosu==0)

{

while(tiaosu==0)

sudu++;

if(sudu==1)

{

t0=20000;

t1=30000; //占空比3/5

}

if(sudu==2)

{

t0=15000;

t1=35000; //占空比7/10

}

if(sudu==3)

{

t0=10000;

t1=40000; //占空比4/5

}

if(sudu==4)

{

t0=5000;

t1=45000; //占空比9/10

}

if(sudu==5)

{

sudu=0;

}

}

}

}


主函数


void main()

{

time_init();//定时器初始化

while(1)

{

keyscan(); //按键扫描

}

}

关键字:51驱动  直流电机  PWM调速 引用地址:51驱动直流电机——PWM调速

上一篇:51实验1:通过位定义控制任意灯的亮灭
下一篇:51驱动两相四线步进电机

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

单片机PWM输出控制直流电机(89c51系列、stc12c5a60s2系列)
【pwm是如何控制电机转速】 在本科学习中,学生所做的小车多数为使用lm298n或者tb6612来驱动简单的直流电机,我们需要单片机输出pwm波来控制直流电机转速。 直流电机的PWM调速原理为:通过调节驱动电压脉冲宽度的方式,并与电路中一些相应的储能元件配合,改变了输送到电枢电压的幅值,从而达到改变直流电机转速的目的。 【89C51系列单片机产生pwm波】 89c51单片机没有自带pwm发生器,如果想要使用传统的51单片机产生pwm,只能通过软件模拟的方法来产生pwm。 软件模拟可以分为软件延时和定时器两种方法。 1、软件延时输出pwm 使用延时函数产生频率为1kHz的pwm方波(@12MHz晶振) #in
[单片机]
单片机<font color='red'>PWM</font>输出控制<font color='red'>直流电机</font>(89c<font color='red'>51</font>系列、stc12c5a60s2系列)
基于Renesas RAJ306010的无刷直流电机控制设计
  由于在很大程度上受物联网 (IoT) 和汽车电气化的推动,机械系统加速向电子控制转变,设计人员正在将低功耗电机应用于从家用电器、门锁和遥控百叶窗到汽车油泵、座椅、窗户和门等应用中的基本任务。这些直流电机的额定功率从小到几分之一马力到大到多个马力不等,虽几乎无处不在,但往往却不为人知。   虽然因为电机在不断改进且电机控制技术变得更好、更容易使用,而促进其快速扩展,但设计者仍然面临着提高效率和降低成本的持续压力,同时也要实现更大的精度和更高的可靠性。   无刷直流 (BLDC) 电机和步进电机(另一种无刷直流电机)的变型可以帮助设计者满足这些日益苛刻的性能和成本目标,但必须仔细考虑电机控制器和电机驱动电路。控制器必须向电
[嵌入式]
基于Renesas RAJ306010的无刷<font color='red'>直流电机</font>控制设计
基于ATmega8的大功率直流电机控制系统设计与实现
 一、前言   直流电动机作为主要的机电能量转换的装置,广泛应用于各行各业。随着计算机电子技术的迅猛发展,电动机的控制方法也发生了巨大的变化,模拟控制方法已基本被数字控制方法所取代。本系统采用ATmega8单片机为核心控制器,通过PWM波来控制H桥中MOSFET器件的导通和关断,把直流电压变成电压脉冲列,控制电压脉冲的宽度或周期,将26V直流电变为交流电在在通过变压器将升压到180V在整流获得的,其中还将用PWM控制技术来控制直流电动机的转速。   二、系统硬件设计   (一)系统工作原理   系统控制器主要采用的是ATmega8单片机为控制芯片。通过霍尔传感器检测电流,光电编码器对速度进行检测。在通过单片机产生PWM波
[单片机]
基于ATmega8的大功率<font color='red'>直流电机</font>控制系统设计与实现
max7219驱动数码管程序(51单片机+STM32 MAX7219数码管程序案例)
1、STM32 硬件SPI max7219 8位数码管显示模块 数码管模块电路图 /***************************************************************** Updated time: 12th,12,2015 Function:通过MAX7219驱动数码管 ******************************************************************/ #include “delay.h” #include “sys.h” #include “usart.h”//串口通信 #define Max7219_pinCLK PAout(
[单片机]
max7219<font color='red'>驱动</font>数码管程序(<font color='red'>51</font>单片机+STM32 MAX7219数码管程序案例)
基于单片机89C51产生PWM信号来控制直流电机调速程序
利用2051的T0产生双路PWM信号,推动L293D或L298N为直流电机调速,程序已通过调试。 /* =======直流电机的PWM速度控制程序======== */ /* 晶振采用11.0592M,产生的PWM的频率约为91Hz */ #include reg51.h #include math.h #define uchar unsigned char #define uint unsigned int sbit en1=P1^0; /* L298的Enable A */ sbit en2=P1^1; /* L298的Enable B */ sbit s1=P1^2; /* L298的Input 1 */ s
[单片机]
STM8L151C8学习笔记4:ADC驱动
启用ADC采集功能,通过PB1口采集模拟电压。 ADC驱动配置大致分为以下步骤: 开启ADC1/2对应时钟 配置ADC初始化参数 使能ADC通道 等待ADC转换 读取ADC转换的数值 硬件电路 原理图如下: 数据手册上PB1对应的ADC通道: 编写程序 1.ADC初始化函数 /*ADC Init - PB1*/ void Adc_Init(void) { // /* Enable ADC1 clock */ // CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE); /* Initialise and configure ADC1 */ ADC_Ini
[单片机]
STM8L1<font color='red'>51</font>C8学习笔记4:ADC<font color='red'>驱动</font>
51单片机之IIC&EEPROM的驱动程序
#include #include ./delay/delay.h sbit SCL = P2^0; sbit SDA = P2^1; bit ack = 0; unsigned char flag = 1; #define LCDPORT P0 #define LCD_WRITE_DATA 1 #define LCD_WRITE_COM 0 sbit RS = P2^4; sbit RW = P2^5; sbit E = P2^6; #define SUCC 0 #define ERR 1 void iic_start() { SDA = 1; //先操作SDA,在操作SCL SCL = 1; dela
[单片机]
LCD1602的C8051驱动
//--------------------lcd1602.c------------------------------ //********************************************** // 功能:C8051F(330) LCD1602(4线驱动) //********************************************** #include c8051f330.h #include delay.h // //1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 // | | | | | |
[单片机]

推荐帖子

除了光耦与三极管,还有哪些可控开关元件?
最近设计一个电路用到了一个单片机控制的开关,原先使用的是9014三极管,后面因为开关频率不够换成了高速光耦。想问问各位,除了三极管与光耦可以当作此类的开关使用,还有什么别的元器件可以吗?(话说回来,这种功能的东西应该叫“继电器”吧)除了光耦与三极管,还有哪些可控开关元件?晶体管、场效应管、可控硅、继电器等。光耦中的开关元件要么是晶体管,要么是可控硅,所以不能把光耦列入其中。类似的,固态继电器也同样。 学习了,我在用的时候这两种都是比较常见成型的产品,所以就归在一起了,确实两者的不
作死教练 模拟电子
嵌入式C编程与Atmel AVR
嵌入式C编程与AtmelAVR嵌入式C编程与AtmelAVR看看啊已经有了,感谢支持免费资料类应该免费,鼓励大家多学习感谢您,已经有了不错回复楼主weilanqing的帖子无私的奉献楼主好人!感谢分享看看哈,,,,辛苦了,,,辛苦楼主了。。。好人啊棒Thanksforsharing谢谢!很给力!:carnation:这个可以有好人啊
weilanqing Microchip MCU
wince6 gpio读数据的驱动问题
小弟做毕设遇到个棘手问题,望各位好心人帮助小弟用的arm开发板是友坚恒天的S3C6410,将GPIO的GPK的15-8位和GPL的7-0位从高到低组合成16位数据,但在编写驱动时报错,可能是XXX_read函数有问题,代码如下:驱动部分代码:DWORDGIO_Init(LPCTSTRPContext,LPCVOIDlpvBuscontext{BOOLbResult=TRUE;PGIO_PUBLIC_CONTEXTpPublicGIO=NULL;PHYSICAL
cearmce WindowsCE
WinCE5.0选中文为默认语言后HPC的图片资源编不进来
WinCE5.0选中文为默认语言后HPC的图片资源编不进来现象就是开机后,桌面上只有“我的电脑”,“回收站”,“我的文档”等文字,没有相应的图标。DefaultLanguage选“中文”,并且增加了MultilingualUserInterface(MUI)编译出来的image就是不含HPC下的图片文件。如果再单独buildandsysgen一下shell然后MakeRun-TimeImage, 那么image里有HPC的图片了,但是系统的默认语言变成了英文应用程序里的中
wisper WindowsCE
F149内部AD的电压问题
我今天用一个探测火源的模块去接F149的内部AD,我用3.3V给火焰传感器模块供电,输出脚悬空的时候我测输出脚是0到3V之间在变化(就是当没有火源或者火源超过探测范围的时候是3V),但我接上F149的AD的输入脚之后本来的3V输出就立即衰减为1.7V了。然后我又换了5V电源给传感器供电,结果接上F149之后的峰值只有1.9V,这是为什么呢?就算上F149的内阻分压也不至于衰减的这么厉害吧?大家遇到过这种问题么?怎么解决啊?小弟在此先谢过各位大神~~~F149内部AD的电压问题用的是哪个
蛊惑小夜 微控制器 MCU
【测评STM32L452Nucleo-64】有源无源蜂鸣器的使用
本篇测评给大家测试一下蜂鸣器的使用,在进行蜂鸣器的测试时我也是犯了一些很基本的错误致使卡了很久之后才发现问题进行解决首先蜂鸣器分为两种,分别是有源蜂鸣器和无源蜂鸣器如下图;有源蜂鸣器无源蜂鸣器蜂鸣器模块一般由一个上拉电阻一个负责放大的三极管和蜂鸣器组成,这里使用的蜂鸣器模块供电为5V,要确保通过蜂鸣器的电流足够大否则也不能驱动蜂鸣器。有源蜂鸣器和无源蜂鸣器的主要区别是在蜂鸣器中是否有振荡电路,蜂鸣器的发声是依靠频率不断变化从而使发声的震动片不断震动从而产
一只香榴莲 stm32/stm8
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多往期活动
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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