直流电机PWM闭环控制实验(完整的C51程序)

发布者:科技创新实践者最新更新时间:2016-10-29 来源: eefocus关键字:直流电机  PWM  闭环控制 手机看文章 扫描二维码
随时随地手机看文章
C源代码:

#include

/*定义字型字位口*/
#define DIGPORT P2
#define WORDPORT P0

/*定义键盘口*/
#define KEYPORT P1

#define uint unsigned int
#define uchar unsigned char
#define uong unsigned long

sbit P_7=P3^7; //PWM信号输出

bit OVER;
uint k,dt;
uong KEYNUM; 
uchar qu,NUM;

void Delay(uint ms)
{
   while(--ms);
}


void timer0(void) interrupt 1 using 1
{
  TL0=-(10248%256);
  TH0=-(10248%256);
  NUM+=1;
  if(NUM>=10){
    TR1=0;
    TR0=0;
    OVER=1;
  }
}

uint CK(void)
{
  uint number=0;
  P_7=1;
  OVER=0;NUM=0;
  EA=1;ET0=1;
  TH0=(10203/256);
  TH0=(10203%256);
  TH1=0;
  TL1=0;
  TMOD=0x51;
  TR0=1;
  TR1=1;
  Delay(dt);
  P_7=0;
  while (!OVER);
  OVER=0;
  number=TH1*256+TL1;
  return(number);
}

void Display_LED(uong nu)
{
  uint ii=0;
  uong aa,bb;
  uint xx[]={-0x10,-0x10,-0x10,-0x10,-0x10,-0x10,-0x10,-0x10};
  do
  {
    bb=nu/10;
    aa=nu-bb*10;
    xx[ii]=aa;
    nu=bb;ii++;
  }while(nu>0);
  DIGPORT=0xf0; WORDPORT=0x30+xx[0];
  DIGPORT=0xf1; WORDPORT=0x30+xx[1];
  DIGPORT=0xf2; WORDPORT=0x30+xx[2];
  DIGPORT=0xf3; WORDPORT=0x30+xx[3];
  DIGPORT=0x0f; WORDPORT=0x30+xx[4];
  DIGPORT=0x1f; WORDPORT=0x30+xx[5];
  DIGPORT=0x2f; WORDPORT=0x30+xx[6];
  DIGPORT=0x3f; WORDPORT=0x30+xx[7];
}

void getkey()
{
qu=0;k=0;
KEYNUM=0;
do
{
  switch(KEYPORT)
  {
    case 0xbd:
      KEYNUM=KEYNUM*10;
      break;
    case 0xf6:
       KEYNUM=KEYNUM*10+1;
       break;
    case 0xf5:
       KEYNUM=KEYNUM*10+2;
       break;
    case 0xf3:
       KEYNUM=KEYNUM*10+3;
       break;
    case 0xee:
       KEYNUM=KEYNUM*10+4;
       break;
    case 0xed:
       KEYNUM=KEYNUM*10+5;
       break;
    case 0xeb:
       KEYNUM=KEYNUM*10+6;
       break;
    case 0xde:
       KEYNUM=KEYNUM*10+7;
       break;
    case 0xdd:
       KEYNUM=KEYNUM*10+8;
       break;
    case 0xdb:
       KEYNUM=KEYNUM*10+9;
       break;
   case 0xbe:
       KEYNUM=KEYNUM/10;
       break;
    case 0xbb:
      qu=1;
   }
   Delay(6000);
   Delay(6000);
   Delay(6000);
   Delay(6000);
   Delay(6000);
   Delay(6000);
   Delay(6000);
   Delay(6000);

   if(KEYNUM>100000000) break;
   Display_LED(KEYNUM);
 }while(qu==0);
}


