ATmega128 : Stepping Motor, 정회전, 역회전 - 0218
ATmega128 : Stepping Motor, 정회전, 역회전
ATmega128 : Stepping Motor
내용 넣기~~~~
◆◆ ATmega128 : Stepping Motor, 정회전, 역회전 P. 304 (수정 : 90도) ◆◆
/*
Stepping Motor 정회전, 역회전 p.304-수정 : 90도 회전
1상 여자구동방식 - 정회전, 역회전
0218A_SteppingMotor_p304_2.c
*/
#include <mega128.h>
#include <delay.h>
unsigned char CW1[4] = { 0x01, 0x04, 0x02, 0x08 }; // 정방향
unsigned char CCW1[4] = { 0x08, 0x02, 0x04, 0x01 }; // 역방향
unsigned char CW_stop[1] = {0x00};
char Mot_mod;
unsigned char *CW_CCW1; // * 포인터
unsigned char n, i;
void main(void){
DDRA = 0xff; // 포트 A 출력 설정 : 모터
DDRC = 0xff; // 포트 C 출력 설정 : LED
PORTC = 0xff;
Mot_mod = 0; // 모터 정방향
CW_CCW1 = CW1; // 정방향 데이터 포인터 설정
// 인터럽트
EICRB = 0b00000010; // 외부 인터럽트 4 : 하강 에지
EIMSK = 0b00010000; // 외부 인터럽트 0 인에이블
SREG = 0x80; // 전역 인터럽트 인에이블 비트 셋
while(1){} // 수정부분
}// end main
// 외부 인터럽트
interrupt [EXT_INT4] void Ext_int4(void){
// 90도 회전후 정지 (수정부분)
for( n = 0 ; n <3 ; n++){
for( i = 0 ; i < 4 ; i++){
PORTA = *(CW_CCW1 + i );
delay_ms(100);
}//endfor
PORTA = *CW_stop;
}//endfor
PORTC = PORTC*0xf0; // LED 반전 표시
delay_ms(500);
// 회전
if( Mot_mod == 0x00 ){ // 정방향
CW_CCW1 = CCW1; // 데이터 선두 어드레스
Mot_mod = 0x01; // 모터 역방향 모드
}//endif
else{ // 역방향
CW_CCW1 = CW1; // 데이터 선두 어드레스
Mot_mod = 0x00; // 모터 정방향 모드
}//endelse
}//end4
interrupt [EXT_INT5] void Ext_int5(void){
// CW_CCW1 = CW_stop;
}//end5
◆◆ ATmega128 : Stepping Motor, 정회전, 역회전 P. 307 ◆◆
/*
Stepping Motor 정회전, 역회전 p.307
2상 여자구동방식 - 정회전 5회 , 역회전 5회 (반복)
0218B_SteppingMotor_p307.c
*/
#include <mega128.h>
#include <delay.h>
unsigned char CW2[4] = { 0x09, 0x05, 0x06, 0x0a }; // 정방향 출력 데이터
unsigned char CCW2[4] = { 0x0a, 0x06, 0x05, 0x09 }; // 역방향 출력 데이터
char Mot_mod;
unsigned char *CW_CCW2;
void main(void)
{
unsigned char m, n, i;
DDRA = 0xff;
DDRC = 0xff;
PORTC = 0xff;
Mot_mod = 0;
EICRB = 0b00000010;
EIMSK = 0b00010000;
SREG = 0x80;
while(1){
for( m = 0; m < 5 ; m++){
CW_CCW2 = CCW2;
for( n = 0; n <12 ; n++){
for(i = 0 ; i < 4 ; i++){
PORTA = *(CW_CCW2 + i );
delay_ms(30);
}//endfor
}//endfor
PORTC = PORTC*0xff;
delay_ms(50);
}//endfor
delay_ms(50);
for( m =0; m <5 ; m++){
CW_CCW2 = CW2;
for( n = 0; n< 12 ; n++){
for( i = 0; i < 4 ; i++){
PORTA = *(CW_CCW2 + i);
delay_ms(30);
}//endfor
}//endfor
PORTC = PORTC*0xff;
delay_ms(50);
}//endfor
delay_ms(1000);
}//endwhile
}//end main
interrupt [EXT_INT4] void Ext_int4(void){
if(Mot_mod == 0){
CW_CCW2 = CCW2;
Mot_mod = 1;
}//endif
else {
CW_CCW2 = CW2;
Mot_mod = 0x00;
}//endelse
}//end4
'오픈캡쳐 스크롤 캡처 오류'로 이미지가 깨져 보인다.
◆◆ ATmega128 : Stepping Motor, START, PAUSE, RUN, STOP P. 309 ◆◆
/*
Stepping Motor 정회전, 역회전 p.309
2상 여자구동방식
1. INT4 : START (FW) : initial start
2. INT5 : PAUSE
3. INT6 : RUN (RW) : pause 후에만 동작
4. INT7 : STOP : all of stop
0218C_SteppingMotor_p309.c
*/
#include <mega128.h>
#include <delay.h>
unsigned char CW12[4] = { 0x09, 0x05, 0x06, 0x0a };
unsigned char CCW12[4] = { 0x0a, 0x06, 0x05, 0x09 };
int STEP, i = 0;
void main(void)
{
DDRA = 0xff;
PORTA = 0x00;
DDRE = 0b00000010;
PORTE = 0x00;
EICRB = 0b10101010;
EIMSK = 0b11110000;
SREG = 0x80;
while(1){
if( STEP == 0) PORTA = 0x00;
if( STEP == 1){
for( i = 0; i < 4 ; i++){
PORTA = CW12[i];
delay_ms(6);
}//endfor
}//endif
if(STEP == 3){
for( i = 0 ; i <4 ; i++){
PORTA = CCW12[i];
delay_ms(6);
}//endfor
}//endif
}//endwhile
}//end main
interrupt [EXT_INT4] void External_int4(void){
STEP = 1;
}//end4
interrupt [EXT_INT5] void External_int5(void){
STEP = STEP^1;
}//end5
interrupt [EXT_INT6] void External_int6(void){
STEP = 3;
}//end6
interrupt [EXT_INT7] void External_int7(void){
STEP = 0;
}//end7
◆◆ ATmega128 : Stepping Motor, 속도 변화 P. 312 ◆◆
/*
Stepping Motor 정회전, 역회전 p.312
1-2상 여자구동방식 : 시작 > 서서히 증가 > 정속 > 감속 > 증속 > 감속 > 반복
0218D_SteppingMotor_p312.c
*/
#include <mega128.h>
#include <delay.h>
unsigned char CW12[8] = { 0x09, 0x01, 0x05, 0x04, 0x06, 0x02, 0x0a, 0x08 };
void main(void)
{
unsigned char MS, i;
int n;
DDRA = 0xff; // 포트 A 출력 설정
DDRC = 0xff; // 포트 C 출력 설정
while(1){
for( MS = 10 ; MS > 0 ; MS--){ // 가속 3회전
PORTC = MS*0xff;
for( n = 0 ; n <150 ; n++){
for( i = 0 ; i <8 ; i++){
PORTA = CW12[i];
delay_ms(MS);
}//endfor
}//endfor
}//endfor
for( n =0 ; n <1000 ; n++){ // 정속 20회전
for( i = 0; i <8 ; i++){
PORTA = CW12[i];
delay_ms(1);
}//endfor
}//endfor
for( MS = 2 ; MS <10 ; MS++){ // 감속 3회전
PORTC = MS*0xff;
for( n = 0 ; n < 150 ; n++){
for( i = 0 ; i < 8 ; i++){
PORTA = CW12[i];
delay_ms(MS);
}//endfor
}//endfor
}//endfor
}//endwhile
}//end main
'Edu > 유비쿼터스설비제어과정' 카테고리의 다른 글
Dot Matrix, ATmega128, AVR - 0228 (0) | 2011.02.28 |
---|---|
Dot Matrix, 8 x 8 , ATmega128 - 0224 (0) | 2011.02.24 |
Dot Matrix, AVR, ATmega128 - 0223 (2) | 2011.02.23 |
전자사이크로회로, 미분회로, 4017 - 0222 (0) | 2011.02.22 |
미_ 채널전환회로, 디지털회로, RS래치 펄스 발생회로, 카운터회로, 디코더회로, 비안정 발진회로 및 스피커 구동회로 - 0221 (0) | 2011.02.21 |
ATmega128, AVR, Stepping Motor, 모터, 정회전, 역회전 - 0217 (0) | 2011.02.18 |
ATmega128, Interrupt, 제어, 응용 - 0216 (0) | 2011.02.16 |
ATmega128, AVR, Interrupt 제어 - 0215 (0) | 2011.02.16 |
- 0214 (0) | 2011.02.16 |
AVR, ATmega128, 인터럽트,FND - 0211 (0) | 2011.02.11 |