회원가입 ID/PW 찾기
AA

| 1. 컴파일러등의 개발환경 :  코드비젼
| 2. 회로나 소스코드의 제어목적:  비절연형 buck_boost 컨버터 출력 pwm duty 제어
| 3. 증상과 예상되는 문제점 : 소스코드 문제인지 동작이 안됨

안녕하십니까 ~

눈팅만 하고 혼자 공부하다가 이렇게 글을 올립니다 ..

현재 atmega128을 이용하여 DC-DC변환장치를 제어해보려고 하는 학생입니다

DC-DC변환기는 BUCK-BOOST 컨버터이구요 극성이 반전되어 나타나게 되어있습니다 ..

컨버터의 출력전압이 12V일때 AVR로 입력되는 전압은 2.5V가 되도록 회로를 구성하였고

AVR의 ADC0단자에 입력하였습니다 .. 스위칭 주파수는 약 31KHZ를 사용하였구요 ..

목적은 컨버터의 일정한 12V의 출력전압을 맞추는 것인데요 .. 당연히 2.5V가 AVR로 입력되면

12V가 컨버터에서 출력되는거니깐 .. 2.5V보다 낮으면 듀티를 증가시키고 2.5V보다 높으면 듀티를 감소시키는

그런 프로그램을 작성하고 있는데요 ..

/*****************************************************
Project :
Version :
Date    : 2010-04-04
Author  : kim                            
Company : sunchon                        
Comments:


Chip type           : ATmega128
Program type        : Application
Clock frequency     : 16.000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 1024
*****************************************************/
#include <mega128.h>                                     
#include <delay.h>
#include <mem.h>

//---------------------------------------------------------------------ADC

void init_adc(unsigned char ad_channel, unsigned ad_prescale )
{
 ADMUX = (ad_channel & 0x07);
 ADCSRA = 0x80 | (ad_prescale & 0x07);
}

 

int read_adc(void)
{
  ADCSRA.6=1;
  while(!ADCSRA.4);
  ADCSRA.4=0;
  return ADCW;
}

//------------------------------------------------------------PWM

void on_pwm(char clock_select, char pwm_channel, char pwm_prescaling)
{
   ASSR = 0x00 |(clock_select<<3);
  
   switch(pwm_channel)
   {
     case 0:TCCR0 =0x61;     //--> +1은 00입력을 방지하기 위해..    
            TCNT0 = 0x00;                          //                --> 0부터 6까지 입력가능
            OCR0  = 0x00;
            break;
   }
}          

void out_pwm(char pwm_channel, int avr128_duty_rate)  

{
  switch(pwm_channel)
  {
    case 0:OCR0 = avr128_duty_rate;
              break;
  }        

}

void off_pwm(char pwm_channel)

  switch(pwm_channel)
  {
     case 0:TCCR0 =0x00;
             TCNT0 = 0x00;
             OCR0  =0x00;
             break;
  }

//-----------------------------------------------------MAIN PROGRAM 

     
void main(void)
{
  int ad_value; 
 
  DDRB = 0xFF;
  PORTB =0x00;
  DDRC = 0xFF;
  PORTC = 0x00;              
  init_adc(0, 7);  
  on_pwm(0,0,3);
  out_pwm(0,77);
  delay_ms(3000);
 while(1)
     {
       ad_value = read_adc();      
       ad_value = (int)(ad_value/4);
      
       if(ad_value>128)
       { 
         PORTC = ad_value;
         PORTB.0 = 1;                   // ---> 방향
         out_pwm(0,(ad_value+1));
       }
      
      
       else if(ad_value<126)
       {
         PORTC = ad_value;
         PORTB.0 = 0;
         out_pwm(0,(ad_value-1)); 
       }
       else
       out_pwm(0,ad_value);
       delay_ms(1);

       }
}

위와 같이 소스코드를 작성하였습니다 .. 10비트 A/D변환결과를 8비트 PWM의 DUTY에 넣기 위하여