void main(void)
{
  uong f;
  P_7=0;
  dt=1000;
  getkey();
  for(;;){
    f=0;
    f=CK()*12;
    Display_LED(f);
    if((f>KEYNUM)&&(dt>100)) dt=dt-(f-KEYNUM)/10;
    if((f   }
}

关键字:直流电机  PWM  闭环控制 引用地址:直流电机PWM闭环控制实验(完整的C51程序)

上一篇:5线四相八拍步进电机的C51演示程序
下一篇:基于C8051F040的CAN总线系统智能节点设计

推荐阅读最新更新时间:2024-03-16 15:18

DSP在无刷直流电机控制中的应用简介
1 概述 本文采用TI公司推出的240XDSP作为无刷直流电机全数字控制核心,组成的伺服系统只需要很少的系统元件。TMS320F240X是美国TI公司推出的高性能16位数字信号处理器(DSP),是专门为电机的数字化控制而设计的。这种DSP包括一个定点DSP内核及一系列微控制器外围电路,将数字信号处理的运算能力与面向电机的高效控制能力集于一体,可以实现用软件取代模拟器件,方便地修改控制策略,修正控制参数,兼具故障检测、自诊断和与上位机通信等功能。 2 硬件介绍 TMS320LF2407A的内核是TMS320C2XX(图1),内部采用了哈佛结构,流水线作业,在20MHz的时钟频率下,指令周期仅为50ns,且多数指令都能在一个
[嵌入式]
DSP在无刷<font color='red'>直流电机</font>控制中的应用简介
PWM在ARM Linux中的原理和蜂鸣器驱动实例开发
1. 什么是PWM? PWM(脉冲宽度调制)简单的讲是一种变频技术之一,是靠改变脉冲宽度来控制输出电压,通过改变周期来控制其输出频率。如果还不是很清楚,好吧,来看看我们实际生活中的例子,我们的电风扇为什么扭一下按扭,风扇的转速就会发生变化;调一下收音机的声音按钮,声音的大小就会发生变化;还有待会儿我们要讲的蜂鸣器也会根据不同的输入值而发出不同频率的叫声等等!!这些都是PWM的应用,都是通过PWM输出的频率信号进行控制的。 2. ARM Linux中的PWM 根据S3C2440的手册介绍,S3C2440A内部有5个16位的定时器,定时器0、1、2、3都带有脉冲宽度调制功能(PWM),定时器4是一个没有输出引脚的内部定时器,定
[单片机]
<font color='red'>PWM</font>在ARM Linux中的原理和蜂鸣器驱动实例开发
PWM控制LED的亮度的程序
for(a=v;a 15;a++) { m=1; n=240; for(j=1;j 239;j++) { n--; for(h=0;h sudu1;h++) { if(a==0) { P2=0xff; P3=0xff; P1=0xff; } else { P2=bian ; P3=shu ; P1=bian ; P1=shu ; P0=bian ; P0=shu ; } for(l=n;l 0;l--) {} P2=bian ; P3=shu ; P1=bian ; P1=shu ; P0=bian ; P0=shu ; for(k=m;k 0;k--) {} } m++; } delay_long(20000); delay_lo
[单片机]
STM32定时器捕获PWM脉冲频率
一、概念理解 PWM输入捕获模式是输入捕获模式的特例,自己理解如下 1. 每个定时器有四个输入捕获通道IC1、IC2、IC3、IC4。且IC1 IC2一组,IC3 IC4一组。并且可是设置管脚和寄存器的对应关系。 2. 同一个TIx输入映射了两个ICx信号。 3. 这两个ICx信号分别在相反的极性边沿有效。 4. 两个边沿信号中的一个被选为触发信号,并且从模式控制器被设置成复位模式。 5. 当触发信号来临时,被设置成触发输入信号的捕获寄存器,捕获“一个PWM周期(即连续的两个上升沿或下降沿)”,它等于包含TIM时钟周期的个数(即捕获寄存器中捕获的为TIM的计数个数n)。 6. 同样另一个捕获通道捕获触发信号和下一个相反极性的边沿信
[单片机]
STM32 定时器输出 PWM
我们通过TIM3 输出PWM 去驱动 SG90电机 配置如下 1.GPIO结构体 2.配置通用定时器结构体 3.配置定时去输出PWM结构体 4.打开时钟 — GPIO时钟,TIM定时器时钟,部分重映射时钟 5.配置PWM比较值 一 我们使用定时器3 通道2 重映射之后为PB5 GPIO_InitTypeDef GPIO_motorstruct; GPIO_motorstruct.GPIO_Mode =GPIO_Mode_AF_PP; GPIO_motorstruct.GPIO_Pin = GPIO_Pin_5; GPIO_motorstruct.GPIO_Speed =GPIO_Speed_50M
[单片机]
Allegro发布全新四路DMOS全桥PWM电机驱动器IC
新产品具有自适应百分比快速衰减(APFD)功能,可以降低电流纹波,提高微步进准确度,减小可闻噪音 Allegro MicroSystems,LLC发布一款全新的四路DMOS全桥驱动器IC A5990,它可驱动两个步进电机或四个直流电机,每个全桥的额定输出高达1.6A和40V。Allegro的A5990集成有固定的关断时间脉宽调制(PWM)电流稳压器和2位非线性数模转换器(DAC),从而能够以整步进、半步进和四分之一步进行步进电机的控制,或者以向前、反转和滑行模式控制直流电机。对于每个全桥,可以通过独立的电流控制参考电压输入实现高分辨率微步进控制。A5990 PWM电流稳压器具有外部可调节的关断时间,可根据电源电压和电机参数调整电流
[电源管理]
如何使用Arduino生成的PWM来控制交流风扇的速度
警告!! 本项目中讨论的电路图仅用于教育目的。请注意,使用 220V 交流电源电压需要采取极端的预防措施,并应遵循安全程序。电路运行时,请勿触摸任何元件或电线。 就像我们在许多基于 Arduino 的家庭自动化项目中所做的那样,使用开关或使用某种控制机制很容易打开或关闭任何家用电器。但是有很多应用需要我们部分控制交流电源,例如控制风扇的速度或灯的强度。在这种情况下,使用了PWM 技术,所以在这里我们将学习如何使用 Arduino 生成的 PWM 来控制 Arduino 的交流风扇速度。 在这个项目中,我们将演示使用 TRIAC 的 Arduino 交流风扇速度控制。这里使用交流信号的相位控制方法来控制交流风扇的速度,使用
[嵌入式]
如何使用Arduino生成的<font color='red'>PWM</font>来控制交流风扇的速度
采用运算放大器实现低电压大电流的电源转换
采用LDO来实现PC主板要求的低电压大电流电源具有很大的难度,而采用PWM电路需要采用较多的元件,PCB占位面积较大。本文通过分析当前主板设计要求和PWM电路的特点,提出了采用运算放大器实现低电压大电流的设计思路和方法。 INTEL芯片组和CPU要求电源的电压越来越低,而电流却越来越大,主板设计工程师不仅要很好地解决芯片之间互连产生的信号完整性和EMI等高速信号设计问题,还必须解决电源问题。电源是主板的动力源,在实际的产品调试过程中所出现的很多问题都直接与电源相关。 在我们的新项目中使用了INTEL新的芯片组和CPU,和以往不同的是,前端系统总线(FSB)将使用独立的终端(termination)电源,需要系统提供最大
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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