51单片机H桥电路控制电机正反转和PWM调速

发布者:asdfrewqpp最新更新时间:2015-04-29 来源: 51hei关键字:51单片机  H桥电路  控制电机  正反转  PWM调速 手机看文章 扫描二维码
随时随地手机看文章
搭了个H桥电路,控制电机的正反转和PWM调速,程序是网上的,改改引脚就能用,电路和源程序如下:

  
 

功能:P1.1按键停止,P1.2左转,P1.3右转,P1.0调速
#include
#define uchar unsigned char
#define uint   unsigned int
sbit PW1=P0^0 ;
sbit PW2=P0^1 ;     //控制电机的两个输入
sbit accelerate=P1^0 ;   //调速按键
sbit stop=P1^1 ;    //停止按键
sbit left=P1^2 ;     //左转按键
sbit right=P1^3 ;    //右转按键
           
#define right_turn PW1=0;PW2=1    //顺时针转动
#define left_turn PW1=1;PW2=0    //逆向转动
#define end_turn   PW1=1;PW2=1    //停转
uint t0=25000,t1=25000;   //初始时占空比为50%
uint a=25000;      //   设置定时器装载初值   25ms     设定频率为20Hz
uchar flag=1;      //此标志用于选择不同的装载初值
uchar dflag;      //左右转标志
uchar count;     //用来标志速度档位
void keyscan();     //键盘扫描
void delay(uchar z);
void time_init();    //定时器的初始化
void adjust_speed();   //通过 调整占空比来调整速度[page]
//**********************************//
void main()
{
    time_init();     //定时器的初始化
while(1)
{
   
   keyscan();    //不断扫描键盘程序,以便及时作出相应的响应
}
}
//*************************************//
void timer0()   interrupt 1 using 0
{
   
if(flag)
    {
    flag=0;
    end_turn;
    a=t0;    //t0的大小决定着低电平延续时间
    TH0=(65536-a)/256;
    TL0=(65536-a)%256;   //重装载初值
    }
    else
    {
    flag=1;    //这个标志起到交替输出高低电平的作用
        if(dflag==0)
        {
         right_turn;   //右转
        }
         else
        {
      left_turn; //左转
        }
        a=t1;   //t1的大小决定着高电平延续时间
        TH0=(65536-a)/256;
        TL0=(65536-a)%256;   //重装载初值
   }
}
void time_init()
{
TMOD=0x01; //工作方式寄存器    软件起动定时器 定时器功能 方式1 定时器0
TH0=(65536-a)/256;
TL0=(65536-a)%256;   //装载初值
ET0=1;       //开启定时器中断使能
EA=1;         // 开启总中断
TR0=0;
}
//****************************************//
void delay(uchar z)    //在12M下延时z毫秒
{
uint x,y;
for(x=z;x>0;x--)
   for(y=110;y>0;y--);
}
//******************************//
void keyscan()
{
 
if(stop==0)
   {
   TR0=0;        //关闭定时器0    即可停止转动
   end_turn;
   }
if(left==0)
   {
       TR0=1;
       dflag=1;     //转向标志置位则左转
   }
if(right==0)
   {
     TR0=1;
     dflag=0;    //转向标志复位则右转
   }
if(accelerate==0)
   {
     delay(5) ; //延时消抖
   if(accelerate==0)
   {
     while(accelerate==0) ;   //等待松手
      count++;
    if(count==1)
     {
        t0=20000;
         t1=30000;   //占空比为百分之60
     }
    if(count==2)
     {
        t0=15000;
         t1=35000;    //占空比为百分之70
     }
    if(count==3)
     {
        t0=10000;
         t1=40000;    //占空比为百分之80
     }
     if(count==4)
     {
        t0=5000;
         t1=45000;    //占空比为百分之90
     }
    if(count==5)
     {
       count=0;
     }
   }
    
   }
}

关键字:51单片机  H桥电路  控制电机  正反转  PWM调速 引用地址:51单片机H桥电路控制电机正反转和PWM调速

上一篇:PWM的单片机产生
下一篇:嵌入式PLC的制作及应用

推荐阅读最新更新时间:2024-03-16 14:00