1023의 변환값을 4로 나누어 약 255가 되게 하였고 A/D 값을 확인하기 위하여 PORTC에 LED를 달아서

출력을 확인하게끔 .. 또 0~5V입력 일 때 0~1023이고.. 이것을 4로 나눈값이며 .. 2.5V가 들어오면 255의

절반값인 약 127로 하였으며, 증가와 감소를 반복하며 출력전압을 일정하게 할려고 하였는데요 ,,

PWM 듀티가 정확하게 나오지도 않으며, AD변환값을 확인하기 위한 PORTC의 LED를 확인해보면

가변저항을 달아서 실험할 때와는 다르게 정확한 수치값을 알아먹을 수도 없이 값이 왔다갔다 하며 값을

알아먹을 수도 없습니다.. 뭔가 확실히 잘못된거 같은데 ..

고수님들의 조언좀 ㅠ 그리고 PWM은 정수로 밖에 안되는 겁니까 ??


 

 

댓글 0

하드웨어 설계 및 개발에 대하여 개발자들이 자유롭게 토론하는 공간입니다.
- Q&A, 자유주재 토론, 관련 정보 공유
- 분야 : 마이크로프로세서 응용, 전기/전자(아날로그/디지털) 회로 설계, C/C++ 프로그래밍, 펌웨어,
         PCB Artwork, 트러블슈팅 등 하드웨어 설계에 관한 전반인 내용
※ 게시글에 맞는 분류를 선택하여 글을 작성해 주시면 쾌적한 사이트 운영에 많은 도움이 됩니다.
※ 하드웨어 인사이트는 회원들간의 거래정보를 게재할 뿐이지, 그 어떤 책임과 의무도 가지지 않습니다.

search
번호 분류 제목 글쓴이 조회 수 날짜
1627 자유주제 HOT메타세콰이어4 꿈꿍이 1463 2010.04.15
1626 자유주제 HOT마이크로 프로세서.. .4 흠칫 4018 2010.04.14
1625 자유주제 HOT사랑한다면 이들처럼..3 닉슨네 1669 2010.04.13
1624 자유주제 HOT난 이 옷이 싫단 말이다.7 닉슨네 1423 2010.04.13
1623 자유주제 HOT성격 테스트?13 닉슨네 1514 2010.04.13
1622 자유주제 HOT급할 때 이렇게 되어 있으면 어쩌실래요?9 닉슨네 1488 2010.04.13
1621 자유주제 HOT전자기학을 배우고 있는데 ㅜ.ㅜ9 별마로 5406 2010.04.13
1620 자유주제 HOT여러분은 어떠신가요?8 backhan1004 4264 2010.04.12
1619 자유주제 HOT왜 납일까요16 설가 5404 2010.04.11
1618 자유주제 HOT아이디어 쇼핑백6 fazz 1637 2010.04.11
1617 자유주제 HOT정회원이 안되는 이유는 뭘까요.ㅠ23 암소 4359 2010.04.11
1616 자유주제 HOT임베디드 전자쪽인데 컴공과목 배워야할 전공좀 가르쳐주세요.1 팁티바 4038 2010.04.10
1615 자유주제 HOT정회원 되고싶어요..8 하늘빛 4532 2010.04.10
1614 자유주제 HOT분야에 관한 질문3 BlueSmoke 3696 2010.04.09
1613 자유주제 HOT사진잘찍는방법1 배워사 1418 2010.04.07
1612 자유주제 HOT광센서3 아루아즈 5011 2010.04.07
1611 자유주제 HOT약지를 인두에 데였어요 ㅠㅠ8 코드만 5121 2010.04.06
1610 자유주제 HOTLED 큐브5 빛나는 영혼 10015 2010.04.06
1609 자유주제 HOT이과의힘...12 잠만보 1522 2010.04.06
1608 자유주제 HOT대륙의...6 나야~ 1326 2010.04.06
Prev 1 ... 49 50 51 52 53 54 55 56 57 58 ... 135 Next
  • 산에는 우정이 있다.
    - 텐진
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.