如何在 Go 中控制 Raspi 上的 PWM 引脚,就像我在 Python 中所做的那样?



我有一个Raspberry Pi 3B,我想用它使用PWM控制电机。在 Python 中,这将非常适用于将 GPIO 引脚的电压从 0% 逐渐增加到 100% (100% == 3.3V(:

import RPi.GPIO as GPIO
from time import sleep
PWM_PIN = 13
GPIO.setmode(GPIO.BCM)
GPIO.setup(PWM_PIN, GPIO.OUT)
p = GPIO.PWM(PWM_PIN, 1000)
p.start(0)
for i in range(101):
print(i)
p.ChangeDutyCycle(i)
sleep(0.1)
sleep(5)  # Keep the voltage at 100% for 5 seconds, after which the program ends

由于我正在用 Go 编写我的程序,我现在想在 Go 中做同样的事情(或类似(。这就是我的镜头。

package main
import (
"fmt"
"time"
rpio "github.com/stianeikeland/go-rpio"
)
const (
PWM_PIN = 13
)
func main() {
err := rpio.Open()
if err != nil {
panic(err)
}
motor_pin_pwm := rpio.Pin(PWM_PIN)
motor_pin_pwm.Mode(rpio.Pwm)
motor_pin_pwm.Freq(1000)
motor_pin_pwm.DutyCycle(0, 100)

fmt.Println("Waiting...")
time.Sleep(5 * time.Second)
fmt.Println("Start the increase...")
for i := 1; i <= 100; i++ {
fmt.Println(i)
motor_pin_pwm.DutyCycle(uint32(i), 100)
time.Sleep(100 * time.Millisecond)
}
time.Sleep(5 * time.Second)
}

这里有一个使用 go-rpio 来控制 PWM 的例子。该示例旨在控制 LED 而不是电机,但我想代码应该非常相似(如果不是相同的话(。该示例使用不同的值,因此我弄乱了这些值,但没有结果。

我在这里错过了什么?

好的,找到了。使用 PWM 时,程序必须以 root 身份运行。

最新更新