회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
마이크로프로세서 HOTATMEGA128을 이용한 BUCK-BOOST 컨버터 제어 질문입니다.(AD TO PWM DUTY) 전기사랑 2714 2010.04.07
427 마이크로프로세서 HOT모터제어 (고슈님들 도와주세요)4 꼬막소녀 1239 2010.04.06
426 마이크로프로세서 HOT두더지소스 만들기3 한자 1595 2010.04.06
425 마이크로프로세서 HOT통신케이블관련질문요..2 암소 720 2010.04.06
424 마이크로프로세서 HOTAtmega로 무선으로 데이터 송수신을 공부하고자하는데요.. 권용찬 1535 2010.04.04
423 마이크로프로세서 HOT8051 set 1bit제어 하려고 합니다.4 개똥껄레 1141 2010.04.04
422 마이크로프로세서 HOT초보입니다.1 키키오오 1292 2010.04.04
421 마이크로프로세서 HOT전원부회로3 키키오오 1463 2010.04.04
420 마이크로프로세서 HOTat89s51 메인보드(개발용)에 asm 다운로드후 동작이 안되요.2 gsi 1437 2010.04.03
419 마이크로프로세서 HOTAVR128 or ARM7,9으로 TFT- LCD제어할려고하는데 궁금한게 있습니다.2 marin_blues 1754 2010.04.03
418 마이크로프로세서 HOTavr보드 직접 만들어야 할까요?4 암소 1141 2010.04.01
417 마이크로프로세서 HOT8051 에 마이크로 C/os 포팅하려는데요1 나는타조 1214 2010.04.01
416 마이크로프로세서 HOT8051 에 마이크로 C/os 포팅하려는데요1 나는타조 9747 2010.04.01
415 마이크로프로세서 HOT80511 밀향 992 2010.04.01
414 마이크로프로세서 HOT길이가 다른 문자열 비교하는 방법?2 소스리 1295 2010.04.01
413 마이크로프로세서 HOTALL--11P32 그런건가 1033 2010.03.31
412 마이크로프로세서 HOT도트 매트릭스...2 배추배추배추 712 2010.03.30
411 마이크로프로세서 HOTproteus isis쓰시는분 도와주세요1 kusum 1910 2010.03.30
410 마이크로프로세서 HOT8051 완전 초보입니다....6 새로운하늘 1086 2010.03.29
409 마이크로프로세서 HOT간접지정방식알려주시겠어요?1 개똥껄레 1251 2010.03.28
Prev 1 ... 24 25 26 27 28 29 30 31 32 33 ... 50 Next
  • 약속을 지키는 최선의 방법은 약속을 하지 않는 것이다.
    - 나폴레옹
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.