
首先要看你的电机是直流电机还是步进电机。直流电机就简单了,只有两根线,电机两端电压正负极改变就可以实现正转反转。不过要加电机驱动芯片,或者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单片机直流电机正反转程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)