打印
[AVR单片机]

AVR 单片机电压 电流两路模拟信号采集控制一组PWM输出

[复制链接]
1817|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
侠行江湖|  楼主 | 2014-2-10 16:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近想利用AVR单片机作为驱动,做一款电源。电压 电流两路模拟信号采集控制一组PWM输出,当出现故障电压或电流或电压、电流超过某一固定值时,单片机ADC检测停止输出PWM,PWM连续重启3次,直到故障消失,才正常输出PWM。反之,PWM连续重启3次故障未消失,则停止输出PWM.
针对以上功能相关程序如下,问题点1:只有电压信号PC0可以关断PWM,
                          问题点2:多次启动不知道怎么循环,程序未体现。
希望高手能够指导一下,谢谢!

//宏定义
#include<iom8v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int

//延时函数
void delay(uint ms)          //延时函数(1MHz晶振时)
{ unsigned int i,j;          //1ms级
  for(i=0;i<ms;i++)
    for(j=0;j<136;j++);
}

//快速PWM产生函数 500HZ D=0.5
void pwm50()                 //
{
  DDRB|=BIT(1);              //内部1MHz出厂晶振,注意!
  TCCR1A=0x81;               //1000 0001
  TCCR1B=0x0A;               //0000 1010
  OCR1A=130;           
}

//中断函数
void repe_ig()           //硬件采用第二版设计
{
   uint t;
   ACSR=0x40;           //0100 0000//模拟比较器控制和状态寄存器//比较器正极由能基准源取代
   delay(5);
   if(ACSR&BIT(ACO))    //设定1或0            
   {                        
     for(t=0;t<1;t++)
     {
          PORTB&=~BIT(0);
          delay(4000);
          PORTB|=BIT(0);
          delay(1000);
      if((ACSR&BIT(ACO))==0)
          break;
         }  
   }
}

void main()
{
  uint addata1,addata0,m,i;
  DDRD=0;
  DDRB=0xFF;
  //PORTB|=BIT(0);                 //PB0为输出5V,开启
  //delay(1000);
  //repe_ig();  
  delay(3000);
   //调光部分
   DDRC&=~BIT(PC0);
   PORTC&=~BIT(PC0);
  while(1)
  {
   ADMUX=0x40;       //启动ADC0
   ADCSRA=0xA0;    //先1010 0000
   ADCSRA|=BIT(ADSC);  //启动ADSC位,开始转换
   while(!(ADCSRA&(BIT(ADIF))));     //判断转换结束语句
   addata0=ADCL;
   addata0=addata0+ADCH*256;
     if((addata0<200))
      {
            ADMUX=0x41;       //启动ADC1
            ADCSRA=0xA0;    //先1010 0000
            ADCSRA|=BIT(ADSC);  //启动ADSC位,开始转换
            while(!(ADCSRA&(BIT(ADIF))));     //判断转换结束语句
            addata1=ADCL;
            addata1=addata1+ADCH*256;
            if((addata1<200))
            {
              pwm50();
            }
      }
    else
      {
      TCCR1A=0;
      TCCR1B=0;
      }
   delay(5);
   ADCSRA=0;
   delay(5);  
  }

}
  

相关帖子

沙发
qin552011373| | 2014-2-11 09:03 | 只看该作者
自己先写,出问题再过来吧

使用特权

评论回复
板凳
侠行江湖|  楼主 | 2014-2-11 09:33 | 只看该作者
就是不知道如何添加循环呀

使用特权

评论回复
地板
幸福大侠| | 2014-3-22 11:05 | 只看该作者
可以循环输出PWM波就行

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

27

帖子

0

粉丝