BASIC4MCU | 8051/PIC | DT-516 강좌 | DT516-180.c 유니폴라 스텝모터구동
페이지 정보
작성자 키트 작성일2017-08-24 11:02 조회2,138회 댓글0건첨부파일
본문
1상 제어
2상 제어
12상 제어
//-------------------------------------------------------------
// 82G516 E/V BOARD ( DT-516 )
//-------------------------------------------------------------
// XTAL : 22.1184Hz
//-------------------------------------------------------------
// filename: DT516-180.c
// 스텝모터 구동
//-------------------------------------------------------------
#include
//
#include "DT516-main.h"
//
U_I count=0;
//
U_C m_tbl_1[4] ={0x01,0x02,0x04,0x08};
U_C m_tbl_2[4] ={0x09,0x03,0x06,0x0C};
U_C m_tbl_12[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0C,0x08};
//
void ADC_Interrupt(void) interrupt 9{ // ADC_Interrupt:
}
//
void Timer_0_Interrupt(void) interrupt 1{ // 7200Hz주기
P4=0xFF; // FND OFF
switch(FND_CNT){
case 0: P0=Seg_Data[count/1000]; FND_COM1=0; break;
case 1: P0=Seg_Data[(count/100)%10]; FND_COM2=0; break;
case 2: P0=Seg_Data[(count/ 10)%10]; FND_COM3=0; break;
case 3: P0=Seg_Data[count%10]; FND_COM4=0; break;
}
if(++FND_CNT>3)FND_CNT=0;
//
if(delay_buf){ if(--delay_buf==0)delay_flg=1; }
}
//
void main(){
int i,k;
TMOD=2; ET0=1; TR0=1; EA=1;
while(1){
for(k=0;k<1000;k++){ // 4ms * 1000 = 4sec // 1상구동
for(i=0;i<4;i++){ P2=m_tbl_1[i]; delay_ms(1); }
}
for(k=0;k<1000;k++){ // 4ms * 1000 = 4sec // 2상구동
for(i=0;i<4;i++){ P2=m_tbl_2[i]; delay_ms(1); }
}
for(k=0;k<500;k++){ // 8ms * 500 = 4sec // 12상구동
for(i=0;i<8;i++){ P2=m_tbl_12[i]; delay_ms(1); }
}
}
}
//-------------------------------------------------------------
스텝모터 드라이버는 P2.0, P2.1, P2.2, P2.3 에 신호를 연결 했습니다.
스텝모터 드라이버는 L298로 회로를 꾸며도 되지만
회원중고장터에 모터와 함께 나온 것이 보이길래 구입 해서 만들었습니다.
역방향 제어는 테이블 순서를 바꿔주면 됩니다.
U_C m_tbl_1F[4] ={0x01,0x02,0x04,0x08}; // 정방향
U_C m_tbl_1R[4] ={0x08,0x04,0x02,0x01}; // 역방향
U_C m_tbl_2F[4] ={0x09,0x03,0x06,0x0C}; // 정방향
U_C m_tbl_2R[4] ={0x0C,0x06,0x03,0x09}; // 역방향
U_C m_tbl_12F[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0C,0x08}; // 정방향
U_C m_tbl_12R[8]={0x08,0x0C,0x04,0x06,0x02,0x03,0x01,0x09}; // 역방향
아니면
signed int i,k; // 변수를 부호있는 int 로 바꾸고
for(k=0;k<1000;k++){ // 4ms * 1000 = 4sec // 1상구동 정방향
for(i=0;i<4;i++){ P2=m_tbl_1[i]; delay_ms(1); }
}
for(k=0;k<1000;k++){ // 4ms * 1000 = 4sec // 1상구동 역방향
for(i=3;i>=0;i--){ P2=m_tbl_1[i]; delay_ms(1); }
}
가감속 제어는 제가 안하겠습니다.
회원님들 중에서 해보신 분은 예제 올려 주세요 ^^
댓글 0
조회수 2,138등록된 댓글이 없습니다.