avr单片机 PWM调速程序及原理图

发布者:stampie最新更新时间:2019-10-19 来源: eefocus关键字:avr  单片机  PWM  调速程序 手机看文章 扫描二维码
随时随地手机看文章

源程序:

#include

#include


#define uint unsigned int

#define uchar unsigned char

#define Left OCR1A

#define Right OCR1B

#define ADD 1.15;   //宏定义,加速系数


uchar i;

uchar flag;      //是否减速标志位

uchar TCRT5000_IN;


uint Max_Speed;

uchar Min_Speed;


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

函数名称:Init_TCRT5000

函数功能:初始化红外传感器TCRT5000

函数说明:设置PA口为输入,监测传感器信号*********/

void Init_TCRT5000()

{

DDRA = 0X00;

PORTA = 0XFF;

}


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

函数名称:Max()

函数功能:判断最大速度

函数说明:判断最大速度,将其值放入Max_Speed中*****/

void Max()

{

if(Left >= Right)

{

  Max_Speed = Left * ADD;

}

else

{

  Max_Speed = Right * ADD;

}

if(Max_Speed >= 0xf7)

{

  Max_Speed = 0xf7;

}

Min_Speed = 0x20 ;

}


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

函数名称:Scan_TCRT5000

函数功能:TCRT5000进行扫描,返回跑到信息

函数说明:*********/

void Scan_TCRT5000()

{

TCRT5000_IN = PINA&0x1F;

switch(TCRT5000_IN)

{

   /*  OOOOO  *///全灭

   case 0x00:

       break;

   /*  *****  *///全亮

   case 0x1f:

       OCR1A=0x00;

       OCR1B=0x00;

           break; 

   /*  O*OOO  */

   case 0x08:

       OCR1A=Min_Speed;

           OCR1B=Max_Speed;

           break;

   /*  *OOOO  */

   case 0x10:

       OCR1A=Min_Speed;

           OCR1B=Max_Speed;

              break;

   /*  O**OO  */

   case 0x0c:

       OCR1A=Min_Speed;

           OCR1B=Max_Speed;

           break;

   /*  **OOO  */

   case 0x18:

       OCR1A=Min_Speed;

           OCR1B=Max_Speed;

           break;

    /*  ***00*/

    case 0x1c:

       OCR1A=Min_Speed;

           OCR1B=Max_Speed;

           break;

   /*  OOO*O  */

   case 0x02:

           OCR1A=Max_Speed;

           OCR1B=Min_Speed;

           break;

   /*  OOOO*  */

   case 0x01:

       OCR1A=Max_Speed;

           OCR1B=Min_Speed;

           break;

   /*  OO**O  */

   case 0x06:

       OCR1A=Max_Speed;

           OCR1B=Min_Speed;

           break;

   /*  OOO**  */

   case 0x03:

       OCR1A=Max_Speed;

           OCR1B=Min_Speed;

           break;

   /*  OO***  */

   case 0x07:

       OCR1A=Max_Speed;

           OCR1B=Min_Speed;

           break;  

   default:

       break;

  }

}


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

函数名称:Init_Speed

函数功能:定时器1初始化,产生两路PWM信号

函数说明:通过改变全局变Left,Right控制小车速度**/

void Init_Speed()

{

DDRD |= 0X30;

TCCR1A=0xA1;

TCCR1B=0x0A;

OCR1A=0xa0;

OCR1B=0xa0;

}


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

函数名称:Stop

函数功能:小车停止

函数说明:Right=0,Left=0*********************/

void Stop()

{

OCR1A=0x00;

OCR1B=0x00;

}


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

函数名称:Init_Timer0

函数功能:初始化定时器0

函数说明:初始化定时器0

          设1024分频

                  100ms触发一次中断,速度加1**********/

void Init_Timer0()

{

TCCR0 = 0x05;

TCNT0 = 0x00;

TIMSK |= BIT(2);

SREG |= BIT(7);

}


void main()

{

uchar speed;

TCRT5000_IN = PINA&0x1F;

Init_Speed();

Init_TCRT5000();

Init_Timer0();

while(1)

{

  TCRT5000_IN = PINA&0x1F;

  while(TCRT5000_IN != 0x04)

  {

   SREG &= ~BIT(7);   //关闭中断

   Scan_TCRT5000();

   TCRT5000_IN = PINA&0x1F;

   flag = 1;

  }


  while(TCRT5000_IN == 0x04)

  {

   if(flag == 1)

   {

           Left = 0xb0;

    Right = 0xb0;

        flag =0;

        SREG |= BIT(7);   //打开中断

   } 

   TCRT5000_IN = PINA&0x1F;

  }

}

}


/*定时器0中断函数*/

#pragma interrupt_handler Timer0:10

void Timer0()

{

TCNT0 = 0x00;

i++;

if(i == 100)

{

  i=0; 

  Left++;

  if(Left >= 0xfe)

  {

   Left = 0xfe;

  }

  OCR1B++;

  if(OCR1B >= 0xfe)

  {

   OCR1B = 0xfe;

  }

  Max();

}

}



关键字:avr  单片机  PWM  调速程序 引用地址:avr单片机 PWM调速程序及原理图

上一篇:一款高性能avr单片机频率计程序 10khz
下一篇:使用excel制作的AVR寄存器配置助手---轻松搞定AVR

推荐阅读最新更新时间:2024-11-06 16:19

