==========================================================================================

센서

==========================================================================================

<AVR2560>


PT100옴 (XTR 119?...:BB회사)

써머커플러 (MAX...) - 일반 선 연결 X(온도 보상 도선 연결 해야 함)

:전용 드라이버사용 I2C통신으로 값 받음


=온도센서(써미스터)


<ADC.H>


#ifndef
 __ADC_H__
#define __ADC_H__
//#include "avr2560.h"
#include <avr/io.h>
#include <util/delay.h>

#define DADC 1

//#define A 1.845012194
//#define B 2.690325175
//#define C 0.948665543

#define A 2.658310929
#define B 2.94551768
#define C 11.77139449

#define BCOEFFICIENT 3950    // The beta coefficient of the thermistor (usually 3000-4000)
#define THERMISTORNOMINAL 10000  // resistance at 25 degrees C
#define TEMPERATURENOMINAL 25  // temp. for nominal resistance (almost always 25 C)
#define SERIESRESISTOR 10000  // the value of the 'other' resistor

//extern int portop;

void ADC_Init(void);
char * Cvt_Char(int , char *);
float ADC_Read(void);

#endif //__ADC_H__
 


<ADC.C>

#include "adc.h"



void ADC_Init(void)
{  
  
//DDRF = 0x80;
  //ACSR = (1<<ACBG) |(1<<ACIS1) |(1<<ACIS0); //0b01000011; // + 입력 = 1.1V
  ADMUX = (1<<REFS0)|(0<<MUX4)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0);//0b01000000;////(1<<REFS1) | (1<<REFS0);   //-입력 : ADC4(JTAGEN X) => ADC1
  ADCSRA =  (1<<ADEN) | (1<<ADSC) | (1<<ADATE);//0b11100000;////0x00;      //ADEN : 0
  ADCSRB = 0x00;//(1<<ACME);//0b01000000; //ACME : 1
  
  
return;
}

