Analog Signal 의 PWM 출력 By hyaoo
기본배경 음성 및 가변저항(Analog Signal)을 디지털 데이터로 변환 후 PWM의 듀얼비 조절하여 스피커에 출력한다. 사람의 음성 주파수 300~3400hz 3400hz대까지 보존하려면 최소 6400hz으로샘플링 //대략 약간의 마진을 두어 8Khz 샘플로 나누어 각 샘플마다 진폭값을 부여하는 것으로, 이를 펼스진폭변조(Pulse Amplitude Modulation)방식이라고도 한다.
환경설정
ADC (Analog-to-Digital Converter) sampling time? 아날로그 신호의 시간 축으로 조밀한 간격으로 디지털 값으로 변화시킬 것인가 결정하는 단위. 샘플링 시간은 변환하고자 하는 아날로그 신호에 있는 가장 빠른 주파수보다 최소 2배 이상 빠른 주파수로 샘플링 시간을 결정해야 함. 2407은 2.6MHz[375ns]까지 샘플링 시간결정.
ADC (Analog-to-Digital Converter) 양자화 단위 아날로그 신호의 신호 크기 축으로 얼마나 조밀한 간격으로 디지털 값을 바꿀 것인가를 결정하는 단위. 2407에서는 10비트 양자화 단계 제공 210 = 1024 단계 0~1023
ADC (Analog-to-Digital Converter) 2407에서의 기능 16개의 채널제공 각 채널에 대한 A/D 변환 버퍼 레지스터제공 사용자가 각 채널의 순서를 지정변환 (auto-sequencing capability) 8개씩 2개로 나누어 독립적으로 순서 설정 (daul sequencer mode)
PWM (Pulse Width Modulation) Duty cycle 전체 주기에서 하이 레벨의 펄스 폭의 %
PWM (Pulse Width Modulation)
Programming (ADC) void c_int2(void) // EVA의 timer1 인터럽트 서비스 루틴 { DI; .. AD0 = (RESULT0>>6)&0x03FF; ADCTRL2 |= 0x4200; PADATDIR = 0xff00 | AD0; PEDATDIR = 0xff00 | ((AD0 >> 8)&0x0003); EI; }
Programming (ADC) void main(void) { // Timer interrupt setting .. EVA_ENABLE; GPTCONA |= 0x0100; T1DISABLE; T1CON = 0x5700; // continue_up_cnt, x/128, internal_clk T1PR = 62499; // 5Hz T1CNT = 0; T1ENABLE; .. SET(EVAIMRA,T1PINT_ENA); // Timer1 Period Int.를 사용
Programming (ADC) .. // ADC setting ADC_ENABLE; ADCTRL1 = 0x4000; NOP; // delay ADCTRL1 = 0x2092; MAXCONV= 0x0003; // 4 channels CHSELSEQ1 = 0x0000; // 0,0,0,0 순서로 변환 ADCTRL2 |= 0x4700; SET(IMR,INT2_MASK|INT1_MASK); EI; ..
Programming (PWM) SET_PWM1; ACTRA = 0x0009; T1PR = (CPU_clk / PWM_PERIOD); // PWM_PERIOD = ADC_PERIOD; CMPR1 = (unsigned int) (T1PR * AD_DATA); // AD_DATA = (AD0/1024)*100; COMCONA = 0xc200; T1CON = 0xD040;
예상결과 일상의 모든 신호들을 digital data화시켜 여럿 일상DATA를 활용 가능함 각종 센서를 이용 사물을 측정하여 얻어낸 데이터 값으로 활용하여 비교 분석 Ex) 온도센서이용 온도가 점점 올라갈수록 선풍기의 모터를 점점 빠르게 한다. 조도센서를 이용 밝기에 비례하여 전구의 밝기를 제어한다.