회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
66 펌웨어 & 코딩언어 HOT텍트로닉스(tektronix) 오실로스코프 질문드려요~~1 파괴지왕 1168 2010.06.24
65 펌웨어 & 코딩언어 HOTspice 프로그램을 만들고 싶습니다1 TreeOfDream 978 2010.06.21
64 펌웨어 & 코딩언어 HOTC언어 초보에요 ㅠㅠ 이쪽부분 간소화할려고하는데..조언좀..11 다크소마 1448 2010.06.19
63 펌웨어 & 코딩언어 HOTMFC 를 공부중입니다 API를 시작해야 하는데..3 TreeOfDream 1123 2010.06.11
62 펌웨어 & 코딩언어 HOT펌웨어 엔지니어입니다. 윈도우응용프로그램 MFC하고싶은데...6 상하이찬 1569 2010.06.02
61 펌웨어 & 코딩언어 HOT리눅스 기반 어셈블리어 작성했는데 자꾸 'command not found'라 뜨네요......2 하늘위의 성 1409 2010.05.30
60 펌웨어 & 코딩언어 HOT코드비젼 소스 설명좀 부탁드립니다 ㅠㅠ1 vsvm 2190 2010.05.24
59 펌웨어 & 코딩언어 HOT맥스포사의 mtm-cm3000 으로 리모콘 모듈이 조종 가능한가요? 철방이 880 2010.05.11
58 펌웨어 & 코딩언어 HOT코드비젼으로 컴파일해봤습니다...도움좀 주세요.4 푸후 1219 2010.05.04
57 펌웨어 & 코딩언어 HOT다시 작성합니다. MSDN 도움말 문제입니다. TreeOfDream 883 2010.04.29
56 펌웨어 & 코딩언어 HOT어셈블 도와주세요 ㅠㅠ1 마왕님 1033 2010.04.26
55 펌웨어 & 코딩언어 HOT왕초보 c언어 질문이요11 hshyo 1053 2010.04.19
54 펌웨어 & 코딩언어 HOT마이컴 제어하는 C언어 학습이 어디까지 이루어져야 할까요?8 봄날 1434 2010.04.17
53 펌웨어 & 코딩언어 HOT액세스 지정자에 대해서 궁금한 점이 있습니다. TreeOfDream 902 2010.04.17
52 펌웨어 & 코딩언어 HOT조이스틱 관련 Firmware,Driver 관련 조언 부탁드립니다.2 루키키 1094 2010.04.14
51 펌웨어 & 코딩언어 HOTc언어 배우려는 초보입니다.9 빛의속도 1027 2010.04.09
50 펌웨어 & 코딩언어 HOTzigbee 통신 프로그램 질문입니다!!5 소울 2451 2010.04.01
49 펌웨어 & 코딩언어 HOT비쥬얼 스튜디오 6.0에 관해서..3 꿇단지 1061 2010.03.24
48 펌웨어 & 코딩언어 HOTc언어 왕초보입니다. 좋은책 추천좀 해주세요10 circuit 1296 2010.03.15
47 펌웨어 & 코딩언어 HOT8051과 일반 C와 많이 차이나나요?5 개똥껄레 1098 2010.02.20
  • 우유부단한 것만이 습관으로 되어 있는 사람보다 더 비참한 사람은 없다
    - 제임스
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.