1396|0

155

帖子

1

TA的资源

一粒金砂(高级)

楼主
 

【Luckfox幸狐 RV1106 Linux 开发板测评】七、PWM控制——Python和设备树方式 [复制链接]

 

本人【Luckfox幸狐 RV1106 Linux 开发板测评】帖子链接:

一、开箱及测试

二、SDK获取与编译镜像

三、GPIO点灯

四、通过PC机共享网络接入Internet和Ubuntu下Python点灯

五、编译Buildroot系统并测试摄像头

六、PWM控制——命令和C方式

 

上篇测评做了控制台命令控制PWM点亮LED,并利用C程序实现了呼吸灯效果,本篇测评继续以Python和设备树方式进行实现。

1、Python控制PWM

基于Luckfox SDK编译的Buildroot镜像包含Python3,而且已经附带了python-periphery库,直接使用此库即可完成Linux系统下的外围驱动。相应代码由Luckfox Wiki提供,依然使用PWM10。

# 导入periphery.PWM库
from periphery import PWM
import time

# 创建一个PWM对象,使用PWM chip-10,channel-0
pwm = PWM(10, 0)

try:
    # 设置PWM的频率为1000Hz
    pwm.frequency = 1000
    # 设置PWM的初始占空比为0
    pwm.duty_cycle = 0
    # 设置PWM的极性为正常
    pwm.polarity = "normal"
    # 启用PWM输出
    pwm.enable()

    # 定义方向变量,初始值为1,表示增加占空比的方向
    direction = 1

    # 无限循环,持续改变PWM的占空比
    while True:
        # 每次循环增加或减少占空比0.01,具体方向由direction变量决定
        pwm.duty_cycle += 0.01 * direction
        # 保留两位小数,确保占空比的精度
        pwm.duty_cycle = round(pwm.duty_cycle, 2)
        # 当占空比达到1时,改变方向为减少占空比
        if pwm.duty_cycle == 1.0:
            direction = -1
        # 当占空比达到0时,改变方向为增加占空比
        elif pwm.duty_cycle == 0.0:
            direction = 1

        # 每次循环后暂停0.05秒,控制PWM的速度变化
        time.sleep(0.05)

# 当用户按下Ctrl+C时,捕获键盘中断异常并退出循环
except KeyboardInterrupt:
    pass

# 不论程序是否正常结束,最后都要关闭PWM通道以释放资源
finally:
    pwm.close()

 

 

图7-1 pwm.py推送到开发板并执行

 

2、修改设备文件开启PWM0

文档PWM篇中提到开发板默认开启的是PWM10,Pro Max板对应管脚GPIO1_C6_d,同时还给出修改设备文件的方法,用以开启其它管脚的PWM功能。

SDK中RV1106相关的设备文件有很多,大胆盲猜一下,应该是“rv1106g-luckfox-pico-pro-max.dts”。不过为了稳妥,还是依照文档方法通过查看配置文件的相关设置值来确定板子对应的设备文件。因为是Pro Max NAND Flash上的Buildroot系统,所以配置文件是“../luckfox-pico/project/cfg/BoardConfig_IPC/BoardConfig-SPI_NAND-Buildroot-RV1106_Luckfox_Pico_Pro_Max-IPC.mk”。文件的第四项即是设备文件名称:

 

 

图7-2 rv1106相关设备文件

 

 

图7-3 配置文件可以看到Pro Max板对应的设备文件

 

另外,从管脚图上可以看到PWM0和I2C3_SDA是同一管脚,所以编辑设备文件时需要注释掉I2C3的代码(因为默认是开启I2C3的),然后添加PWM0的代码(文件实际注释了相关代码,去掉注释即可)。这里要注意管脚图上看到Pro Max板是PWM0_M1,设备文件管脚有m0和m1,不要错选成m0了。

 

 

图7-4 PWM0和I2C3共用管脚

 

 

 

 

图7-5 设备文件的修改方法

 

修改并保存设备文件后,回到SDK的根路径,接着还是编译内核的过程:./build.sh lunch-->选择8(对应Pro Max)-->./build.sh。因为前面编译过整个系统(当时花费3小时),这次再做build,短短几分钟就好了——文档说是./build.sh kernel即只编译内核,本人忘记加kernel参数,但是也只用了不到10分钟就编译完成。

接着还是将镜像从虚拟机拷贝到本机,再利用工具SocToolKit烧写到开发板,之后重启开发板ADB进入控制台,执行命令ls -l /sys/class/pwm得到:

 

 

图7-6 更新设备树后看到PWM0

 

如果要测试程序,只要把前面的Python代码中,pwm的实例定义修改一下构造函数传参为PWM(0, 0)即可。

 

 

图7-7 修改Python代码

 

 

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
滤波器设计基础

滤波器基础设计讲义 6547 6548

LM3S8962 GPIO函数库研究(连载)

GPIO 端口控制8个相互独立的IO管脚,实际管脚号代表对于数据的高低顺序位。每个管脚有下面的功能 1. 可以配置输入或输出。一旦 ...

新年第一猛帖——基于LM3S8962小型气象站

玩LM3S8962有一段时间了,感觉很爽,但也没有写出很好的资料出来,因为研究别人写好的实验程序,别人也把研究资料也几乎写光写烂 ...

自己DIY的一块DC转DC的负压模块

此模块为集成块LTC3863制作 规格尺寸很小,只有一块《RMB一元大小》 一,这是芯片部分资料介绍: 390241 二,芯片推荐电路: ...

【SAMR21新玩法】汇总

本帖最后由 dcexpert 于 2019-10-18 11:36 编辑 436737 与传统开发方法不同的用法,不需要IDE和编译器,使用python和图形 ...

像这种点亮烙铁头烤蓝的方法有什么好处?

650524 650523

【先楫HPM6750EVK2】二:使用HPM SDK驱动RGB LED

本帖最后由 数码小叶 于 2023-1-8 21:08 编辑 上一篇已经安装好了Segger Embedded Studio for RISC-V,并且已经下好了HPM SDK ...

【得捷电子Follow me第2期】任务1:控制屏幕显示中文(必做任务)

实验步骤: 1. 硬件准备 2. 下载使用adafruit-circuitpython-bundle 库 3. 下载使用字库 3. 编写代码 4. 显示中 ...

RF永远有学不完的东西

看到这个题目大家是不是有共鸣。真的感觉无线通信这块真的是一直在出新的技术啊~~~ 让我们先来盘一盘: 2G到3G到4G到5G到5 ...

AD采样的有效值如何计算?

霍尔传感器将电流信号送进芯片引脚,假设进入芯片引脚的电压是0-3V,这是一个周期性的正弦信号,请问在芯片内部是怎么求出其有效 ...

关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表