基于51单片机的pwm直流电机调速

发布者:huanli最新更新时间:2020-02-08 来源: 51hei关键字:51单片机  pwm  直流电机调速 手机看文章 扫描二维码
随时随地手机看文章

仿真原理图如下

单片机源程序如下:

#include

/*********************************************

* 定时器初值

*********************************************/

#define T0HIGH        0xec

#define T0LOWW        0x8a


/*********************************************

*

*********************************************/

typedef unsigned char        u8;

typedef unsigned int        u16;

typedef unsigned long        u32;

typedef bit                                BOOL;


/*********************************************

* 单片机管脚定义

*********************************************/

sbit KEY_ON_PIN = P2^0;

sbit KEY_INC_PIN = P2^1;

sbit KEY_DEC_PIN = P2^2;


sbit MOTO_LEFT = P3^6;

sbit MOTO_RIGHT = P3^7;


/*********************************************

* 按键定义

*********************************************/

#define KEY_NULL                0xff

#define KEY_LONG_PERIOD        25

#define KEY_CONTINUE_PERIOD        20


#define KEY_DOWN                0x80

#define KEY_CONTINUE        0x40

#define KEY_UP                        0x20


#define KEY_STATE_INIT                0

#define KEY_STATE_WOBBLE        1

#define KEY_STATE_PRESS                2

#define KEY_STATE_LONG                3

#define KEY_STATE_CONTINUE        4

#define KEY_STATE_RELEASE        5


#define KEY_ON_VALUE                1

#define KEY_INC_VALUE                2

#define KEY_DEC_VALUE                3


#define KEY_ON                (KEY_ON_VALUE | KEY_DOWN)

#define KEY_INC                (KEY_INC_VALUE | KEY_DOWN)

#define KEY_INC_CON        (KEY_INC_VALUE | KEY_CONTINUE)

#define KEY_DEC                (KEY_DEC_VALUE | KEY_DOWN)

#define KEY_DEC_CON        (KEY_DEC_VALUE | KEY_CONTINUE)

/*********************************************

* 常量定义

*********************************************/

#define true        1

#define false        0


#define MOTO_ON                MOTO_LEFT = false;

                                        MOTO_RIGHT = true

#define MOTO_OFF        MOTO_LEFT = true;

                                        MOTO_RIGHT = true

/*********************************************

* 全局变量定义

*********************************************/

code u8 DisCode[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0xff};


u8 PWMpercent = 0;

u8 DisNum[4] = {0x0a, 0x0a, 0x0a, 0x00};

u8 DisPosition = 0;

u8 SecCount = 0;

u8 u10msNum = 0;


BOOL b10msEvent = false;

BOOL b100msEvent = false;

BOOL b1secEvent = false;

BOOL MotoStart = false;

BOOL MotoRun = false;


void Key_Prosess(void);

void Dynamic_Display(void);

void Speed_Display(void);


/*********************************************

* 主函数

*********************************************/

main()

{

        TMOD = 0x01;

        TH0 = T0HIGH;

        TL0 = T0LOWW;

        TR0 = 1;

        ET0 = 1;

        EA = 1;

        P1 = 0x00;


        while(1)

        {

                if(true == b10msEvent)        //10毫秒定时标志

                {

                        b10msEvent = false;

                        Key_Prosess();                //按键扫描

                        Dynamic_Display();                //动态显示


                        if(true == MotoStart)        //如果电机启动

                        {

                                if(true == MotoRun)

                                {

                                        if(--u10msNum == 0)                //如果电机转动时间到,停止电机

                                        {

                                                MotoRun = false;

                                                MOTO_OFF;

                                        }

                                }

                                if(true == b1secEvent)                //PWM周期为1秒,1秒钟时间到,开始下一个周期

                                {

                                        b1secEvent = false;

                                        MotoRun = true;

                                        MOTO_ON;

                                        u10msNum = PWMpercent;

                                }

                        }

                }

        }

}

/*********************************************

* 清显示

*********************************************/

void Num_Clear(void)

{

        u8 i;

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

        {

                DisNum[i] = 0x0a;

        }

        DisNum[3] = 0x00;

}

/*********************************************

* 读键值

*********************************************/

