2014/08/14 16:56

12F675에 대한 이야기 더하기 아두이노 전원부 이야기.

 12F675가 만든 시기에 따라서 특성이 약간 다르다는 것은 확인. 칩의 맨아래 숫자는 yyww라는 4자리 숫자인데 년도와 만든 주(week)를 표시. 묘하게 여러개 구입한 칩에 2010년도와 2013년도의 제품이 혼합되어 있었다.


 가장 주목할만한 특성은 PWM의 노이즈로 2010년도는 1uf의 콘덴서로 잡아내기 힘든데 반해, 2013년도는 많이 줄어든 특성을 보임. 그리고 다르게 내장 클럭 발생기의 정확도는 2010년도가 정확해서 아주 칼같다. 하지만 2013년도는 약간 더 클럭이 높은 상태로 설정되어 있어서 560Hz까지의 범위에 이르는 클럭이 PMW으로 나온다.


 결국 2010년도의 노이즈 문제를 잡을려면 트랜지스터의 C와 E단에 1~4uF의 콘덴서를 붙어주는게 나은 것 같다. 1uF도 많이 작아지기는 하는데 여전히 좀 들린다. 노이즈 문제에 대해서는 좀 더 개선해야 할 것 같다. 좀 더 실험해본 결과, 1uF으로는 어림도 없다는 결론을 내림. 2uF나 3.3uF정도까지 고려해야함. 4.7uF은 어떨지 모르겠으나 현재론 칩의 특성이기도 하지만 PWM관련이기 보다는 신호적 특성이고 콘덴서 붙이는 것 말고는 빠른 대안은 없다는 것. 지금 현재는 2uF으로 다른 칩에서 소음을 많이 줄임.


 실험용 이외로 또 하나를 만들어 둔 것으로 2013년도 생산칩을 이용해서 내부 케이스 쿨링팬에 대충 붙여서 소음도 적고 잘 돌아가는 것을 여차저차 확인.



 그리고 그동안 못했던 아두이노의 전원부에 대한 이야기가 있는데, 만약 USB와 외부전원을 동시에 연결하면 어디의 전원이 사용될까라는 의문에 대한 답을 얻었다. 전원부에는 OPAMP가 있어서 전원부에서 얻어지는 전원이 7.5V이상이면 USB 전원을 사용하지 않고 외부 전원을 사용하며 USB 신호연결은 가능하다. 전원만 차단되는 것으로 외부 전원을 연결시켜도 문제없이 USB로 연결할 수 있다.


 

 대충 전원의 회로는 외부 전원의 분압된 전압과 아두이노 보드의 3.3V를 비교해서 분압된 전압에서 3.3을 빼서 그 결과 음수가 나오면 하단의 P패널 FET를 동작시켜 USB 전압을 받고 아니면 외부 전원을 사용하는 방식. 입력 전압이 3.3의 두배이거나 크면 OPAMP의 결과값이 0보다 크거나 같아져서 USB전원은 차단된다. 아마도 안정적인 공급을 위해 표준화된 전압인 7.5V라고 잡은 듯하고 6V는 아슬아슬하다. 6,7.5,9,12이런식의 표준화된 전압이 주로 사용되는 이유에서 그런 것 같다.


저작자 표시 비영리 변경 금지
Trackback 0 Comment 0
2014/08/09 13:23

Code Block for arduino.

 아두이노의 기본툴은 자바 기반이라 답답하고 또 답답한 경우가 많은데, code block for arduino는 이런 문제를 해결해준다.




 새로운 프로젝트를 열면 다음과 같은 화면에서 아두이노 프로젝트를 만들 수 있다. 작업을 위한 COM포트를 설정할 수도 있고 등등의 작업이 가능하고 가장 중요한 것은 자동완성이 지원된다는 것. 3글자 정도를 입력하면 자동완성이 뜨고 길게 입력하지 않고 입력이 가능하다.


 소스는 기본 아두이노툴과 완전히 같은데 다른 점 하나는 헤더가 윗줄에 표시된다. 이 헤더를 제거하면 아두이노의 정식툴과 같은 소스가 된다. 플래시 업로더가 약간 다른 것 같은데 약간의 차이가 있는 것 같은데 확실히는 모르겠다.


 아쉬운 점은 이 툴은 윈도우즈 전용이고 메뉴들이 한글이 아닌 영문으로 몽땅 표시된다는 것. 하지만 코드 편집에서는 기본툴보다는 낫다.


 오픈소스이며,