51单片机程序及调试步骤实战经验
我刚参加工作的时候,用的是stc 51单片机的,51单片机不像stm32那样可以通过st-link在keil上面在线仿真。 有时候出现bug的时候,非常难找问题,要一段一段屏蔽然后测试。 在刚开始接触开发的时候,我非常不习惯用在线仿真,大概是因为没用过。 记得有一次进了一家公司做行车记录仪,用的台产GRAIN的单片机。 那时候基本上没什么资料,就一个dada sheet和demo程序。 在开发之前,老大安排了给我一个任务,就是把这个仿真环境先给搭起来。 相当于是他们原厂没有的东西,让我去搞定,这个芯片是基于Fa626TE core的32位控制器。 网上的资料太少了,光是测试搭建这个环境花了半个多月,最后还没搭建出来。
[单片机]
51单片机定时器相关介绍
对于软件手段,我们在前面的课程已经详细讲到过,它最大的缺点就是占用单片机的“机时”,也就是耗费单片机的“精力”,从而降低了单片机的工作效率。而定时器则不同,它是单片机内部一个独立的功能模块,定时器一旦设置后,定时器便自动开始计时,当计时时间满后,便产生相应的中断,去处于中断函数内的程序,而在计时这段时间内,定时器和CPU是分别独立工作的,CUP此时就可以有时间去做其它的事情。所以为了提高单片机的工作效率和实现精确的延时,目前几乎所有的半导休生产厂商在设计单片机时,在内部都配置了定时器模块。下面51单片机内部的定时器进行介绍。 1、定时器/计数器概述 51单片机内部共有两个定时器/计数器模块T0和T1,对于52单片机内部又增
[单片机]
<font color='red'>51单片机</font>定时器相关介绍
【STM32电机矢量控制】记录7——六扇区输出值的设定
扇区六状态的计算方式,令 N=4*C+2*B+A N值与扇区的对应关系: 基本矢量作用时间计算与三相 PWM 波形的合成 PWM 周期计数器的值------为NTpwm=fdsp/fs/2 发波系数: Unom 为系统额定电压(线电压),开关频率为 fs ,系统时钟为 fc,输入额定电压 Udc 则PWM周期计数器的值:NTpwm=fc/fs/2 又有电压基值 ,实际电压 U=U'Ubase,U'为标幺值 可以计算得到各扇区基本矢量的作用时间 主要完成任务: 1、对程序中的部分参数进行了解探索及尝试修改 2、理解了合成矢量 Uref 所处扇区 N 的判断 3、了解 基本矢量作用时间计算与三相
[单片机]
【STM32<font color='red'>电机</font>矢量<font color='red'>控制</font>】记录7——六扇区输出值的设定
STM32 Nucleo扩展板电机控制选型指南
STM32 ODE 生态系统 快速、经济的原型设计和开发 STM32开放开发环境(ODE)在一个开放、灵活、简单、经济的开发环境下,基于STM32位微控制器,结合其他通过扩展板连接的ST尖端原件,从而快速进行原型设计,迅速转换为最终设计。 STM32ODE包括下述五个单元: STM32 Nucleo开发板。全面的经济型开发板,适用于所有STM32微控制器系列,具有无限的统一扩展能力,具有集成的调试器/编程器。 STM32 Nucleo扩展板。该扩展板具有更多功能,能按需增加传感、控制、连接、供电、音频或其他功能,可以插在 STM32 Nucleo开发板上,更复杂的功能可以通过堆叠更多的扩展板来实现。 STM32Cube
[单片机]
STM32 Nucleo扩展板<font color='red'>电机</font><font color='red'>控制</font>选型指南
51单片机实现按健连加减程序
************************************************************************/ /********按键记数0-99 长按键连续加或者连续减实验******************/ /********按k1键加一,超过一定时间连续加一,加到99后k1在按无效*******/ /********按k2键减一,超过一定时间连续减一,减到00后k2在按无效*******/ /************************************************************************/ /****************宏定义****
[单片机]
51单片机循环转移指令DJNZ简介
循环转移 指令 DJNZ Rn,rel DJNZ direct,rel 第一条指令在前面的例程中有详细的分析,这里就不多谈了。第二条指令,只是将Rn改成直接地址,其它一样,也不多说了,给一个例程。 DJNZ 10H,LOOP
[单片机]
51单片机和OLED仿真 芯片SSD1306
用的是7Pin的OLED,就那个宝买的那种。用的是不是中景园的程序我就不知道了。芯片应该是用SSD1306,但是用仿真里面的SSD1306总是不对。我随便试了试SSD1308到时对了! 单片机源程序如下 #include xianshispi.h #include oledfont.h void delay_ms(unsigned int ms) { unsigned int a; while(ms) { a=1800; while(a--); ms--; } return; } void OLED_WR_
[单片机]
<font color='red'>51单片机</font>和OLED仿真 芯片SSD1306
8051单片机供水系统水位控制的硬件电路设计
供水系统水位控制原理 下图是水塔水位控制原理图。图中虚线表示允许水位变化的上下限。在正常情况下,应保持水位在虚线范围之内,为此,在水塔的不同高度安装固定不动的三根金属棒,以感知水位变化情况。其中A棒处于下限水位以下,C棒处于上限水位,B棒在下限水位处。A棒接+5V电源,B棒、C棒各通过一个电阻与模拟地相连。 水塔由电机带动水泵供水,单片机控制电机转动以达到对水位控制的目的。供水时,水位上升,当达到上限时,由于水的导电作用,B棒、C棒连通+5V电源,因此,b、c两端均为高电平“1”状态。这时,应停止电机和水泵的工作,不再给水塔供水。 当水位降到下限时,B棒、C棒都不能与A棒导通,因此,b、c两端均为“0”状态。这时,应启动电机,
[单片机]
80<font color='red'>51单片机</font>供水系统水位<font color='red'>控制</font>的硬件<font color='red'>电路</font>设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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