1. HIGH-FREQUENCY RESPONSE** HIGH-FREQUENCY RESPONSE **** SPICE MODEL ************************************************************************* MOSFET N-CHANNEL LEVEL=1 SPICE MODEL.MODEL NCH NMOS (LEVEL=1, UO=360, TOX=0.4N, VTO=0.5, LAMBDA=0.4,+CJ=3E-4, MJ=0.35, CJSW=40N, MJSW=0.3)* MOSFET P-CHANNEL LEVEL=1 SPICE MODEL.MODEL PCH PMOS (LEVEL=1, UO=150, TOX=0.4N, VTO=-0.55, LAMBDA=0.4,+CJ=3.5E-4, MJ=0.35, CJSW=35N, MJSW=0.3)************************************************************************ Netlist **vdd vdd gnd dc 1.8vvb vb gnd dc 1.1vvin vin gnd dc 0.6v ac 10MvRS vin g 5M1 d g gnd gnd NCH W=20U L=4UM2 d vb vdd vdd PCH W=20U L=4U** Simulation **.dC vin 0 1.8 0.001.ac dec 10 1 100G.PROBE ac gain=PAR('db(v(d)/v(vin))').OP.ENDM1과 M2가 둘 다 saturation 영역에 있기 위해 Vin의 dc bias 전압을 0.6V로 설정하였다. 이후 Vin에 bias+ac 신호를 인가하여 주파수 응답을 확인하였다. Midband gain은 30.6dB로 측정되었고, Midband gain보다 3dB 낮은 gain을 갖는 주파수인 는 563MHz로 측정되었다.lis파일에서 , 그리고 capacitance값들을 찾아 밀러 이론과 시정수 근사법을 이용하여 를 측정하였다. DC bias를 모두 접지 시키고 high frequency 소신호 모델로 변환하였다. M2의 gate와 source단자가 접지이므로 값은 0으로 두고 계산하였다. 밀러 이론 사용시, 값이 매우 작아 출력 쪽에서 를 결정 하였다.밀러 이론을 이용하여 계산한 는 578MHz이고 시정수 근사법을 이용하여 계산한 는 532MHz이다. 두 방법 모두 시뮬레이션 값과 약간의 오차가 있었다.
<Sorting 알고리즘을 이용한 정렬 프로그램>ⓐ Insertion SortingInsertion Sorting은 O(n2) 정렬 알고리즘에 속한다. 2차 복잡성을 가진 많은 정렬 알고리즘과 달리 작은 배열의 데이터 정렬에 적용된다. 따라서 나는 Insertion Sorting 알고리즘을 이용하여 Numeric Sorting을 하였다. Insertion Sorting 알고리즘은 다음과 같다. 우선 배열은 임의로 두 부분으로 나뉜다. 하나는 정렬된 부분이고 다른 하나는 정렬되지 않은 부분이다. 정렬된 부분에는 배열의 첫 번째 요소가 포함되고, 정렬되지 않은 부분에는 나머지 요소들이 포함된다. 이후 정렬되지 않은 부분의 첫번째 요소가 정렬된 부분의 올바른 위치에 삽입 되는 루틴이 반복된다. 정렬되지 않은 부분이 비게 되면 알고리즘이 종료된다.ⓑ 코드 설명inputnum_ment:li$v0, 4# syscall for print_str.la$a0, inputnum_ment_string# load inputnum_ment_string to argument register $a0.syscall# print the string.inputnum:li$v0, 5# syscall for read an integer.syscall# read the integer.la$t0, size# load address of size to $t0.sw$v0, 0($t0)# store returned value in $v0 to size.배열의 크기를 지정하는 단계이다. "A number of input values to be sorted: "를 화면에 출력하여 array의 size 값을 입력 받는다.valueloop:bge$t2, $t1, valueloop_end# while ($t2 < $t1) go to valueloop_end.li$v0, 4
실험① PWM을 이용한 LED 밝기 조절코드 및 주석int ledPin = 11; void setup(){ pinMode(ledPin, OUTPUT);}void loop(){ for(int i=10; i<=255; i=i+10){ analogWrite(ledPin, i); // i값 10씩 증가함에 따라 LED 밝기 변화 delay(200); // delay 0.2초 }}고찰 및 실험 평가 디지털 핀에서 출력은 0V와 1V(아날로그로는 0V와 5V)만 있기 때문에 LED를 연결하면 켜지고 꺼지기만을 반복한다. AnalogWrite 함수를 이용하면 i(value)값의 크기 변화를 통해 LED의 밝기를 조절할 수 있다. I가 255에 가까워지면 High 출력의 비율이 증가하여 LED 밝기가 밝아진다. 이는 Pulse-Width Modulation (PWM)을 이용한 것이다. 디지털 신호는 0과 1 두개의 discrete한 출력만 존재하는데, 이 때 pulse를 이용하여 원하는 전압 신호의 평균값을 출력하면 디지털 신호가 아날로그 신호처럼 continuous하게 출력된다.Pulse의 high와 low의 비율 조정으로 원하는 전압 신호를 출력해내 디지털 신호가 아날로그 신호처럼 출력되게 하는 PWM 방식에 대해 이해할 수 있는 실험이었다. 이론적인 내용만 공부 하는 것이 아니라 LED의 밝기가 조절되는 것을 눈으로 확임함으로써 PWM 원리를 더욱 효율적으로 습득할 수 있었다.실험② 서보 모터 예제코드 및 주석#include <Servo.h>int servoPin = 5;Servo servo; //Servo 라이브러리 내 클래스를 사용하기 위해 객체 생성int Level = 0; //Servo Motor Level을 조정void setup(){ servo.attach(servoPin); //생성된 객체의 초기화}
학번: 이름: ( 조)Lab7. SENSOR2실험① 기울기 센서코드 및 주석int LED = 3;int adcValue = 11;void setup() {pinMode(LED,OUTPUT); //LED 출력 = digital 3번핀pinMode(adcValue, INPUT); //기울기센서값= adcValue = digital 11번핀}void loop() {if(digitalRead(adcValue) == HIGH) //센서가 기울기 시작하면{digitalWrite(LED,HIGH);//LED 불이 들어오고}else //센서가 평행하면(기울지 않으면){digitalWrite(LED,LOW); //LED가 꺼진다}}고찰 및 실험 평가팅커캐드에서 각도 센서를 지원해주지 않아 기울기 센서에 대한 실험을 하였다. 각도 센서처럼기울기 센서도 analogRead()함수로 기울기 값을 읽었다. 그러나 결과값이 계속 디지털 신호처럼 2개의 discrete한 값(0 or 1022)으로 출력되었다. 알아보니 기울기 센서는 0과 1의 디지털 신호만을 출력할 수 있었다. 그래서 digitalRead()함수로 기울기 값을 읽도록 코드를 수정하고, LED핀을 출력으로 선언하여 기울기 센서값이 LOW이면 LED핀은 OFF 되고 센서값이 HIGH이면 LED핀은 ON이 되도록 설정하였다. 이번 실험에서 여러 시행착오를 겪으며 기울기 센서는 digital 신호를 출력한다는 사실을 알게 되었다. 그리고 팅커캐드에서 지원하지 않는 각도 센서, 로터리 인코더 모듈, 그리고 마그네틱 홀 센서에 대한 실험은 동영상으로만 이해하고 공부하였다. 실제 실험을 했으면 센서의 원리와 동작에 대해 더욱 자세히 이해할 수 있었을 텐데 하는 아쉬움이 남았다.과제① 광센서+LED코드 및 주석int CDSValue = A0;int led = 13;void setup() {Serial.begin(9600);pinMode(led, OUTPUT);// LED 핀을 output으로 설정}void loop() {int cdsValue = analogRead(A0);Serial.println(cdsValue); //광센서로 측정된 밝기를 시리얼모니터에 출력if (cdsValue > 462) { //광센서로 측정된 밝기가 462보다 크면digitalWrite(led, HIGH); //LED가 켜진다}else { //그 이외의 경우에는digitalWrite(led, LOW); //LED가 꺼진다}delay(200);}고찰 및 실험 평가광센서에서 빛에 대한 입력 신호를 받아 광량에 따라 LED핀이 켜지고 꺼지는 실험을 하였다. 우선, analogRead()함수를 통해 광센서에서 빛의 세기를 측정하였다. 이 값을 시리얼모니터에 출력하고, Output으로 선언된 LED 핀에 전달하였다. 위 실험에서 측정된 빛에 0~53과 975~1023 범위(아날로그 값)에 해당하는 전압 값이 없기 때문에 광센서의 출력 값 범위가 54에서 979로 측정되었다. 따라서 54와 979의 중간 값인 462를 기준으로, 광량이 462보다 크면 LED핀이 ON되고 462보다 작으면 LED핀이 OFF 되도록 코딩하였다.앞선 SENSOR(1)과 이번 SENSOR(2) 실험을 통해 여러 센서들에 대해 공부하였다. 센서들의 종류가 다양하고 각각 원리도 다 다르지만 동작이 비교적 쉽고 간단하여 이해하는 데에 무리는 없었다. 마지막으로 센서값을 input으로 하고 출력부에서 이를 받아 처리하고 동작하는 코딩 과제를 통해 센서를 다른 부품들과도 응용 할 수 있게 되어 유익하고 좋았다.