회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
35 Software & IDEs HOT빠쑝님께서 올리신 api 통신함수에 대한 질문입니다.1 momozizi 1038 2010.11.17
34 Software & IDEs HOTcrc 계산1 푸른하늘은하수 4062 2010.11.13
33 Software & IDEs HOT어떤언어를 배우는것이 가장 쉬운가요?4 멍치 1078 2010.10.29
32 Software & IDEs HOTVC++로 만들껀데요. ^^4 이란주 973 2010.08.30
31 Software & IDEs HOTbin파일에관한 질문드립니다.1 왕초보틱 958 2010.08.26
30 Software & IDEs HOT[matlab] 사용했던 변수 저장에 관하여 키핀 973 2010.08.05
29 Software & IDEs HOT마이크로 컨트롤러 질문???5 진구짱 972 2010.06.04
28 Software & IDEs HOT게임만들기 전!!2 잉어aa 1117 2010.05.29
27 Software & IDEs HOTData = Data * 0x100 무슨 의미 인가요4 파인 윤 1185 2010.05.22
26 Software & IDEs HOT리모콘 모듈을 제작해주는 곳이 있을까요?2 철방이 949 2010.05.11
25 Software & IDEs HOT13 jeonity 894 2010.04.30
24 Software & IDEs HOT지그비 ZBS-200 프로그램 질문입니다!!2 소울 1723 2010.04.11
23 Software & IDEs HOTVisual C++ 6.0 프로그램이 비스타 작동 안하나요?6 fairlady 1291 2010.03.30
22 Software & IDEs HOT안녕하세요 혹시 소스나 이전에 프로그래밍되있는것을 찾을곳이있을까요?3 꿀이 887 2010.03.30
21 Software & IDEs HOT초보에게 추천해주실 트레이닝 키트와 서적부탁드릴게요4 꿀이 916 2010.03.29
20 Software & IDEs HOT저기 레포트점 도와주세요1 메리짱 780 2010.03.22
19 Software & IDEs HOT반도체 설계/개발 관련 프로그래밍 언어는 어떤 것이 있는지5 트리스탄 1477 2010.03.19
18 Software & IDEs HOT오브젝트씨..쓰시는분들 볼트와너트 1147 2010.03.12
17 Software & IDEs HOT이해하기 쉬운 자료구좀 책좀 소개좀 해주세요..9 남보살 1022 2010.03.02
16 Software & IDEs HOTatmega128에 대해 알기 쉬운 책 좀 알려주세요..5 마이무따이가 1471 2010.02.03
  • 일을 몰고 가라. 그렇지 않으면 일이 너를 몰고 갈 것이다.
    - 프랭클린
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.