Stepper Motor 디바이스 드라이버

Slides:



Advertisements
Similar presentations
- 1 - 자바 네이티브 인터페이스 NDK / Java Native Interface Huins. R&D Center NDK / Java Native Interface  ACHRO4210 의 디바이스  안드로이드에서 사용되는 대표적인 디바이스 LCD,
Advertisements

1 모터 (Motors) 김원웅. 2 모터 (Motor) □ 모터 응용분야 □ Desktop PC 의 DVD ROM, HDD □ 러닝머신, 전동드릴, 선풍기 등 전력에 의해서 뭔가가 움직이 는 분야에는 거의 모두 모터가 사용 □ 우리가 배울 모터의.
제10장 디바이스 드라이버.
* 07/16/96 처음으로 배우는 C 프로그래밍 제1부 기초 제1장 시작하기 *.
KEY 디바이스 드라이버 Lecture #12. 2 차례 GPIO 및 Control Registers KEY 하드웨어 구성 KEY Driver 프로그램 key-driver.c 시험 응용 프로그램 key-app.c.
FND 디바이스 드라이버 Lecture #13.
5장. Enhanced Char Driver Operations 과제
TextLCD 디바이스.
6 레이스 컨디션.
공유메모리 int shmget(key_t key, size_t size, int permflags);
컴퓨터 계측 및 실습 스테핑 모터 영남대학교 기계공학부.
FND 디바이스 드라이버 Lecture #11.
개발 환경 개발 환경 개요 PXA270과 타겟 시스템 툴체인 환경 구축 JTAG 유틸리티 미니컴 Make 유틸리티
C 프로그래밍.
Linux System Programming
Kernel Programming Kernel
Department of Computer Engineering
디바이스 드라이버 (Device Driver)
디바이스 드라이버 기초 디바이스 드라이버의 개요 파일 연산 디바이스 드라이버 등록 디바이스 드라이버 구성
디바이스 드라이버 응용 디바이스와 주소 디바이스 드라이버 구현 일반 LED 디바이스 드라이버 FND 디바이스 드라이버
디바이스 드라이버.
이식성과 데이터형 서로 다른 프로세서 상에서의 이식성을 위해 가급적 리눅스 커널이 제공하는 데이터형을 사용하는 것이 좋다.
디바이스 드라이버 개요 가상 디바이스드라이버 실습
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
1 유닉스 시스템 프로그래밍 개요.
Network Lab. Seoung Hyeon, Lee
쉽게 풀어쓴 C언어 Express 제9장 함수와 변수 C Express.
Linux System Programming
쉽게 풀어쓴 C언어 Express 제16장 파일 입출력 C Express Slide 1 (of 23)
컴퓨터 계측 및 실습 스테핑 모터 영남대학교 기계공학부.
제 12장 I/O멀티플렉싱(Multiplexing)
연산자 대입 연산자 산술 연산자 관계 연산자 논리 연산자 비트 연산자 콤마 연산자 축약 연산자 sizeof 연산자
FND (Flexible Numeric Display)
GPIO Port 활용 디바이스 드라이버 Lecture #15.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
Department of Computer Engineering
AVR - Chapter 15 황 지 연.
스테핑 모터.
Step Motor Device Driver
fork로 생성한 자식 프로세스에서 exec 함수군을 호출
링크 파일 생성[1] 링크 하드링크 생성 : link(2) 이미 있는 파일이나 디렉토리에 접근할 수 있는 새로운 이름
파일 기술자 복사 파일 기술자 복사 : dup(2) 파일 기술자 복사 : dup2(3)
파일 기술자 파일 기술자 현재 열려있는 파일을 구분하는 정수값 저수준 파일 입출력에서 열린 파일을 참조하는데 사용
(ioctl, mmap, fsync&flush)
6장 파일 및 레코드 잠금.
커널 모듈 프로그래밍 (Kernel Module Programming)
Department of Computer Engineering
HBE-SMIII-SV210 리눅스 커널과 디바이스 드라이버
10장 C 표준 파일 입출력 子曰 學而時習(실습?)之 不亦悅乎.
adopted from KNK C Programming : A Modern Approach
문자 디바이스 드라이버 임베디드 시스템.
Memory & Data Management.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
제 6장 함수 Hello!! C 언어 강성호 김학배 최우영.
자전거를 배우려면 안장에 올라가 페달을 밟아라.
네트워크 프로그래밍의 이해 School of Electronics and Information.
컴퓨터 프로그래밍 기초 - 4th : 수식과 연산자 -
리눅스 디바이스 드라이버 (Linux Device Driver)
함수와 변수 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
합집합과 교집합의 원소의 개수 수학 7-가 집합과 자연수 > 집합 > 7/20 수업계획 수업활동 [제작의도]
Kernel Programming Kernel
9주차: Using Files and Others
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
06. 디바이스의 등록과 해제 김진홍
개정판 누구나 즐기는 C언어 콘서트 제10장 문자열 출처: pixabay.
printf("Global Korea\n");
3장 파일 다루기 한빛미디어(주).
프로그래밍 기법 최적화 프로그래밍.
Presentation transcript:

