회원가입 ID/PW 찾기

하드웨어 설계에 관련한 공개 강좌를 게재하는 공간입니다.
운영진에 의해 강좌글은 편집되며, 공익을 위한 게시글은 '하드웨어 강좌'란으로 이동될 수 있습니다.

콘텐츠 수 129
판매자 아크마 판매 납포인트 무료 평점 2.5점 / 총 2명 참여
/*********************************************
Project : motor
Version : 0.1
Date    : 2006-02-28
Author  : akma
Comments:
*********************************************/
#include <mega128.h>
#include <delay.h>
#include "acc.h"
#define MOTOR_PORT  PORTD
#define MOTOR_DDR               DDRD
#define SPEED_HIGH              30     // 최고속도  
#define SPEED_START             0      // 시작속도
#define FULL_STEP   3/*2상*/  /* 1-2상여자 = 7 */
#define RIGHT  1
#define LEFT  2
#define BOTH  3   

typedef  unsigned char byte;
typedef  unsigned int word;
typedef  unsigned long dword;
const byte r_phase_table[] = {0x50, 0x60, 0xA0, 0x90};
const byte l_phase_table[] = {0x05, 0x06, 0x0A, 0x09}; 
byte r_phase_index,l_phase_index;
word acc_index_r, acc_index_l; 
word speed_limit,time_r,time_l;
byte motor_arrived_left;

/*
cw방향으로 바퀴를 제어할때(ccw일때도) cw방향으로 회전잘하다가 리셋하면 ccw방향으로 회전하는등
cw/ccw을 번갈아 랜덤하게 제어되면 7026드라이버가 고장난것으로 생각하고
교체바란다  본인의 경험에 의하면 대략 95%이상 맞다                      
왼쪽바퀴와 오른쪽 바퀴에 균등한 힘을 주어 한쪽만 계속 탈조나면 그것도 7026드라비어의 고장증상이다
7026의 고장이 아니라면 모터의 고장을 의심해볼수 있는데 여유모터가 있으면 테스트해보기 바란다.
모터고장으로 토크가 안걸리는 경우를 봤으며 고장난 모터로 인해 7026드라이버까지 타는 경우가 있다.
단, 때론 납땜이 부실하게 되어 전류가 제대로 전달되지 못 할수도있으므로 납땜을 확인하기 바란다.
좌측, 우측 7026의 파형을 보고 비슷한지 꼭 확인하라.
7026, 모터 전부 이상이 없다면 회로쪽도 한번쯤 의심해보면 좋을것이다.
*/
void cal_speed_l(void)
{        
    acc_index_l++;
 if (acc_index_l > speed_limit) acc_index_l = speed_limit; 
 time_l=acc_tbl[acc_index_l];
} 
void cal_speed_r(void)
{       
 acc_index_r++; 
 if (acc_index_r > speed_limit) acc_index_r = speed_limit; 
   time_r=acc_tbl[acc_index_r];
} 
                
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{          
 l_phase_index--;
 l_phase_index &= FULL_STEP;
   
 MOTOR_PORT =  r_phase_table[r_phase_index] | l_phase_table[l_phase_index] ;
   cal_speed_l();
     
  OCR1AH = ( time_l >> 8 ) & 0xff;
 OCR1AL = time_l & 0xff; 
}
interrupt [TIM3_COMPA] void timer3_compa_isr(void)
{
    
  r_phase_index++;
 r_phase_index &= FULL_STEP;
 
  MOTOR_PORT =  r_phase_table[r_phase_index] | l_phase_table[l_phase_index] ;
 cal_speed_r();
   
  OCR3AH = ( time_r >> 8 ) & 0xff;
 OCR3AL = time_r & 0xff; 
}

void start_motor()
{     
    l_phase_index = r_phase_index = 0;
          
        // limit speed
 speed_limit = SPEED_HIGH;
        
        // start speed
    acc_index_l = SPEED_START; 
    acc_index_r = SPEED_START;
 
 OCR1AH = (acc_tbl[acc_index_l]>>8)&0xff;   // register high byte
   OCR1AL = acc_tbl[acc_index_l]&0xff;       // register low byte
 
 OCR3AH = (acc_tbl[acc_index_r]>>8)&0xff;   // register high byte
  OCR3AL = acc_tbl[acc_index_r]&0xff;       // register low byte
 
 TCCR1B = 0x09;          //clock/1
 TCCR3B = 0x09;          //clock/1  
 
 
 TIMSK = 0x10;           // timer1_compare match inable, left
 ETIMSK = 0x10;           //timer3_compare match inable, right
 
 
}

void main(void)
{                    
        // system delay
        delay_ms(300);
      
 
  MOTOR_DDR = 0xff;  //motor output
  MOTOR_PORT = 0x00;
 
  start_motor();
 
  //delay_ms(200); // 리셋하고 이전에 모터에 남아있는 상이 있으면 역회전 할수도있으므로
        // 상을 끊어주는 의미
        #asm("sei")
 
        while (1)
        {      
               
        };
}

 



모르는 것이 무엇인지 스스로 정리하고 질문하는 습관을 가집시다.
무성의/광범위하거나 직접 해보지 않고 올리는 질문은 서로를 피곤하게 합니다.
질문쪽지는 사절이오니 게시판에 글을 남겨주세요. 그래야 다같이 공유할 수 있으니까요.

첨부

profile
우라질 2008.03.20 19:46
똑같은게 왜 두개나 올라와있져?
profile
kjhjilal 2008.09.24 15:51
상당히 어렵네여..
profile
감나무 2008.10.04 06:36
기본지식이 있어야 하는 것같은데요.
profile
pru 2010.04.09 10:51
감사합니다
profile
컴쟁이 2012.09.14 00:03
감사요
profile
minhowa 2016.06.14 22:46
어려워요ㅜㅜ
profile
ZeorTiger 2016.09.21 14:42
한수 배우고 갑니다.
profile
청산유수 2016.09.26 08:42
배우고 갑니다. 감사..
profile
rhjrjrjqweqweqw 2016.11.14 09:59
어렵군요..
profile
dsafsda 2017.10.06 12:58
꽤나 어렵네요
profile
호야아부지 2023.02.12 19:22
감사합니다
search

연재강좌(하드웨어 엔지니어 되기) : (12)
전자 하드웨어 기초 : (14)
8051 어셈블리 강좌(by 허인교수님) : (7)
■ 제3장. 명령어 2019-04-17 14:58
AVR 기반의 라인트레이서(by 아크마) : (9)
용어도 모르겠어요 : (15)
■ 8051이란? 2019-04-17 00:17
■ 아트워크 기초 2019-04-17 14:40
■ MCU 기초 2019-12-19 10:58
■ 펌웨어 기초 2019-04-17 14:44
■ 납땜하기 2019-07-26 09:49
하드웨어 일반 : (15)
■ ASCII Table 2019-04-17 14:19
PCB설계와 제조의 이해 : (7)
■ CAD-Utility 2021-09-02 13:41
EMC 적합성을 고려한 PCB설계 : (43)
PCB의 기초 : (14)
바이패싱과 디커플링 : (9)
ESD 보호 : (3)
■ ESD 보호 - 개요 2017-06-22 10:24
클럭회로 : (17)
PCB 자주 묻는 질문 : (1)
Altium 사용하기 : (6)
ETC
  • 약속은 태산처럼 해놓고, 실천은 두더지 둔덕만큼 한다.
    - C.H.스퍼전
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.