51单片机控制两路直流电机转速的c程序技巧

51单片机控制两路直流电机转速的c程序技巧,第1张

既然是技巧的话那就不提供详细的代码了,首先要看你这个小车是几轮几驱动的,首先假设你只用一个L298n驱动板的话,那么再假设只含左右两个轮,只对左右两个轮进行控制的话,那么就简单了,首先你要知道L298N驱动板怎么用,不同的驱动板功能都不一定相同,不过控制引脚一般来说都是4根,可以控制两个直流电机的正反转,同时还有两个PWM接口,可以控制两个电机的转速。

假设4个控制引脚分为A1、A2和B1、B2,A1、A2控制第一个直流电机,B1、B2控制第二个直流电机,当A1和A2接不同方向的电流后直流电机会正转或反转,同理B1和B2也是一样。PWM是通过控制占有率来控制电机速度的,即控制高电平和低电平的时间的,不同,这样在规定时间内,如果高电平的时间占有比例越高则电机转速越快,输出功率越高。

知道以上内容了那么之后的内容就更容易理解了

前进:两个直流电机朝正方向同时转动即可

后退:两个直流电机朝反方向同时转动即可

原地左转:类似原地打转,只需让两个电机一个正转一个反转即可,即左转为左边电机反转,右边电机正转

原地右转:与原地左转相反即可

固定轮转:固定左边令右侧轮前进即可实现固定轮转向的目的,例如左转的话令左边电机停止,右侧电机正向转动即可,向右转的话与左转相反。

至于keil程序,这个要根据具体的硬件来写,别人的无法通用,不过这些都不难,只要原理弄懂了,稍微花一点儿时间还是能很容易写出来的,先从控制电机的转向开始。别人的程序的话可能会越看越难理解,还是自己动手比较好,先不考虑调速的情况下完成了之后再去看看有关PWM调速的内容。

例如,把单片机的P10和P11分别接在直流电机的两个电极上。

汇编程序:

ORG 0000H

LJMP MAIN

MAIN :

SETB P10 //反转改为:CLR P10

CLR P11 //SETB P11

SJMP $

END

C51程序:

#include"reg51h"

#define uint unsigned int

#define uchar unsigned char

sbit P10=P1^0;

sbit P11=P1^1;

void delay()

{

uint i,j;

for(i=0;i<1000;i++)

for(j=0;j<500;j++);

}

main()

{

while(1)

{

P10=1;

P11=0;

delay();

P10=0;

P11=1;

delay();

}

}

用的那块芯片 管线的地址 这些都没有,怎么改成汇编?而且分好少

这个是以前我写的

不记得是那块试验板了 只要知道管线地址 很好写的

model small

data

delaytime db 0

nums db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,98h

level db 0ffh,0d0h,0a5h,75h,45h,15h

code

startup

mov dx,0c803h

mov al,10001000b

out dx,al

;

p5:mov dx,0c860h

in al,dx

mov dl,al

and al,2

cmp al,0

je exit

;

mov al,dl

and al,1

cmp al,0

je p2

mov dx,0c802h

mov al,00000001b

p3:out dx,al

call delay

rol al,1

cmp al,10h

jne p3

jmp p5

;

p2:mov dx,0c802h

mov al,00001000b

p1:out dx,al

call delay

ror al,1

cmp al,80h

jne p1

jmp p5

;

exit:mov ax,4c00h

int 21h

;

delay proc near

push ax

push cx

push dx

con1:call gettime

;

mov al,delaytime

mov ah,0

mov bx,50

mov dx,0

div bx

mov bh,al

cmp bh,0

je con1

mov si,offset level

add si,ax

mov al,[si]

mov ah,0

;

l5:dec ax

mov bx,09000h

l6:dec bx

cmp bx,0

jne l6

cmp ax,0

jne l5

pop dx

pop cx

pop ax

ret

delay endp

;

gettime proc near

push ax

push bx

push cx

push dx

mov dx,0c880h

mov al,0

out dx,al

l2:mov dx,0c802h

in al,dx

and al,10000000b

cmp al,0

je l2

mov dx,0c880h

in al,dx

;将延时时间放入delaytime

mov delaytime,al

;mov al,delaytime

mov ah,0

mov bx,10

mov cx,0

l3:mov dx,0

div bx

push dx

inc cx

cmp ax,0

jne l3

mov ah,11110111b

l4:pop dx

;

mov bh,0

mov di,offset nums

mov bx,dx

add di,bx

mov dx,0c800h

mov al,[di]

out dx,al

mov dx,0c801h

mov al,ah

out dx,al

rol ah,1

call delay1;

;

add bx,30h

mov dx,bx

mov bh,ah

mov ah,2

int 21h

mov ah,bh

loop l4

mov dl,0dh

mov ah,2

int 21h

mov dl,0ah

mov ah,2

int 21h

pop dx

pop cx

pop bx

pop ax

ret

gettime endp

delay1 proc near

push ax

push dx

push bx

mov ax,08fh

t2:dec ax

mov bx,03fffh

t1: dec bx

jnz t1

or ax,ax

jne t2

pop bx

pop dx

pop ax

ret

delay1 endp

end

以上就是关于51单片机控制两路直流电机转速的c程序技巧全部的内容,包括:51单片机控制两路直流电机转速的c程序技巧、c51单片机直流电机正反转程序、谁帮忙把步进电机正反转C语言程序转翻译出汇编语言程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/10174610.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存