회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
512 마이크로프로세서 HOT8051 기판없이 시뮬레이션 가능한 프로그램 있을까요?5 팁티바 1395 2010.04.10
511 마이크로프로세서 HOTir리모콘 컴파일러 질문드립니다. 야래 1145 2010.04.09
510 마이크로프로세서 HOTAVR 교재좀 부탁드려요8 빛의속도 1866 2010.04.09
509 펌웨어 & 코딩언어 HOTc언어 배우려는 초보입니다.9 빛의속도 1026 2010.04.09
508 마이크로프로세서 HOT센서를 제어할 수 있는 회로도를 어디서 구할 수 있나요?3 우기우기 1265 2010.04.07
507 마이크로프로세서 HOTir리모콘 컴파일러 질문드립니다. 야래 932 2010.04.07
506 마이크로프로세서 HOTATmega48을 이용해서 모터를 제어하는데..1 바람2 945 2010.04.07
505 마이크로프로세서 HOTspi 속도문의 눈티 1638 2010.04.07
마이크로프로세서 HOTATMEGA128을 이용한 BUCK-BOOST 컨버터 제어 질문입니다.(AD TO PWM DUTY) 전기사랑 2714 2010.04.07
503 마이크로프로세서 HOT모터제어 (고슈님들 도와주세요)4 꼬막소녀 1238 2010.04.06
502 마이크로프로세서 HOT두더지소스 만들기3 한자 1595 2010.04.06
501 마이크로프로세서 HOT통신케이블관련질문요..2 암소 720 2010.04.06
500 마이크로프로세서 HOTAtmega로 무선으로 데이터 송수신을 공부하고자하는데요.. 권용찬 1534 2010.04.04
499 마이크로프로세서 HOT8051 set 1bit제어 하려고 합니다.4 개똥껄레 1139 2010.04.04
498 마이크로프로세서 HOT초보입니다.1 키키오오 1292 2010.04.04
497 마이크로프로세서 HOT전원부회로3 키키오오 1462 2010.04.04
496 마이크로프로세서 HOTat89s51 메인보드(개발용)에 asm 다운로드후 동작이 안되요.2 gsi 1436 2010.04.03
495 마이크로프로세서 HOTAVR128 or ARM7,9으로 TFT- LCD제어할려고하는데 궁금한게 있습니다.2 marin_blues 1754 2010.04.03
494 마이크로프로세서 HOTavr보드 직접 만들어야 할까요?4 암소 1139 2010.04.01
493 마이크로프로세서 HOT8051 에 마이크로 C/os 포팅하려는데요1 나는타조 1214 2010.04.01
Prev 1 ... 28 29 30 31 32 33 34 35 36 37 ... 58 Next
  • 사람은 자기가 한 약속을 지킬만한 좋은 기억력을 가져야 한다.
    - 니체
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.