51单片机 定时器时钟
1.main.c 注:Sec,Min,Hour可不进行赋值 #include REGX52.H #include Delay.h #include LCD1602.h #include Timer0.h unsigned char Sec=55,Min=59,Hour=23; void main() { LCD_Init(); Timer0Init(); LCD_ShowString(1,1, Clock: ); LCD_ShowString(2,1, : : ); while(1) { LCD_ShowNum(2,1,Hour,2); LCD_Sh
[单片机]
单片机处理系统并行通信分析
  对于系统较大,实时性强,功能多,存储量大,扩展能力要求强的工业控制系统,可采用多个单片机,组成一个多微处理器系统,使之具有并行处理功能。并行工作的各微处理器之间的信息交换,可采用串行通信方式,亦可用并行通信方式。但对于实时性强,并且信息交换量大的系统,只有采用并行通信方式,才能满足系统功能的要求。本节就实际应用的一些体会,着重介绍模块式结构的多单片机通信。 一、通用并行接口8255A简介      Intel 8255A是一种通用并行接口电路,可用编程的方法选择其逻辑功能。该芯片可以和51系列单片机直接接口。8255A有3个8位的并行口:口A、口B和口C。有3种工作方式可供选择:方式0为基本输入/输出方式;方式1为选通输入/输
[单片机]
多<font color='red'>单片机</font>处理系统并行通信分析
飞兆半导体推出高集成度PWM控制器FAN6863
    低于40W消费电子产品(如膝上型电脑、机顶盒、上网本和数码相框)的设计人员,都面对着共同的挑战,就是提供待机功耗小于100mW的高能效解决方案,以满足世界各地的节能法规要求。     为了应对这一挑战,飞兆半导体公司(Fairchild Semiconductor)开发出高集成度PWM控制器FAN6863,,能够以小封装尺寸提供更低的待机功耗和更高的效率。     FAN6863器件使用专有绿色模式功能来提供关断时间调制,能够在轻负载条件下连续减小开关频率,从而最大限度地减小待机功耗。在零负载条件下,电源进入间歇模式运作以关断PWM输出,FAN6863器件通过采用这项技术,实现无负载条件下小于100mW的出色待机功耗
[工业控制]
基于AT89S51单片机的动态数码显示设计
1. 实验任务 如图所示,AT89S51单片机 P0端口接动态数码管的字形码笔段,P2端口接动态数码管的数位选择端,P1.7接一个开关,当开关接高电平时,显示“12345”字样;当开关接低电平时,显示“HELLO”字样。 2. 电路原理图 3. 系统板上硬件连线 (1. 把“单片机系统”区域中的P0.0/AD0-P0.7/AD7用8芯排线连接到“动态数码显示”区域中的a-h端口上; (2. 把“单片机系统”区域中的P2.0/A8-P2.7/A15用8芯排线连接到“动态数码显示”区域中的S1-S8端口上; (3. 把“单片机系统”区域中的P1.7端口用导线连接到“独立式键盘”区域中的SP1端口上; 4. 程序设计内容
[单片机]
基于AT89S51<font color='red'>单片机</font>的动态数码显示设计
打造“中国芯”芯海科技信号链MCU让智能终端更智能
用中国心打造“中国芯”|芯海科技信号链MCU让智能终端更智能 12月21日,由珠海先进集成电路研究院主办的2021粤港澳大湾区大消费电子领袖峰会在珠海国际会展中心举办。在集成电路产业中,消费电子方向与消费者连接最为紧密,也是集成电路中应用场景最为丰富,市场变化最为迅速的产业。芯海科技副总裁丁京柱受邀出席并做《信号链MCU让物联终端更智能》主题演讲,分享芯海科技如何在大消费电子趋势下为产品赋能。 芯海科技副总裁丁京柱发表主题演讲 AIoT带来智能终端的革新 “AI”是人工智能,“IoT”是物联网,AIoT是未来的趋势 ,随着AIoT技术和产业奇点来临,国内进入黄金发展期。AIoT产业链包含感知、传输、平台、应用及
[单片机]
打造“中国芯”芯海科技信号链<font color='red'>MCU</font>让智能终端更智能
【51单片机快速入门指南】4: 软件 I2C
普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬知识 摘自《普中 51 单片机开发攻略》 I2C 介绍 I2C(Inter-Integrated Circuit)总线是由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单, 器件封装形式小,通信速率较高等优点。I2C 总线只有两根双向信号线。一根是数据线 SDA,另一根是时钟线 SCL。由于其管脚少,硬件实现简单,可
[单片机]
【51<font color='red'>单片机</font>快速入门指南】4: 软件 I2C
51单片机+8155芯片的交通灯程序
单片机源程序如下: #include reg52.h # include absacc.h #define uchar unsigned char //定义为uchar类型 #define uint unsigned int //定义为uint类型 # define COM XBYTE //控制字地址(总控制,决定了PA/B/C是写还是读等) # define PA XBYTE //控制PA地址(总控制写的是读时,里面存的是读的值; // 写的是写时,里面要写入控制值) # define PB X
[单片机]
51<font color='red'>单片机</font>+8155芯片的交通灯<font color='red'>程序</font>
51单片机你选“谁”?
一、AT89S51代替AT89C51的实质 MCS-51内核系列兼容的单片机仍是应用的主流产品(比如目前流行的89S51、已经停产的89C51等),各高校及专业学校的培训教材仍与MCS-51单片机作为代表进行理论基础学习。 兼容系列单片机,就是说MCS-51内核实际上已经成为一个8位单片机的标准。 不同公司的51单片机产品都是和MCS-51内核兼容的产品而以。同样的一段程序,在各个单片机厂家的硬件上运行的结果都是一样的,如ATMEL的89C51(已经停产)、89S51, PHILIPS(菲利浦),和WINBOND(华邦)等, 89C51最致命的缺陷在于不支持ISP(在线更新程序)功能, 89S51在工艺上进行了改进,89S5
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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