首页 > 编程语言 >PID小车用python代码写

PID小车用python代码写

时间:2023-12-03 10:04:15浏览次数:52  
标签:duty PWM python 小车 PID frequency GPIO pwm speed

import time
import RPi.GPIO as GPIO

# 设置GPIO模式
GPIO.setmode(GPIO.BOARD)

# 定义电机引脚
Motor1A = 16
Motor1B = 18
Motor2A = 22
Motor2B = 40

# 设置引脚为输出模式
GPIO.setup(Motor1A, GPIO.OUT)
GPIO.setup(Motor1B, GPIO.OUT)
GPIO.setup(Motor2A, GPIO.OUT)
GPIO.setup(Motor2B, GPIO.OUT)

# 定义PWM频率
pwm_frequency = 50

# 创建PWM实例
pwm1 = GPIO.PWM(Motor1A, pwm_frequency)
pwm2 = GPIO.PWM(Motor1B, pwm_frequency)
pwm3 = GPIO.PWM(Motor2A, pwm_frequency)
pwm4 = GPIO.PWM(Motor2B, pwm_frequency)

# 启动PWM
pwm1.start(0)
pwm2.start(0)
pwm3.start(0)
pwm4.start(0)

def set_motor_speed(speed):
    # 根据速度设置占空比
    duty_cycle1 = speed * 100 / pwm_frequency
    duty_cycle2 = speed * 100 / pwm_frequency
    duty_cycle3 = speed * 100 / pwm_frequency
    duty_cycle4 = speed * 100 / pwm_frequency

    # 设置占空比
    pwm1.ChangeDutyCycle(duty_cycle1)
    pwm2.ChangeDutyCycle(duty_cycle2)
    pwm3.ChangeDutyCycle(duty_cycle3)
    pwm4.ChangeDutyCycle(duty_cycle4)

try:
    while True:
        # 设置电机速度
        set_motor_speed(50)
        time.sleep(1)
        set_motor_speed(100)
        time.sleep(1)
        set_motor_speed(150)
        time.sleep(1)
except KeyboardInterrupt:
    # 停止PWM并清理GPIO
    pwm1.stop()
    pwm2.stop()
    pwm3.stop()
    pwm4.stop()
    GPIO.cleanup()

标签:duty,PWM,python,小车,PID,frequency,GPIO,pwm,speed
From: https://blog.51cto.com/u_15784394/8664230

相关文章

  • PID小车弹跳的做法
    PID小车弹跳的做法如下:首先,需要确定弹跳的高度和速度。可以通过实验或者观察来确定这些参数。然后,需要计算弹跳过程中的加速度。根据物理学知识,弹跳过程可以分为两个阶段:自由落体阶段和上升阶段。在自由落体阶段,物体的速度是恒定的,而在上升阶段,物体的速度逐渐增加。因此,需要......
  • PID小车平衡和跳跃的核心代码
    PID小车平衡和跳跃的核心代码主要包括以下几个部分:初始化PID控制器参数,包括比例系数Kp、积分系数Ki和微分系数Kd。读取传感器数据,如陀螺仪、加速度计等,用于计算小车的旋转角度和速度。根据传感器数据计算PID控制器的输出,即控制信号。将控制信号转换为电机驱动信号,控制小车的转向和......
  • 聪明办法学python chap 6字符
    聪明办法学pythonchap6字符四种引号:单引号,双引号区分不大两种引号可以在打印中打印出引号;三引号:写多好,注释换行号\转义字符\n代表换行也可以在多行print时打\来排除换行保持美观双引号\""reprandprint:输出看起来一样,实际却不一样repr可以识别转义的字符(......
  • 聪明办法学Python Task06&Task07
    定义函数  1函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()        2任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数        3函数内容以冒号 : 起始,并且缩进        4return[表达......
  • 【python笔记】contextlib,自定义with语句
    参考书籍:《深度学习入门——自制框架》[日]斋藤康毅步骤18.5使用with语句切换with语法python中的with语句,用于自动进行后处理。如文件读写:withopen('sample.txt','w')asf:f.write('hellosb!')这段代码等价于f=open('sample.txt','w')f.write('hellosb!&......
  • 聪明办法学python chap5循环
    聪明办法学pythonchap5循环for循环:重复执行特定范围的循环,知道已知循环次数可以用forfor_inrange()左闭右开区间range(起始默认为0,终止,步长默认为1)while循环:不知道循环什么时候停下来跳出循环:break:跳出循环continue:跳出本次循环;进入下一次循环......
  • 聪明办法学Python Task06&Task07
    循环LOOPfor循环在知道循环次数的情况下forxinrange(m,n):!!!注意:1.range(m,n)中包含x,不包含y(前闭后开);​ 2.省略第一个参数时,默认起始范围是0;​ 3.当添加第三个参数时:​ 第三个参数代表“步长”​ 如:foriinrange(0,10,2):print(i)输......
  • 第四次python学习笔记
    循环结构:1.while循环:用法:while条件:条件成立重复执行的代码1条件成立重复执行的代码2......示例一:计算1-100累加和分析:1-100的累加和,即1+2+3+4+….,即前两个数字的相加结果+下一个数字(前一个数字+1)。 i=1num =0......
  • python并行之flask-socketio
    1、服务器端fromflaskimport*fromflask_socketioimport*fromflask_socketioimportSocketIOfromnasbench_lib.nasbench_201importNASBench201importrandomimportsubprocessclassServer:def__init__(self,gpu):self.app=Flask(__name__)......
  • python task4
    python(四)循环for循环和循环范围for循环的特点基于提供的范围,重复执行特定次数的操作for_inrange(m,n+1)range(x,y)是左闭右开区间,包含x,不包含y(如果省略第一个参数,range起始范围默认为0)(如果添加第三个参数,第三个参数为“步长”step)或者defsumF......