树莓派3无人驾驶学习笔记小车代码ing及L298N驱动电路资料

l298n驱动电路接线图

L298N引脚功能说明
ENAIN1IN2直流电机状态
0XX停止
100制动
101正转
110反转
111制动

 

 

 

 

 

 

 

PS:驱动供电电源(6-12V) 要接12V供电5V输出用来给单片机供电,不过树莓派一般用另外独立电源供电.
使用说明:
1、直流电机的驱动:
该驱动板可驱动2路直流电机,使能端ENA、ENB 为高电平时有效,控制方
式及直流电机状态如上表所示:
直流电机进行PW]M调速,需设置IN1和IN2,确定电机的转动方向,
然后对使能端输出PWM脉冲,即可实现调速。注意当使能信号为0时,电机处于
自由停止状态,当使能信号为1,且IN1和IN2为00或11时,电机处于制动状
态,阻止电机转动。.
 

#coding=utf-8
import RPi.GPIO as GPIO
import time

backMotorInput1=7
backMotorInput2=11

frontMotorInput1=13
frontMotorInput2=15
#两个使能端口:
backMotorEn=12 
frontMotorEn=16


GPIO.setmode(GPIO.BOARD)

#设置输出两个电机四根线对应的4个端口,要使用哪个端口需先设置声明
GPIO.setup(backMotorInput1,GPIO.OUT)
GPIO.setup(backMotorInput2,GPIO.OUT)
GPIO.setup(frontMotorInput1,GPIO.OUT)
GPIO.setup(frontMotorInput2,GPIO.OUT)
#设置便能输出使用的通道口:
GPIO.setup(backMotorEn,GPIO.OUT)
GPIO.setup(frontMotorEn,GPIO.OUT)



speed=30
soft=80
#设置脉冲控制电能输出,以控制车速:
backMotorPwm=GPIO.PWM(backMotorEn,100)

#设置脉冲控制电能输出,以控制转向力度:
frontMotorPwm=GPIO.PWM(frontMotorEn,100)

'''
配置PWM :
backMotorPwm = GPIO.PWM(backMotorEN, 100)
第一个参数为在哪个端口输出PWM波
第二个参数为方波频率为多少赫兹

'''

backMotorPwm.start(0)
frontMotorPwm.start(0)
'''开始输出PWM
backMotorPwm.start(0)
参数为占空比,单个周期中高电压占的比例
可接受的参数为数字,范围是0~100

改变频率
p.ChangeFrequency(freq)   # where freq is the new frequency in Hz

改变PWM的占空比:
backMotorPwm.ChangeDutyCycle(66)
参数为占空比
可接受的参数为数字,范围是0~100

停止输出PWM,节能:
backMotorPwm.stop()
'''

#前进
def carMoveForward():
	GPIO.output(backMotorInput1,GPIO.LOW)
	GPIO.output(backMotorInput2,GPIO.HIGH)
	backMotorPwm.ChangeDutyCycle(speed)
	
#后退    
def carMoveBackward():
	GPIO.output(backMotorInput1,GPIO.HIGH)
	GPIO.output(backMotorInput2,GPIO.LOW)
	backMotorPwm.ChangeDutyCycle(speed)
	

#直行  使前轮失控制,设置转向控制使不能,前轮回正,:
def carTurnStraight():
	frontMotorPwm.ChangeDutyCycle(0)
	
	#用低电平,使‘不能’的方式,起不到失控作用了。
	GPIO.output(frontMotorEn,GPIO.LOW)

	
	
#左转
def carTurnLeft():
	#使前电机能:
	#变速执行时优先于使能
	frontMotorPwm.ChangeDutyCycle(soft)
	GPIO.output(frontMotorEn,GPIO.HIGH)
	GPIO.output(frontMotorInput1,GPIO.LOW)
	GPIO.output(frontMotorInput2,GPIO.HIGH)
	backMotorPwm.ChangeDutyCycle(20)
	
#右转
def carTurnRight():
	#使前电机能:
	GPIO.output(frontMotorEn,GPIO.HIGH)
	
	GPIO.output(frontMotorInput1,GPIO.HIGH)
	GPIO.output(frontMotorInput2,GPIO.LOW)
	frontMotorPwm.ChangeDutyCycle(soft)
	backMotorPwm.ChangeDutyCycle(20)

	
#停止
def carStop():
	GPIO.output(backMotorInput1,GPIO.LOW)
	GPIO.output(backMotorInput2,GPIO.LOW)
	GPIO.output(frontMotorInput1,GPIO.LOW)
	GPIO.output(frontMotorInput2,GPIO.LOW)
	
#释放端口
def cleanGPIO():
	
	#stop()后,依然是高电平,似无关于节能:
	backMotorPwm.stop()
	
	#print(GPIO.input(16))获得frontMotorEn引脚即第16引脚的值
	#代码GPIO.input(channel)将返回一个0 / GPIO.LOW / False或者1 / GPIO.HIGH / True.
	frontMotorPwm.stop()
		
	GPIO.output(frontMotorEn,GPIO.LOW)
	
	GPIO.cleanup()
	

if __name__=='__main__':
	carMoveForward()
	time.sleep(2)
	
	carTurnLeft()
	carMoveForward()
	time.sleep(2)
	
	carStop()
	time.sleep(3)
	
	carTurnStraight()
	carMoveBackward()
	time.sleep(2)
	
	carStop()
	time.sleep(2)
	
	carTurnRight()
	carMoveForward()
	time.sleep(2)
		
	cleanGPIO()
	


'''
	carMoveBackward()
	
	time.sleep(2)

	carTurnRight()
	time.sleep(2)
	carTurnStraight()
	carMoveForward()
	time.sleep(2)
'''	
	
	

可参考:

RPI.GPIO Python使用手册:

1.中文https://blog.csdn.net/oAlevel/article/details/79212949

2.英文https://sourceforge.net/p/raspberry-gpio-python/wiki/BasicUsage/

3https://blog.csdn.net/qq_27320195/article/details/104449211?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159188870519195264537063%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=159188870519195264537063&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v1~rank_blog_v1-1-104449211.pc_v1_rank_blog_v1&utm_term=RPi.GPIO+%E6%A8%A1%E5%9D%97%E7%BC%96%E7%A8%8B%E6%89%8B%E5%86%8C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值