#include "reg52h"
void delay(unsigned int t);
//Motor
sbit F1 = P1^0;
sbit F2 = P1^1;
sbit F3 = P1^2;
sbit F4 = P1^3;
unsigned char code FFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6}; //反转
unsigned char code FFZ[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe}; //正转
unsigned int K;
/
步进电机驱动
/
void motor_ffw()
{
unsigned char i;
unsigned int j;
for (j=0; j<12; j++) //转1n圈
{
for (i=0; i<8; i++) //一个周期转30度
{
if(K==1) P1 = FFW[i]&0x1f; //取数据
if(K==2) P1 = FFZ[i]&0x1f;
delay(15); //调节转速
}
}
}
/
延时程序
/
void delay(unsigned int t)
{
unsigned int k;
while(t--)
{
for(k=0; k<100; k++)
{ }
}
}
main()
{
while(1)
{
K=1;
motor_ffw();
K=2;
motor_ffw();
}
}
给你个例子,这是正反转的可以用这个修改出加减速程序
你不说你单片机的型号不好做的,因为电路都不一样,接口也不一样,我给你一个我的,你照着看看吧
#include"Reg52H" / 调用MCS51寄存器头文件 /
typedef unsigned char UINT8; / 类型定义 /
typedef unsigned int UINT16;
/ 参数:PM35永磁电机,步进角为75度。
单双八拍工作方式:
A-AB-B-BC-C-CD-D-DA (一个脉冲,转375度) /
UINT8 FORWARD_DATA_BUF[ 8 ] = { 0x01, 0x03, 0x02, 0x06, 0x04, 0x0C, 0x08, 0x09 }; / 全速正转 /
UINT8 REVERSE_DATA_BUF[ 8 ] = { 0x09, 0x08, 0x0C, 0x04, 0x06, 0x02, 0x03, 0x01 }; / 全速反转 /
void DelayMs( UINT16 Ms )//延时程序
{
UINT8 i;
while ( Ms-- )
{
for ( i = 0; i < 114; i++ ); / 110592M,1Ms延时 /
}
}
void MOTOR_FORWARD( void )
{
UINT8 i;
UINT8 j;
for( i = 0; i < 12 ; i++ ) / 正转一圈360度 /
{
for( j = 0; j < 8; j++ ) / 8次转30度 /
{
P2 = FORWARD_DATA_BUF[ j ];
DelayMs( 3 ); / 调整转速 /
}
}
P2 = 0; / 停止转动 /
}
void MOTOR_REVERSE( void )
{
UINT8 i;
UINT8 j;
for( i = 0; i < 12 ; i++ ) / 反转一圈360度 /
{
for( j = 0; j < 8; j++ ) / 8次转30度 /
{
P2 = REVERSE_DATA_BUF[ j ];
DelayMs( 3 ); / 调整转速 /
}
}
P2 = 0; / 停止转动 /
}
void main( void )
{
UINT8 i;
P2 = 0;
while( 1 )
{
MOTOR_FORWARD(); / 正转一圈 /
DelayMs( 1000 );
MOTOR_REVERSE();
DelayMs( 1000 ); / 反转一圈 /
}
}
你不说你单片机的型号不好做的,因为电路都不一样,接口也不一样,我给你一个我的,你照着看看吧
#include"Reg52H" / 调用MCS51寄存器头文件 /
typedefunsigned char UINT8; / 类型定义 /
typedef unsigned int UINT16;
/ 参数:PM35永磁电机,步进角为75度。
单双八拍工作方式:
A-AB-B-BC-C-CD-D-DA (一个脉冲,转375度) /
UINT8 FORWARD_DATA_BUF[ 8 ] = { 0x01, 0x03, 0x02, 0x06, 0x04, 0x0C, 0x08, 0x09 }; / 全速正转 /
UINT8 REVERSE_DATA_BUF[ 8 ] = { 0x09, 0x08, 0x0C, 0x04, 0x06, 0x02, 0x03, 0x01 }; / 全速反转 /
void DelayMs( UINT16 Ms )//延时程序
{
UINT8 i;
while ( Ms-- )
{
for ( i = 0; i < 114; i ); / 110592M,1Ms延时 /
}
}
void MOTOR_FORWARD( void )
{
UINT8 i;
UINT8 j;
for( i = 0; i < 12 ; i ) / 正转一圈360度 /
{
for( j = 0; j < 8; j ) / 8次转30度 /
{
P2 = FORWARD_DATA_BUF[ j ];
DelayMs( 3 ); / 调整转速 /
}
}
P2 = 0; / 停止转动 /
}
void MOTOR_REVERSE( void )
{
UINT8 i;
UINT8 j;
for( i = 0; i < 12 ; i ) / 反转一圈360度 /
{
for( j = 0; j < 8; j ) / 8次转30度 /
{
P2 = REVERSE_DATA_BUF[ j ];DelayMs( 3 ); / 调整转速 /
}
}
P2 = 0; / 停止转动 /
}
void main( void )
{
UINT8 i;
P2 = 0;
while( 1 )
{
MOTOR_FORWARD(); / 正转一圈 /
DelayMs( 1000 );
MOTOR_REVERSE();
DelayMs( 1000 ); / 反转一圈 /
}
}
以上就是关于求利用51单片机实现控制步进电机(PWM电机)前进、后退、加减速 的程序(C语言),以及电路图 不胜感激全部的内容,包括:求利用51单片机实现控制步进电机(PWM电机)前进、后退、加减速 的程序(C语言),以及电路图 不胜感激、用51单片机进行c语言步进电机控制。要求可以控制起停,可以控制正反转。、急急急!!!单片机控制步进电机1小时转1圈的C语言程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)