求利用51单片机实现控制步进电机(PWM电机)前进、后退、加减速 的程序(C语言),以及电路图 不胜感激

求利用51单片机实现控制步进电机(PWM电机)前进、后退、加减速 的程序(C语言),以及电路图 不胜感激,第1张

#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语言程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9297640.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存