历史上的今天
返回首页

历史上的今天

今天是:2024年10月30日(星期三)

正在发生

2020年10月30日 | 基于51单片机PWM直流电机调速程序 0到20级的调速

2020-10-30 来源:51hei

单片机源程序:


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

/* 程序名:PWM直流电机调速 */

/* 晶振:11.00592 MHz CPU型号:AT89C51 */

/* 直流电机的PWM波控制,可以直接的调速从0到20级的调速 */


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


#include

#define TH0_TL0 (65536-1000)//设定中断的间隔时长

unsigned char count0 = 50;//低电平的占空比

unsigned char count1 = 0;//高电平的占空比


bit Flag = 1;//电机正反转标志位,1正转,0反转


sbit Key_add=P2 ^ 0; //电机减速

sbit Key_dec=P2 ^ 1; //电机加速

sbit Key_turn=P2 ^ 2; //电机换向


sbit PWM1=P2^6;//PWM 通道 1,反转脉冲

sbit PWM2=P2^7;//PWM 通道 2,正转脉冲


unsigned char Time_delay;


/************函数声明**************/

void Delay(unsigned char x);

void Motor_speed_high(void);

void Motor_speed_low(void);

void Motor_turn(void);

void Timer0_init(void);


/****************延时处理**********************/

void Delay(unsigned char x)

{

        Time_delay = x;

        while(Time_delay != 0);//等待中断,可减少PWM输出时间间隔

}


/*******按键处理加pwm占空比,电机加速**********/

void Motor_speed_high(void)

{

        if(Key_add==0)

        {

                  Delay(10);

                  if(Key_add==0)

                  {

                    count0 += 5;

  

                    if(count0 >= 100)

                    {

                            count0 = 100;

                    }

                  }

                  while(!Key_add);//等待键松开

        }

}


/******按键处理减pwm占空比,电机减速*****/

void Motor_speed_low(void)

{

        if(Key_dec==0)

        {

                  Delay(10);

                  if(Key_dec==0)

          {

            count0 -= 5;

  

            if(count0 <= 0)

            {

                    count0 = 0;

            }

          }

          while(!Key_dec );

        }

}


/************电机正反向控制**************/

void Motor_turn(void)

{

        if(Key_turn == 0)

        {

          Delay(10);

          if(Key_turn == 0)

          {

            Flag = ~Flag;

          }

         while(!Key_turn);

        }

}


/***********定时器0初始化***********/

void Timer0_init(void)

{

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

TH0=TH0_TL0/256;

TL0=TH0_TL0%256;

TR0=1;

ET0=1;

EA=1;

}


/*********主函数********************/

void main(void)

{

        Timer0_init();


        while(1)

        {

          Motor_turn();

          Motor_speed_high();

          Motor_speed_low();

        }

}


/**************定时0中断处理******************/

void Timer0_int(void) interrupt 1 using 1

{

TR0 = 0;//设置定时器初值期间,关闭定时器

TL0 = TH0_TL0 % 256;

TH0 = TH0_TL0 / 256 ;//定时器装初值

TR0 = 1;


if(Time_delay != 0)//延时函数用

{

  Time_delay--;

}


if(Flag == 1)//电机正转

{

  PWM1 = 0;

  

  if(++count1 < count0)

  {

    PWM2 = 1;

  }

    else

    PWM2 = 0;


    if(count1 >= 100)

    {

    count1=0;

    }

}

  else //电机反转

  {

    PWM2 = 0;

  

    if(++count1 < count0)

    {

    PWM1 = 1;

    }

    else

    PWM1 = 0;

   

    if(count1 >= 100)

    {

      count1=0;

    }

  }

}

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


void Delay(unsigned char x)

{

Time_delay = x;


while(Time_delay != 0);//等待中断,可减少PWM输出时间间隔

}


Delay(10);


if(Time_delay != 0)//延时函数用

{

  Time_delay--;

}


其实这三个部分是相关联的。

Delay(10)这是延时防抖的这是毫无疑问的,但这个消抖在消抖的同时将一开始只是声明了下的Time-


delay赋值了,赋值还不算他还牵扯到定时器里去了。你看在赋值后Time-delay变成了10,看第二个部分


的while(Time-delay!=10);这个语句正如注释所说的等待中断,当等来了中断后你可以看第三个部


分了,看见了吧终端中有将Time-delay减一,每中断一次就减一次直到等于0之后。也就是说延时的时长


是十个中断的时长。注释中:可减少PWM输出时间间隔      也就可想而知了。

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


推荐阅读

史海拾趣

Calmos Systems Inc公司的发展小趣事

Calmos Systems Inc公司注重企业文化建设和团队建设。公司倡导创新、协作、务实的企业文化,鼓励员工敢于尝试、勇于创新。同时,公司还注重员工的培训和发展,为员工提供广阔的职业发展空间和晋升机会。在团队建设方面,公司定期组织各类团建活动,增强员工之间的凝聚力和向心力。这些举措使得公司拥有一支高效、团结、富有创造力的团队,为公司的发展提供了有力保障。

以上便是关于Calmos Systems Inc公司在电子行业里发展起来的5个相关故事。这些故事展示了公司在创立初期、技术创新、市场拓展、国际化战略以及企业文化与团队建设等方面的努力和成果,为公司的发展奠定了坚实的基础。

Free2Move公司的发展小趣事