Stepper Motor 디바이스 드라이버 Lecture #14

목 차 Stepper Motor구동 원리 Stepper Motor 디바이스 드라이버 Stepper Motor 응용 프로그램

Stepper Motor 개요 (1) 디지털 펄스를 기게적인 축 운동으로 변환시키는 디지털 엑추에이터 디지털 소스에서 펄스를 가하면 모터 축을 펄스의 주파수 및 펄스 수에 따라 정해 진 속도로 정해진 각도로 회전한다 AC servo 또는 DC servo motor에 비하여 정확한 각도 제어에 유리 하여 많이 사용 Stepper Motor, Stepping Motor, Pulse Motor 장점: 디지털 신호로 직접 open loop 제어를 할 수 있고 전반저긍로 간단하게 구동 회전속도는 펄스 신호의 주파수에 비례, 회전각도는 입력 펄스의 수에 비례 기동, 정지, 정-역회전, 변속이 용이하며 응답 특성도 양호 고토크, 고속 응답, 소형 경량, 미소각, 고정도, 저가격 단점: 고속 운전시 탈조가 쉽다 특정 주파수에서는 진공, 공진현상이 발생하기 쉽고 관성이 있는 부하에 약한다 펄스 비가 상승하면 토크가 저하하며 DC servo motor에 비해 효율이 떨어진다

Stepper Motor 개요 (2)

Stepper Motor 구조 및 동작 방식 Stepper Motor 구조 고정자(Stator) – 모터 내부의 장착된 코일, 모터의 위상(phase)을 결정, 전원 공급시 에 전자기력을 생성 회전자(Rotator) – 전자기력에 의해 회전하는 축, 회전축의 회전에 따라 역기전압이 발생, 입력 전압과 반대방향으로 서로 상쇄하여 전류 흐름을 제한 A. 4상 스텝 모터 B. 5상 스텝 모터

Stepper Motor 제어 (1) Stepper Motor 제어 포트의 물리 주소 0xC000000C Stepper Motor 제어 데이터 bit Bit 7 6 5 4 3 2 1 Stepper Motor nB B nA Step1 A Step2

Stepper Motor 제어 (2) Stepper Motor – Half Step Operation Stepper Motor – Full Step Operation Sequence Input Output A nA B nB 1 1(H) 0(L) 2 3 4 Sequence Input Output A nA B nB 1 1(H) 0(L) AB 2 nAB 3 nAnB 4 AnB

PXA255-FPGA – Stepper Motor 회로 구성(1)

PXA255-FPGA – Stepper Motor 회로 구성(2)

PXA255-FPGA – Stepper Motor 회로 구성(3)

PXA255-FPGA – Stepper Motor 회로 구성(4)