u8 Key_Scan(void)

{

        if(KEY_ON_PIN == false)

                return KEY_ON_VALUE;

        if(KEY_INC_PIN == false)

                return KEY_INC_VALUE;

        if(KEY_DEC_PIN == false)

                return KEY_DEC_VALUE;

        return KEY_NULL;

}

/*********************************************

* 按键状态扫描

*********************************************/

u8 GetKey(void)

{

        static u8 KeyState = KEY_STATE_INIT;

        static u8 KeyTimeCount = 0;

        static u8 LastKey = KEY_NULL;        //保存按键释放时候的键值

        u8 KeyTemp = KEY_NULL ;


        KeyTemp = Key_Scan();


        switch(KeyState)

        {

                case KEY_STATE_INIT:        //初始状态

                        if(KEY_NULL != KeyTemp)        //有键按下

                        {

                                KeyState = KEY_STATE_WOBBLE;        //进入消抖

                        }

                        break;


                case KEY_STATE_WOBBLE:        //消抖

                        KeyState = KEY_STATE_PRESS;

                        break;


                case KEY_STATE_PRESS:

                        if(KEY_NULL != KeyTemp)

                        {

                                LastKey = KeyTemp;        //保存键值,以便在释放按键状态返回键值

[1] [2]
关键字:51单片机  pwm  直流电机调速 引用地址:基于51单片机的pwm直流电机调速

上一篇:手把手教你单片机串口通信-基础篇
下一篇:基于51单片机的数字电容测量仪设计

推荐阅读最新更新时间:2024-11-08 12:18

SA8282三相PWM发生器的原理与应用
摘要:SA8282是英国MITEL公司推出的三相PWM发生器集成芯片。该芯片采用全数字化操作,工作方式灵活、频率范围宽、精度很高并可与微处理器接口以实现智能化控制。文中介绍了该芯片的内部结构、引脚功能、主要特点和工作原理,给出了典型的应用电路。 关键词:PWM发生器;SA8282;微处理器 1 SA8282的功能特点 PWM控制技术是通过控制电路按一定规律来控制开关管的通断,以得到一组等幅而不等宽的矩形脉冲波形并使其逼近正弦电压波形。其方法有模拟方法和数字方法两种,其中模拟方法的电路比较复杂,且有温漂现象,会影响精度,降低系统的性能。数字方法则是按照不同的数字模型用计算机算出各切换点并将其存入内存,然后通过查表及必要的计算
[应用]
如何利用AT89S51单片机实现家庭语音报警系统设计
引 言 现代化居住格局使家庭生活的安全问题显得尤为重要。当前,安全的防范及报警系统是确保住宅、住户安全的重要保障。防盗的最好方法就是在不法分子有入侵企图时就发出语音警告,增加其心理压力,使其主动离开。本系统就是基于这种思想,采用了Atmel公司的AT89S51单片机作为控制核心,以美国ISD公司的ISD1420作为语音芯片的一种新型家庭语音报警系统。 系统工作原理 本系统的工作原理框图如图1所示。不法分子在所防范区域内移动时会引起红外辐射变化。当其所辐射的红外线通过菲涅尔透镜被聚焦在热释电红外传感器PIS-209S的探测元上时,热释电红外传感器将输出电压信号,然后经信号放大电路放大后送入信号采集与处理电路,经处理后向单片机输出
[单片机]
如何利用AT89S<font color='red'>51单片机</font>实现家庭语音报警系统设计
嵌入式学习笔记7——51单片机之独立键盘
1. 51单片机的P1、P2、P3口自有上拉电阻,P0口要想当做I/O口使用,必须也加个上拉电阻。 2. 如果用51单片机的I/O口用于输入,必须先将I/O口输出1,即置1。 3. 单片机组成的系统中,用的最多的是非编码键盘,其又分为独立式非编码键盘和行列式非编码键盘。 4. 数字电路中线与、线或的概念: 如上图,线与两端电平做与运算,即当一端为高电平,另一端为低电平时,开关闭合,整个电路为低电平。 线或,Z为高阻态,当另一端为高电平时,开关闭后,整个电路为高电平;若另一端为低电平,开关闭后,整个电路为低电平。 5. 按键消抖(软件方法和物理方法),本文只介绍软件方法:按键按下的实际波形如下图 整个
[单片机]
嵌入式学习笔记7——<font color='red'>51单片机</font>之独立键盘
基于单片机的风机温度控制系统的设计
0.引言 风机为通用机械,它广泛地使用在国民经济的各个部门中。风机广泛用在工厂、矿井、车辆、建筑物、家用电器等的通风、排尘和冷却;谷物的烘干和选送;风洞风源和气垫船的充气和推进等。另外,在一些对环境温度有特殊要求的场所,要求温度变化在1℃以下,这就需要一种可以根据外界环境温度来确定风机的转动与停止的风机温控系统。 本文设计的风机微小温控系统,可使温度检测精度达到0.01℃,并可手动设定温度上下限,且具有自动声光报警功能。 1.设计要求 本系统采用PT1000温度传感器检测环境温度(温度检测精度0.01℃),根据环境温度变化控制风机降温,并具备按键手动设定温度上下限、声光报警等功能。其控制面板示意图如图1所示。
[单片机]
单片机(STC12C5A60S2)内部PWM实现呼吸灯
上个文章写了用单片机的两个定时器给大家实现了呼吸灯,其实上个文章是在为大家解析PWM的原理,今天我们将使用单片机内部自带的PWM来进行呼吸灯设计,自己可以查看该单片机型号的中文资料。所看章节如下: 直接上代码吧,大家可以查看代码,如果不明白的可以给我留言,^_^。 #include stc12c5a60s2.h unsigned char dy ={16,32,48,64,80,96,112,128,144,160,176,192,208,224,240}; // CCAP0H值的分配,为了实现不同的占空比 void modify_duty(); void Init_PWM(); void delay();
[单片机]
单片机(STC12C5A60S2)内部<font color='red'>PWM</font>实现呼吸灯
51单片机(使用8x8点阵)
1.说在前面 今天初步学会了怎样使用面包板,感觉挺好玩的,学硬件的路渐行渐远吧 2.74hc595模块(8位移位寄存器和一个存储器,三态输出功能) 1.将三位串行输入变为并行输出 2.数据先移位到最高点在移位到次高点 3.基础参考资料:https://wenku.baidu.com/view/4d619b1c650e52ea55189826.html 3.实现点亮8x8点阵的代码 #include reg52.h typedef unsigned char u8; typedef unsigned int u16; //定义串行端口 sbit SRCLK=P3^6; sbit RCLK=P3^
[单片机]
<font color='red'>51单片机</font>(使用8x8点阵)
51单片机引脚简介
第一部分。单片机简介 MSC-51单片机指以8051为核心的单片机,由美国的Intel公司在1980年推出,80C51是MCS-51系列中的一个典型品种;其它厂商以8051为基核开发出的CMOS工艺单片机产品统称为80C51系列。 单片机:在一片集成电路芯片上集成微处理器(CPU)、存储器(ROM和RAM)、I/O接口电路,从而构成了单芯片微型计算机,即单片机(single chip Microcomputer)也叫微控制器(MCU)。 CPU( Central Processing Unit ):由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器; RAM( Random-Access Memory ):用以存
[单片机]
<font color='red'>51单片机</font>引脚简介
一种适合教学的开关电源设计及调试
线性稳压电路具有结构简单,调整方便,输出电压脉动小的优点,但缺点是效率低,一般只有20%~40%,并且比较笨重。开关型稳压电路能克服线性稳压电源的缺点,具有效率高,一般能达到65%~90%,并且体积小,重量轻,对电网电压要求不高,因而在实际生活中得到广泛应用。也正因为其应用的广泛性,相应专业的学生就更应该深刻和熟练地掌握它,在此以设计脉冲宽度调制型开关电路(PWM)为基础,详细解说该系统的调试过程。 1 系统设计原理 PWM型的开关电源整体框图如图1所示。变压、整流、滤波模块处理起来比较简单,只要采用相应的变压器、单相全波整流、电容式滤波即可实现,这里不用更多的篇幅介绍。此系统的核心模块是方框图中的闭合(负反馈)模块。如果直接采
[电源管理]
一种适合教学的开关电源设计及调试
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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