单片机控制电机正反转动的c语言程序

单片机控制电机正反转动的c语言程序,第1张

首先要看你的电机是直流电机还是步进电机。直流电机就简单了,只有两根线,电机两端电压正负极改变就可以实现正转反转。不过要加电机驱动芯片,或者H桥电路,电机驱动芯片可以选择L298N,加上适当的外围电路就可以直接用单片机控制电机了。比如让单片机P10 = 0,P11 = 1;(单片机I/0口要与电机驱动芯片的输入脚相连)这样的话,电机驱动芯片就会输出一个电压差,可以使直流电机向一个方向转,如果使P10 = 1,P11 = 0,则电机驱动芯片会输出一个和刚才相反的电压,使电机向相反的方向转动。H桥电路和电机驱动芯片的原理差不多,网上多的是。我这说的只是简单的原理,实际中,L298N的输入端和单片机相连的时候要加光耦隔离,否则单片机会工作不正常。步进电机就稍微复杂点,也得需要电机驱动芯片才行,只不过控制信号是按一定的规律给的,规律变了,电机转动的方向也就变了。楼上给出的貌似是步进电机的驱动程序

c语言行不行

#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(5); //调节转速

}

}

}

/

延时程序

/

void delay(unsigned int t)

{

unsigned int k;

while(t--)

{

for(k=0; k<80; k++)

{ }

}

}

main()

{

while(1)

{

K=1;

motor_ffw();

K=2;

motor_ffw();

}

}

52单片机如51单片机的指令集是一样的,写电机的正反转程序,就是用一个电桥啊,就是4个三极管组成桥B,然后对应的墙壁打通就可以让电系症状,另外的对对比对面的桥臂导通可以用电机反转,所以直接用单片机的io口引脚输出高低电平就可以控制电机的症状和反转的。

给你参考下,希望对你有帮助!

/

程序名称: 按键控制电机正反转

p10键为反转 p11键为停止 p12键为正转

/

/头文件/

#include <reg52h>

#include <intrinsh>

#define uint unsigned int

#define uchar unsigned char

#define _Nop() _nop_()

/端口定义/

#define motor P0 /步进电机接口/

sbit P12 = P1^2; /控制正转按键/

sbit P11 = P1^1; /控制电机停止/

sbit P10 = P1^0; /控制电机反转/

uchar code table1[]={0xf9,0xfa,0xf6,0xf5}; /正转表/

uchar code table2[]={0xf9,0xf5,0xf6,0xfa}; /反转表/

/1MS为单位的延时程序/

void delay_1ms(uchar x)

{

uchar j;

while(x--) { for(j=0;j<125;j++); }

}

/主程序/

void main()

{

uchar yunzhuang=0; /运转状况 0停止 1正转 2反转/

uchar count=0; /电机转动步数/

motor = 0xf0; /电机停止/

while(1){

if(yunzhuang==0){

motor = 0xf0; /电机停转/

}

else if(yunzhuang==1){

motor = table1[count]; /电机正转/

}

else if(yunzhuang==2){

motor = table2[count]; /电机反转/

}

count++;

if(count>=4) count=0;

delay_1ms(5);

if(P12==0){

delay_1ms(3);

if(P12==0){

yunzhuang = 1;

}

}

else if(P11==0){

delay_1ms(3);

if(P11==0){

yunzhuang = 0;

count = 0;

}

}

else if(P10==0){

delay_1ms(3);

if(P10==0){

yunzhuang = 2;

}

}

}

}

以上就是关于单片机控制电机正反转动的c语言程序全部的内容,包括:单片机控制电机正反转动的c语言程序、51单片机控制步进电机正反转 在线等 汇编语言编写的程序、52单片机直流电机正反转程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/zz/9986885.html

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

发表评论

登录后才能评论

评论列表(0条)

保存