http://sourceforge.net/projects/arduinodev/files/?source=navbar 에서 다운로드가 가능. 35메가 정도의 용량을 가진다. 컴파일러가 포함되어 있어서 용량이 좀 크다.

 

 아누이노의 컴파일러가 자바 정도라고 생각하고 있었는데, 그게 아니고 그냥 C++이란걸 다시금 알았다. 문법이 조금 달라도 언어는 같으니.


 프로젝트는 폴더단위로 만들어지며, 기본 템플릿 소스가 만들어진다.


저작자 표시 비영리 변경 금지
Trackback 0 Comment 0
2014/08/08 23:50

아두이노를 이용한 쿨링팬 컨트롤.

 간단하게 아두이노를 이용한 쿨링팬 컨트롤. 센서로는 NTC-502F397을 사용한다고 가정하고, 써미스터는 접지쪽에 연결하고 저항 2.2k를 VCC쪽에 연결하는 방식을 택했다.

 저항을 계산해내는 방식에 전압에 의지하는 공식은 오차를 동반하는 것 같아 저항을 기준으로 하는 공식으로 변경했다. 이 공식을 사용하면 전압의 변화와 상관없이 저항을 제대로 산출할 수 있다. 저항은 1%오차의 푸르딩딩한 저항을 사용하면 좋다.


/*
  Fan PWM Control by Temperature for arduino uno.

*/

int PinFanPWM=9;
int Pinanalog=0;

int Temp_low=20,Temp_high=30;         // min, max

long x=0, Resister_temp=2200;         // 2.2k upper resister with thermistor
long th=0;
float ce=0;

int FanPWMBase=77; // 30% in 255;
int FanPWMInc=(255-FanPWMBase)/(Temp_high-Temp_low)+1;  // (255-77)/10
int TempVal;
int FanPWM;

void setup()
{
    pinMode(PinFanPWM,OUTPUT);
    Serial.begin(9600);
}

void loop()
{
    // get temperature from your sensor
    TempVal=analogRead(Pinanalog);
    th = Resister_temp * TempVal / (1024-TempVal);  // get resister value.
    // ntc-502F397 formula
    ce = ((log(4.0*th - 3000.0) / (-0.024119329) + 473)-32.0)/1.8;

    // calc PWM Value
    TempVal=(int)ce;
    Serial.println(TempVal);
    if (TempVal<Temp_low) {
        FanPWM=FanPWMBase;
    } else {
        FanPWM=FanPWMBase+(TempVal-Temp_low)*FanPWMInc;
        if (FanPWM>255) {
            FanPWM=255;
        }
    }
    analogWrite(PinFanPWM,FanPWM);
    //Serial.println(FanPWM);
}


 아직 실험해보지 않은 코드로 PWM값과 온도값이 시리얼포트로 전송된다. 이것은 실험후 지워질 예정.


 20도에서 30도의 영역으로 20도에서는 30%PWM으로 30도에서는 풀로드가 된다. 트랜지스터 등을 이용해서 12V를 공급하는 방식으로 하면 된다.


 코드에 실수가 있어서 약간의 변경. ce를 TempVal로 변환하도록 조정.


 테스트를 해본 결과. 아두이노가 온도가 더 정확. 브레드보드의 접점의 금속탓인가. 여튼 더 정확해보이는 값이 나오는 것 같다. 아날로그 온도계만 있어서 정확한 온도는 모르겠다. PIC의 테이블 연산치보다는 정확한 듯 싶다.


 PWM도 정상적으로 값이 뜨는 것을 확인.


 아두이노의 온도관련 실험은 이걸루 끝 =_=;




저작자 표시 비영리 변경 금지
Trackback 0 Comment 0


티스토리 툴바