Stepper Motor Device Driver – 매크로/전역 변수 (stepmotor_driver.c) #include <linux/kernel.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/init.h> #include <linux/version.h> #include <linux/delay.h> #include <linux/ioport.h> #include <asm-arm/io.h> #include <asm-arm/uaccess.h> #define IOM_STEP_MAJOR 269 // ioboard step device major number #define IOM_STEP_NAME "STEP" // ioboard step device name #define IOM_STEP_ADDRESS 0x0C00000C // pysical address #define A (unsigned short)(0x1) #define AB (unsigned short)(0x5) #define B (unsigned short)(0x4) #define _AB (unsigned short)(0x6) #define _A (unsigned short)(0x2) #define _A_B (unsigned short)(0xa) #define _B (unsigned short)(0x8) #define A_B (unsigned short)(0x9) //Global variable static int stepport_usage = 0; static unsigned short *iom_step_addr;

Stepper Motor Device Driver – 매크로/전역 변수 (stepmotor_driver.c) // define functions... ssize_t iom_step_write(struct file *inode, const char *gdata, size_t length, loff_t *off_what); int iom_step_open(struct inode *minode, struct file *mfile); int iom_step_release(struct inode *minode, struct file *mfile); // define file_operations structure struct file_operations iom_step_fops = { open: iom_step_open, write: iom_step_write, release: iom_step_release, };

Stepper Motor Device Driver – open/release (stepmotor_driver.c) // when step device open ,call this function int iom_step_open(struct inode *minode, struct file *mfile) { if(stepport_usage != 0) return -EBUSY; stepport_usage = 1; return 0; } // when step device close ,call this function int iom_step_release(struct inode *minode, struct file *mfile) stepport_usage = 0;

Stepper Motor Device Driver – write (stepmotor_driver.c) // when write to step device ,call this function ssize_t iom_step_write(struct file *inode, const char *gdata, size_t length, loff_t *off_what) { unsigned short speed; const char *tmp = gdata; if (copy_from_user(&speed, tmp, 2)) return -EFAULT; outw(A,iom_step_addr); udelay(speed); outw(B,iom_step_addr); outw(_A,iom_step_addr); outw(_B,iom_step_addr); return length; }

Stepper Motor Device Driver – init/cleanup (stepmotor_driver.c) int __init iom_step_init(void) { int result; result = register_chrdev(IOM_STEP_MAJOR, IOM_STEP_NAME, &iom_step_fops); if(result < 0) { printk(KERN_WARNING"Can't get any major\n"); return result; } iom_step_addr = ioremap(IOM_STEP_ADDRESS, 0x2); printk("init module, %s major number : %d\n", IOM_STEP_NAME,IOM_STEP_MAJOR); return 0; void __exit iom_step_exit(void) iounmap(iom_step_addr); if(unregister_chrdev(IOM_STEP_MAJOR, IOM_STEP_NAME)) printk(KERN_WARNING"%s DRIVER CLEANUP FALLED\n", IOM_STEP_NAME); module_init(iom_step_init); module_exit(iom_step_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Huins");

Stepper Motor Device Driver – 테스트 프로그램 (test_stepmotor.c) #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <fcntl.h> int main(void) { int fd,id; unsigned int b_delay; unsigned short c = 0xffff; fd = open("/dev/STEP", O_WRONLY); if (fd < 0){ printf("Device Open Error\n"); exit(1); } while(1) { if(c < 0x1000) c = 0x1000; else c -= 0x100; write(fd, &c, 2); close(fd); return 0;

Stepper Motor Device Driver – Makefile #Makefile for a basic kernel module obj-m := stepmotor_driver.o KDIR :=/root/pxa255-pro3/kernel/linux-2.6.21 PWD :=$(shell pwd) all: driver app driver: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules app: arm-linux-gcc -o test_stepmotor test_stepmotor.c clean: rm -rf *.ko rm -rf *.mod.* rm -rf *.o rm -rf test_stepmotor rm -rf Module.symvers

Stepper Motor Device Driver – Testing 타겟보드를 부팅한 후 드라이버 모듈과 테스트 프로그램을 nfs 마운 트 디렉토리에 복사한 후에 아래와 같이 진행한다. # insmod ./stepmotor_driver.ko init module, STEP major number : 269 # mknod /dev/STEP c 269 0 # ./test_stepmotor