標題:
求一個能控制步進電機轉(zhuǎn)動角度的C語言程序
[打印本頁]
作者:
單小白
時間:
2017-10-1 23:08
標題:
求一個能控制步進電機轉(zhuǎn)動角度的C語言程序
本帖最后由 單小白 于 2017-10-1 23:15 編輯
我想要實現(xiàn)如下的功能:單片機P2^1口輸出低電平蜂鳴器報警,同時步進電機順時針轉(zhuǎn)動90度或45度,當P2^1口輸出高電平時蜂鳴器停止報警,同時步進電機逆時針轉(zhuǎn)動90度或45度。
主要是步進電機轉(zhuǎn)動角度不知道怎么控制,對步進電機了解的不多。單片機型號是STC89C52,驅(qū)動芯片是ULN2003,步進電機型號是28BYJ-48 5VDC。
作者:
零度時空
時間:
2018-4-10 08:13
#include<reg51.h> #define uchar unsigned char #define uint unsigned int typedef unsigned int u16; //對數(shù)據(jù)類型進行聲明定義 typedef unsigned char u8; sbit IN1=P0^0; /*第一個電機*/ sbit IN2=P0^1; /*第一個電機*/ sbit IN3=P0^2; /*第一個電機*/ sbit IN4=P0^3; /*第一個電機*/ sbit IN5=P2^3; sbit IN6=P2^4; void delay(u16 i) { while(i--); } void main() { int a=128; P2=1;//使能 while(1) { IN5=1;//使能 IN6=1;//使能 // a--; // if(a==0)P2=0; IN1=1;IN2=0;IN3=0;IN4=0; delay(150); IN1=1;IN2=1;IN3=0;IN4=0; delay(150); IN1=0;IN2=1;IN3=0;IN4=0; delay(150); IN1=0;IN2=1;IN3=1;IN4=0; delay(150); IN1=0;IN2=0;IN3=1;IN4=0; delay(150); IN1=0;IN2=0;IN3=1;IN4=1; delay(150); IN1=0;IN2=0;IN3=0;IN4=1; delay(150); IN1=1;IN2=0;IN3=0;IN4=1; delay(150); } }
作者:
零度時空
時間:
2018-4-10 08:14
/******************************步進電機的驅(qū)動************************************* ;FOSC = 12MHz ;--------------------------------------------------------------------------------- ; 步進電機的驅(qū)動信號必須為脈沖信號!!! 轉(zhuǎn)動的速度和脈沖的頻率成正比!!! ; 本步進電機步進角為 5.625 度 . 一圈 360 度 , 需要 64 個脈沖完成!!! ;--------------------------------------------------------------------------------- ; A 組線圈對應(yīng) P0.0 ; B 組線圈對應(yīng) P0.1 ; C 組線圈對應(yīng) P0.2 ; D 組線圈對應(yīng) P0.3 ; 正轉(zhuǎn)次序: AB 組--BC 組--CD 組--DA 組 (即一個脈沖,正轉(zhuǎn) 5.625 度) ;---------------------------------------------------------------------------------- **********************************************************************************/ /*頭文件*/ #include <reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char #define nop() _nop_() uchar code table1[]={0x03,0x06,0x0c,0x09}; /*正轉(zhuǎn)表*/ uchar code table2[]={0x03,0x09,0x0c,0x06}; /*反轉(zhuǎn)表*/ #define motor P0 void delay(uchar ms) /*延時*/ { uchar j; while(ms--){ for(j=0;j<250;j++) {;} } }void main() { uchar i,j; while(1){ //正轉(zhuǎn) 3 圈共 192 個脈沖 j=0; for(i=0;i<192;i++){ motor = 0x00; motor = table1[j]; j++; if(j>=4) j=0; delay(2); } delay(200); delay(200); delay(200); delay(200); delay(200); //正轉(zhuǎn) 2 圈共 128 個脈沖 j=0; for(i=0;i<128;i++){ motor = 0x00; motor = table2[j]; j++; if(j>=4) j=0; delay(2); } delay(200); delay(200); delay(200); delay(200); delay(200); } }
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1