随着电子行业的快速发展,Calmos Systems Inc公司意识到技术创新是企业发展的核心动力。因此,公司加大了研发投入,引进了一批高水平的技术人才,建立了完善的研发体系。经过多次试验和失败,公司成功开发出了一款具有颠覆性的新技术,这项技术在行业内引起了广泛关注。凭借这一技术创新,公司在市场上获得了竞争优势,实现了快速发展。

Computer Conversions Corp公司的发展小趣事

Computer Conversions Corp非常重视人才的培养和团队建设。公司定期组织内部培训和技术交流活动,鼓励员工分享经验和创新想法。同时,公司还建立了完善的激励机制,为员工提供广阔的发展空间。这种以人为本的管理理念,不仅增强了团队的凝聚力和创新力,也为公司的持续发展注入了强大的动力。通过这些举措,Computer Conversions Corp打造出了一支高素质、高效率的技术团队,为公司的长远发展奠定了坚实的基础。

广东爱晟电子(exsense)公司的发展小趣事

面对日益激烈的市场竞争和不断变化的市场需求,爱晟电子始终坚持以创新驱动发展。公司不断投入研发资金,加强研发团队的建设,推动技术的不断进步和创新。同时,公司还积极探索新的应用场景和市场领域,为未来的发展奠定了坚实的基础。这些努力使得爱晟电子在电子行业中保持了持续的发展势头和竞争力。

风华(FH)公司的发展小趣事

福斯特半导体(这里假定为福斯特应用材料股份有限公司的半导体业务部门,因直接名为“福斯特半导体”的公司可能专注于不同领域)的母公司——杭州福斯特应用材料股份有限公司,最初并非涉足半导体行业。2003年,公司创始人林建华在纺织业取得成功后,决定跨界进军光伏胶膜行业。当时,国内光伏组件厂商所需的光伏胶膜主要依赖进口,市场被几家国际巨头垄断。林建华凭借在材料领域的深厚积累和技术优势,成功研制出EVA胶膜产品,并迅速占领市场。至2008年,福斯特已成为全球前三的EVA胶膜供应商,为光伏产业的发展奠定了坚实基础。这一跨界创新不仅推动了光伏胶膜行业的国产化进程,也为福斯特半导体后续在电子行业的拓展提供了宝贵的经验和资源。

Galaxy Microelectronics公司的发展小趣事

江苏飞翼智能科技有限公司成立于2023年,该公司迅速将无人机技术与大数据技术相结合,实现了从传统无人机表演企业向无人机应用型企业的转型。通过自主研发和技术创新,飞翼智能的无人机在地理测绘、土方开挖计算、三维建模等领域展现出强大实力。例如,在地理测绘领域,无人机通过镜头采集地面照片,结合后期处理,能够高效完成数据测绘,大大降低了人工用量,提高了工作效率。这一技术的成功应用,不仅为公司赢得了市场认可,也推动了无人机技术的智能化发展。

问答坊 | AI 解惑

车身电子半导体市场规模突破16亿元

目前汽车车身电子系统大量采用电子技术,其目标是提高驾驶 舒适程度并为驾驶员提供车况信息。车身电子系统主要有电子控制安 全气囊、防撞警告系统、防盗系统、电子仪表、空调系统、电动车窗、 中控锁、座椅位置调节、车门控制装置等等。这些应用系 ...…

查看全部问答>

请大家共同参与,讨论~

如何使用单片机的1个io口实现两个灯的3种状态 同亮 1亮 1灭 …

查看全部问答>

失真度测试方法

失真度测试方法…

查看全部问答>

复旦大学讲义-半导体器件原理PPT

一学期的课程 主要分为三个部分,半导体器件的工作原理 器件特性(MOSFET,BJT,VMOS,IGBT...GaAs) 半导体器件模型化 [ 本帖最后由 linda_xia 于 2010-4-18 08:31 编辑 ]…

查看全部问答>

一种利用MBE 模型改进的低速率

一种利用MBE 模型改进的低速率…

查看全部问答>

MC39I拨号GPRS成功分配IP后,无法进行UDP,TCP通信

我用的单片机控制MC39I,拨号CMNET成功分配IP地址和DNS1/DNS2后,发送UDP以及TCP数据包,为什么别人总收不到?当然上位机发的我也收不到.恳请那位大侠予以指点是不是在IPCP协商玩之后,发送UDP/TCP数据包之前还需要作些什么?我用Windows自带的PPP拨号发 ...…

查看全部问答>

89C2051单片机P1驱动遇到怪现象?肯请高手指点一下?

最近,用89C2051驱动CCD,晶振用12M,主要是控制P10,P11,P12时序,需要给P10,P11,P12连续赋值,一个周期给P1口赋值8次,发现怪现象,用示波器观察好像P1口经不住这样连续操作,中间出现停顿现象,大概有几十ms,不会是2051这么弱吧,经受不住吧?请高 ...…

查看全部问答>

关于PCB软件中的错误检测问题

在看一些书上的教程,或者是一些网上的文档的时候。都会介绍关于错误检查的问题。大家平常设计的时候修改这里修改的多吗?…

查看全部问答>

分享

感谢论坛的分享,帮了我大忙。…

查看全部问答>

MSP430F2011发射38khz占空比为50%的方波红外线发射信号程序

用MSP430F2011发射38khz占空比为50%的方波红外线发射信号程序,谢谢邮箱com021@163.com,高手大侠们多多指教…

查看全部问答>