这个是一个关于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)