char * Cvt_Char(int T, char * cTemp)
{
  
unsigned short T2;
  
char tmp1;
  
char tmp2;

  
if(T < 0)
  {
    T2 
= (~T+1);
  }
  
else
  {
    T2 
= T;
  }

  tmp1 
= (char)(T2/10);
  tmp2 
= (char)(T2%10);
  
  
if(0 <= T)
    cTemp[
0= ' ';
  
else
    cTemp[0= '-';

  
if(0 == tmp1)
    cTemp[
1= ' ';
  
else
    cTemp[1= tmp1 + '0';

  cTemp[
2= tmp2 + '0';

  
return cTemp;
}

// calculate resistor value
float fCalcNtc(int wADCVal)  // from ADC

  
float fRntc;

    
//fRntc = 10000 *  (float) wADCVal / ( 1023.0  - (float) wADCVal);  // 10000 = pullup resistor
  fRntc = 10000 *  (( 1023.0  - (float) wADCVal) / (float) wADCVal );  // 10000 = pullup resistor

  return(fRntc);
}


// calculate temperature from resistorvalue
float fCalcTemp( float fRntc)
{
  
float fTemp;

    fTemp 
= (1.0 / ( (log(fRntc/THERMISTORNOMINAL))/BCOEFFICIENT  + 1.0/298.0)) - 273.0//log = ln 

  //kT = 1.0 / ((1.0 / (273.15 + 25.0)) + (1.0 / 4200.0) * log (sensorR / 10000.0));
  return( fTemp);
}


float ADC_Read(void)
{
  
unsigned char i;
  
int sum;
  
volatile unsigned int uiCnt;
  
float sensorV;
  
float sensorR;
  
float kT;
  
float cT;

  sum 
= 0;
  
for(i = 0; i<32; ++i) //AVERAGE
  {
    ADCSRA 
=  (1<<ADEN) | (1<<ADSC) |(1<<ADIF) |(1<<ADPS2) |(1<<ADPS0);//0b11010101;
    
    
while((ADCSRA & (1<<ADIF)) != (1<<ADIF));
      sum +
= (((int)ADCL) + (((int)ADCH) << 8)); // 10 bit - ADCL부터 읽어야 함..
      //sum += ((((int)ADCH)<<8) + ((int)ADCL)); // 10 bit - ADCH 부터 읽으면 값 변경 안됨
    
    
//DELAY(30000);
    _delay_ms(300);
  }
  
  
sum >>= 5//AVERAGE // sum = sum / 16  ==  sum /= 16; 

  //sensorV = (sum*5.0/1023.0);
  //sensorV = sum*5.0/512.0;
  //10k
  //sensorR = (( 5.0 * 10000.0 )/ sensorV ) - 10000.0;
  //kT = 1.0 / ((1.0 / (273.15 + 25.0)) + (1.0 / 3435.0) * log (sensorR / 10000.0));
  //kT = 1.0/(A + (B*log(sensorR)) + (C*log(sensorR)*log(sensorR)*log(sensorR))); // Stein Hart
  //kT = 1.0 / ((1.0 / (273.15 + 25.0)) + (1.0 / 4200.0) * log (sensorR / 10000.0));
  
  
// 5k
  //sensorR = (( 5.0 * 5000.0 )/ sensorV ) - 5000.0;
  //sensorR = (500*sensorV) / (5-sensorV);

  //kT = 1.0 / ((1.0 / (273.15 + 25.0)) + (1.0/3324.0) * log (sensorR / 5000.0)); // B parameter
  //kT = 1.0/(A + (B*log(sensorR)) + (C*log(sensorR)*log(sensorR)*log(sensorR))); // Stein Hart

  //cT = kT-273.15;

  sensorR = fCalcNtc(sum);      // calculate temperature from resistorvalue 
  cT = fCalcTemp(sensorR);      // calculate temperature from resistorvalue
  

  
return cT;
}




=결과




<추가>

=온도 경보 장치 ( WIFI 연결 => IOT 접목)

TCP/IP


-네비게이션(GPS - 센턴스로 통신)

-수온 체크(선박용)

$

- : DONT CARE

- : DONT CARE

MTW

,

x.x : x.. .x

,

C : 섭씨

*hh : checksum


NMEA0183







'2015 스마트 콘트롤러 > 업무일지' 카테고리의 다른 글

20150902  (0) 2015.09.03
20150901  (0) 2015.09.01
20150831  (0) 2015.08.31
20150828  (0) 2015.08.30
20150828  (0) 2015.08.28
Posted by ahj333
,

==========================================================================================

센서

==========================================================================================

<AVR2560>


=온도센서(NTC) 10k






전압분배의 법칙


V2 = R2/(R1+R2)*V





#include <avr/io.h>
#include <util/delay.h>
#include <math.h>

#define BCOEFFICIENT 3950    // The beta coefficient of the thermistor (usually 3000-4000)
#define THERMISTORNOMINAL 10000  // resistance at 25 degrees C
#define TEMPERATURENOMINAL 25  // temp. for nominal resistance (almost always 25 C)
#define SERIESRESISTOR 10000  // the value of the 'other' resistor


void ADC_ONE(void)
{
 ADCSRA 
= 0x00// 일종의 초기화 전 ... 상태 안정하게.. INIT VALUE
 ADCSRA = 0x85//Enable adc, 500kHz 101 32분주 (( `
 ADCSRB = 0x00
 ADMUX 
= 0x40//avcc를 기준전압으로, select ADC0
}

int main(void)
{
  
unsigned char i;
  
volatile int sum;
  
unsigned int tsum ;
  
double Ther_Total = 0
  
float steinhart;
  
  DDRF 
= 0xFE;   // F0 : input
  ADC_ONE();    // ADC 단일 입력 모드
   while(1)
  {
    sum 
= 0;
    tsum 
= 0;
    Ther_Total 
= 0;
    
for(i=0; i<100; i++)  // ADC Data 100개를 수집하여 합을 구함
    { 
      ADCSRA 
= 0b11010101;       
              
      
while((ADCSRA & 0x10) != 0x10); 
 
      sum 
= ADC; 
      tsum +
= sum;       
 
      _delay_ms(
10); 
    }
// End of for 
    
    tsum /
= 100;      // 수집한 데이터의 합을 100으로 나누어서 평균을 구함.

    // convert the value to resistance
    tsum = 1023 / tsum - 1;
    tsum 
= SERIESRESISTOR  / tsum;
    
// Thermistor resistance = tsum
     
    steinhart 
= tsum / THERMISTORNOMINAL;           // (R/Ro)
    steinhart = log(steinhart);                      // ln(R/Ro)
    steinhart /= BCOEFFICIENT;                       // 1/B * ln(R/Ro)
    steinhart += 1.0 / (TEMPERATURENOMINAL + 273.15);   // + (1/To)
    steinhart = 1.0 / steinhart;                     // Invert
    steinhart -= 273.15;                             // convert to C
  }// End of while
}


'2015 스마트 콘트롤러 > 업무일지' 카테고리의 다른 글

20150903  (2) 2015.09.04
20150901  (0) 2015.09.01
20150831  (0) 2015.08.31
20150828  (0) 2015.08.30
20150828  (0) 2015.08.28
Posted by ahj333
,

==========================================================================================

센서

==========================================================================================

<AVR2560>



=계기판(자동차, 선박) RPM 디스플레이(스테핑모터)


=센서

:감각기관

온도센서       : LM35 반도체 소자

                : NTC(써미스터) -    PTC :

                                        NTC : 온도 상승 시 저항값 하강(10K, 5K - 기준온도 섭씨 25도)

상온 : 25도

표준온도 : 0도

절대온도(K) : C + 273


반도체 소자 만들 때 표준온도 : 300K 약 섭씨26도


- 아두이노 사이트에서 검색하여 사용(나름 검증되어있으므로)


1. ADC

2. TWI / SPI






-ISP : 동기식 직렬통신

MASTER -> -CLK -> SLAVE

-MOSI

-MISO

/RESET

VCC

-GND


DIP SWITCH 2개

1번 ON -> 보드에 아답터 꽂으면 안됨(전원 인가 금지)

ISP에서 보드에 전원을 공급 + 아답터에서 전원 공급 => 충돌 => 보드 폭발(탄탈 커패시터 잘 나감)

(오실로스코프 연결 조심 - 완전 절연 안되서 사고 많이 생김)

(DSP 모터제어 - 에뮬레이터 날림)




온도

초음파

일산화탄소



=SPI

CLK

MISO

MOSI

CS


-1:다 통신

1. 선 하나 : CS , /CS => SLAVE 두 개 연결



2. 선 두 개 : /CS, /CS => SLAVE 두 개 연결



(UART - 1:1 통신)



=TWI (=I2C)


=온도센서(NTC) 10k



'2015 스마트 콘트롤러 > 업무일지' 카테고리의 다른 글

20150903  (2) 2015.09.04
20150902  (0) 2015.09.03
20150831  (0) 2015.08.31
20150828  (0) 2015.08.30
20150828  (0) 2015.08.28
Posted by ahj333
,

==========================================================================================

AVR

==========================================================================================

<AVR2560>




==스테핑 모터

=서보모터 : 정해진 위치(몇도)까지 동작


=스테핑 모터

:선풍기 회전

:시계(아날로그 시계 초침)


ULN2803APC

:달링턴 TR ARRAY


전용드라이버

:증폭 ( 전압레벨을 맞춰주는 목적이 큼 )


극수에따라 지금상태에서 몇도씩 회전 (자동차 계기판 , 시계, )

:분해능

5상 : 0,72도

2상 : 1.8도


:고정도 위치결정

3분 : 0.05도


Step 각

:Stemppint Moter가 위치 결정할 수 있는 최소 회전각도


펄스



(빛감지해서 주파수 알아냄 - 고속/ 저속 판단)

(실험실 데이터 테이블화로



=

-1920년 영국 군함에 처음 사용하기 시작하였으며,  어뢰, 포신의 방향 조정에 사용  step-by-step 모터 라 불리었다.-

-미국에서는 STEP MOTOR, STEPPER MOTOR, 또는 STEPPER, 펄스모터 , 보전전동기라 불리어짐. 그 후 세계적으로 STEPPING MOTOR 사용되어짐.

-스테핑 모터는 기계적 구조나 전자회로가 간단하고, 디지털 제어에 적합한 모터이다.  긴거리의 위치제어는 서보가 유리하지만 짧은 거리의 위치제어는 스테핑 모터가 빠른 응답특성을 나타낸다.  또한 가격이 저렴하기 때문에 저용량, 초고정밀도를 필요하지 않는 곳에 사용되어짐.

-1975년도 프린터, 플로터, 복사기, 전동타자기등  OA 기기등으로 인하여 사용처가 많아짐.

-현재 5상 모터의 2만 펄스로 구동하는 모터가 개발되어 사용되고 있음. (고속, 정밀도 향상, 스텝각 0.45도)



=2상 : 1.8 도/1 STEP - 6 PIN(VCC/GND/A/A'/B/B' ( 5상 : 0.72 도/1 STEP - 12 PIN)


-STEP 각


-Pulse


-각도제어 : 입력 펄스 수

-속도제어 : 주파수



-motor의 총 회전각은 입력 pulse수의 총 수에 비례하고, motor의 회전속도는 초(sec)당 입력 pulse 수(PPS)에 비례

-1 step 당 각도 오차가 ±3분(0.05°)이내이며 회전각 오차는 step마다 누적되지 않는다.§


-회전각 검출을 위한 feedback이 불필요하여, 제어계가 간단해서 가격이 상대적으로 저렴하다.

-DC motor등과 같이 brush교환 등과 같은 보수를 필요로 하지 않고 신뢰성이 높다.

-모터축에 직결하므로써 초저속 동기 회전이 가능하다.

-기동 및 정지 응답성이 양호하므로 servo motor로써 사용가능하다.

-어느 주파수에서는 진동, 공진 현상이 발생하기 쉽고, 관성이 있는 부하(선풍기 돌리기, 잡기)에 약하다.

-고속 운전시에 탈조(선풍기 목잡아서 ‘딱딱딱’소리 나는 것)하기 쉽다.

-보통의 driver로 구동시 권선의 인덕턴스 영향으로 권선에 충분한 전류를 흘리게 할 수 없기 때문에 pulse rate가 상승함에 따라 torque가 저하하며 DC motor에 비해 효율이 떨어진다.





OPENLOOP : 오픈루프(펄스를 차례로 123412341234...)


에어컨 : EEV (전자 팽창 밸브)




(공진 - 공진 주파수( 다리 설계, ..유리잔 깨짐)






-증폭기 ( 3A까지 )


-(전용드라이버X)드라이버 만들어 사용 => 원가 절감




2상 : 6가닥

5상 : 12가닥








-

구동회로는 제어회로로부터 출력된 구동신호에 의해서 모터의 각상에 전류가 흐르도록 하는 회로이다. 주요 구성은 제어회로부터 정회전 혹은 역회전 구동펄스를 입력 받아 각상의 스위칭 소자에 각각의 여자방식에 따른 스위칭 패턴을 발생시키는 상여자구동부와 이러한 스위칭 패턴을 입력 받아 모터의 각 상을 순차적으로 여자시키는 전력변환부로 구성되어 있다. 여기서는 모터 각 상의 권선에 흐르는 전류의 방향에 따라서 유니폴라(UNIPOLAR)구동방식과 바이폴라(BIPOLAR)구동방식으로 분류된다.


=4S42Q - H120 - 36 - S









=

-탈조현상 : 각 상의 권선전류에 의해서 발생되는 고정자측의 회전자계가 너무나 빠른 속도로 회전하기 때문에 특정한 관성을 갖고 있는 회전자가 이를 쫓아가지 못하게 되는 현상

-슬루우 영역 : 인입토오크곡선과 탈출토오크곡선 사이의 영역을 슬로우영역이라 한다. 최대자기동주파수 이상의 구동펄스를 스텝적(일시적)으로 인가하지 않고 서서히 증가시키면(또는 감소) 최대자기동주파수 이상의 구동주파수로도 탈조를 일으키지 않고 모터를 회전시킬 수 있다. 이와 같은 형태로 운전하게 되면 모터는 최대응답주파수 이하의 주파수 영역에서는 운전이 가능함을 알 수 있다.  이와 같이 최대자기동주파수 이상에서 최대응답주파수 미만의 운전 가능한 주파수 영역을 슬루우영역이라 한다.

-인입토오크 : 동기회전으로 인입할 때의 최대토오크를 나타낸다. 즉, 스텝입력에 의해서 나타낼 수 있는 최대토오크를 말한다.

-탈출토오크 : 자기동영역을 초과해서 스태핑모터가 동기를 잃지 않고, 발생할 수 있는 최대토오크를 말한다.

-여자시 최대정지토오크(홀딩토오크) : 정격전류를 유지하고, 출력측에 외부토오크를 가하여 각도의 변위가 생겼을 때에 발생하는 최대 토오크를 말한다.

-주파수 : 스테핑 모터를 구동하는 신호를 단위시간당의 펄스수로 표시한다    [PPS ; Pulse Per Second]

-자기동영역 : 외부에 부여되는 신호에 동기해서 탈조(동기이탈)현상이 일어나지 않으면서 기동, 정지, 역전을 할 수 있다. 즉, 순간적으로 구동펄스를 인가하여도 모터는 정확히 기동, 정지, 역전을 할 수 있는 주파수 영역을 나타낸다. 무부하 상태에서 이와 같이 자기동 할 수 있는 최대의 구동주파수를 “최대자기동주파수”라고 한다. 이러한 최대 자기동주파수 이상의 주파수를 갖는 구동펄스를 급격히 모터에 가해주면 탈조되어 모터는 정지상태를 유지하게 된다.





 




=에어컨 : 냉매 압축 응축 => 팽창 (열을 흡수) => 밸브 열고 닫을 때 스테핑 모터(Eev모터)


=



=



=SE-SM243





=UNL2803




=회로








<MAIN.C>


#include <avr/io.h>
#include <stdlib.h>
#include <util/delay.h>

int main(void)
{
  
int i = 0;
  DDRB 
= 0xFF;
  PORTB 
= 0x00;
  
while(1)
  {
    PORTB 
= 0x03;
    
for(i=0; i < 200; ++i)
    {
      _delay_ms(
500);
      
      PORTB 
<<= 1;    
      
if(PORTB == 0x30)
      {
        PORTB 
= 0x03;      
      }
    }

    PORTB 
= 0x0C;
    
for(i=0; i < 200; ++i)
    {
      _delay_ms(
500);
      PORTB 
>>= 1;    
      
if(PORTB == 0x00)
      {
        PORTB 
= 0x0C;      
      }
    }
  }
}


=동영상




'2015 스마트 콘트롤러 > 업무일지' 카테고리의 다른 글

20150902  (0) 2015.09.03
20150901  (0) 2015.09.01
20150828  (0) 2015.08.30
20150828  (0) 2015.08.28
20150826  (0) 2015.08.26
Posted by ahj333
,

==========================================================================================

NETWORK

==========================================================================================



<ARM>




= 발표

- PPT 에는 핵심 기술만 발표


- 듣기 능력 키우기(비판적인 시각으로 듣기)


- 5분 X 사람수 시간만큼의 내용인가?


- 특정 제스처 안됨(내용을 기억하도록)





=포트폴리오


-도서관리

-원라인

-패킷아날라이저

-select를 이용한 멀티채팅


+ARM

+ASSEMBLY

+(영상, C++, AVR)

+시리얼(RFID)


+AVR

+C#



=주파수 반드시 필요(CPU 밥) => 시간을 부여 => 기능을 가짐


=Mster Clock Controller







=분주비 ( 높은 Hz - > 낮은 Hz)


=수동회로(저항)

=능동회로(TTL) - CLOCK신호 필요





=주파수 1. 외부 납땜 / 2. 내부 저주파용 내장










=ARM91SAM7S256 : FLASH : 256Kbyte

SRAM : 64Kbyte


=p20 : Memory Map


=Flash(코드영역) <- remap -> SRAM




=>코드 영역 중 REMAP있음 => SRAM이 0번지부터 시작







=OS entry 포인트 : main()

=펌웨어  assembly  코드 사용 : main()이 제일 처음 시작되는 위치 아님(자동차 시동걸어 기계들 작동후(cStartup.S + Lowlevel.c => 주파수 생성) 운전(main()) 가능)


<어셈블러 확장자>

.s      : 리눅스

.asm   : 윈도우







=AVR은 소스코드 제공 없이 .o(오브젝트)파일만 제공되어 컴파일 링크시 자동으로 링크되어 실행파일 만들어짐


'2015 스마트 콘트롤러 > 업무일지' 카테고리의 다른 글

20150901  (0) 2015.09.01
20150831  (0) 2015.08.31
20150828  (0) 2015.08.28
20150826  (0) 2015.08.26
20150825  (0) 2015.08.25
Posted by ahj333
,