0

背景:我正在测试一部分代码以在更大的项目中实现。在测试中,我有一个函数可以生成正弦波的值并以一定的分辨率将其输出到我的电机驱动器(在我的代码中,我正在输出分辨率为每秒 1000 点 (1kHz) 的 1hz 正弦波) . 我将该函数称为多处理进程,因为在我的项目中就是这样。该函数生成该值,然后在生成下一个值之前剩余的任何时间都休眠,通常这是有效的,但每隔一段时间,循环会花费 100 倍以上的时间,并尝试休眠一段负时间,从而导致崩溃代码。所有代码都在树莓派 3B+ 上实现

我的问题:为什么突然要花这么长时间?(我也尝试过较低的分辨率,500hz 和 333hz)

from DFRobot_RaspberryPi_Motor.raspberry.DFRobot_RaspberryPi_DC_Motor import DFRobot_DC_Motor_IIC as Board
from time import sleep, time
import math
import multiprocessing
freq_motor = 1
res_period = .001

def OutputSine():
    global freq_motor, res_period
    a = 2 * math.pi*freq_motor
    t0 = time()
    while True:
        t1 = time()
        duty = 50 + 50 * math.sin(a * (t1 - t0))
        board.motor_movement([board.M1], board.CW, duty)
        b = (time() - t1)
        print(b)
        sleep(res_period - b)

if __name__ == '__main__':
    board = Board(1, 0x10)

    while board.begin() != board.STA_OK:  # Board begin and check board status
        print("board begin faild")
    print("board begin success")

    board.set_encoder_disable(board.ALL)  # Set selected DC motor encoder disable
    board.set_moter_pwm_frequency(10000)  # Set DC motor pwm frequency to 1000HZ
    p1 = multiprocessing.Process(target=OutputSine, args=())
    p1.start()
    p1.join()

示例输出

4

0 回答 0