这个是一个关于Edgebroad的GPIO的操作来实现PWM的类。
这个板子主控其实是AMD的FPGA,所以操作方法其实和其他有GPIO的linux板子方法差不多吧(比如树莓派
操作更像是一种写入寄存器的操作,emmmm,写半天还是成了写单片机编程。
但是是在Liunx下面,所以其实都是对文件的操作和读写,所以读写文件的速度其实对代码执行的速度是有很大影响的,而python的sleep函数在这个地方因为使用cpu的主频来计数,所以时间延时并不是很准确,其他办法正在研究(比如用Ctos
暂时没有别的解释,等到暑假之后再写。
import os
import time
def wr(x):
f = open('/sys/class/gpio/gpio423/value', 'w')
f.write(str(x))
f.close()
class edge_pwm():
def __init__(self,pin) -> None:
pin = pin + 411
self.pin =pin
# print(1)
os.system("echo "+str(pin)+" > /sys/class/gpio/export")
# print(pin)
os.system("echo out > /sys/class/gpio/gpio"+str(pin)+"/direction")
# print(1)
def start(self,DutyCycle,Freq):
self.DutyCycle = DutyCycle
self.Freq = Freq
self.flag = True
self.pwm()
def pwm(self):
self.io_control(0)
while True:
cycle = 1/self.Freq
high_cycle = cycle * (self.DutyCycle/100)
low_cycle = cycle - high_cycle
#print(low_cycle)
self.io_control(1)
time.sleep(high_cycle)
#print(high_cycle)
self.io_control(0)
#print(low_cycle)
time.sleep(low_cycle)
def io_control(self,io):
#os.system("echo "+str(io)+" > /sys/class/gpio/gpio"+str(self.pin)+"/value")
# print(2)
f = open("/sys/class/gpio/gpio"+str(self.pin)+"/value", 'w')
f.write(str(io))
f.close()
def ChangeDutyCycle(self,DutyCycle):
self.DutyCycle = DutyCycle
if __name__ == "__main__":
p = edge_pwm(12)
p.start(8,50)
qwqpap