wringPi 初始化GPIO 为上拉_玩转GPIO之PWM点亮呼吸灯(非树莓派)
在这篇文章,我介绍了基于逸宸电子开发的总线适配器来点亮LED灯的基本方法!
myastrotong:玩转GPIO之点灯(非树莓派)zhuanlan.zhihu.com
这款总线适配器的介绍见这里:
工业级高速USB转SPI I2C PWM GPIO UART CAN接口电压可软件配置item.taobao.com
没错,就是这个物件,一款USB转GPIO等常见接口的总线适配器,看上去牛皮的不得了。
学会了点灯,自然要挖掘一些高级点的玩法,以下是基于这个总线适配器点亮呼吸灯的玩法。
在很多需要调光的场合都采用PWM(脉冲调制)的方式调光(也称为“数字调光”),就是在固定流经LED的电流大小的情况下,通过占空比可调节的PWM脉冲来反复控制LED的导通和关断 。 导通的时候LED按照设定好的电流值发出相应亮度的光,关断的时候LED不亮。如果PWM脉冲的重复周期高于人眼视觉暂留需要的频率,特别是达到50Hz以上后,一般人眼就觉察不出LED的闪烁了,从而通过改变PWM脉冲的占空比就能够改变LED的亮度。
熄灭之前就又打开了,那么灯实际上是会维持在一个亮度的,或者你的眼睛看上去灯会维持在一个亮度。如果你一直保持某一个固定的频率,那么电灯就会保持一个固定的亮度。理论上,你可以通过调整开灯持续的时间长度和关灯持续的时间长度的比例,从而得到不同亮度。这个比例被称为“占空比”。
通过调整“占空比”就可以做到呼吸灯的效果。
准备硬件:一个三色信号灯(你也可以选择一个发光二极管和一个电阻,我这里仅仅是为了方便)、两根母对公杜邦线。
查询官方文档,总线适配器的各个GPIO的定义如下:
我选择接入PWM_CH3接口端(也就是P8端口)。白色杜邦线接入CH3接口和三色灯的G口,黄色杜邦线接入总线适配器的GND端和三色灯的GND端。
接好的效果图如下:
然后基于官方示例文件进行修改。修改examplespythonUSB2PWMUSB2PWM_Test下面的USB2PWM_Test.py文件:
from ctypes import *
import platform
from time import sleep
from usb_device import *
from usb2pwm import *if __name__ == '__main__': DevIndex = 0DevHandles = (c_int * 20)()# Scan deviceret = USB_ScanDevice(byref(DevHandles))if(ret == 0):print("No device connected!")exit()else:print("Have %d device connected!"%ret)# Open deviceret = USB_OpenDevice(DevHandles[DevIndex])if(bool(ret)):print("Open device success!")else:print("Open device faild!")exit()# Get device infomationUSB2XXXInfo = DEVICE_INFO()USB2XXXFunctionString = (c_char * 256)()ret = DEV_GetDeviceInfo(DevHandles[DevIndex],byref(USB2XXXInfo),byref(USB2XXXFunctionString))if(bool(ret)):print("USB2XXX device infomation:")print("--Firmware Name: %s"%bytes(USB2XXXInfo.FirmwareName).decode('ascii'))print("--Firmware Version: v%d.%d.%d"%((USB2XXXInfo.FirmwareVersion>>24)&0xFF,(USB2XXXInfo.FirmwareVersion>>16)&0xFF,USB2XXXInfo.FirmwareVersion&0xFFFF))print("--Hardware Version: v%d.%d.%d"%((USB2XXXInfo.HardwareVersion>>24)&0xFF,(USB2XXXInfo.HardwareVersion>>16)&0xFF,USB2XXXInfo.HardwareVersion&0xFFFF))print("--Build Date: %s"%bytes(USB2XXXInfo.BuildDate).decode('ascii'))print("--Serial Number: ",end='')for i in range(0, len(USB2XXXInfo.SerialNumber)):print("%08X"%USB2XXXInfo.SerialNumber[i],end='')print("")print("--Function String: %s"%bytes(USB2XXXFunctionString.value).decode('ascii'))else:print("Get device infomation faild!")exit()# Initialize adcPWMConfig = PWM_CONFIG()#我选的是P8,对应的PWM是CH3 二进制是1000 ->16进制是0x08PWMConfig.ChannelMask = 0x08for i in range(0,8):PWMConfig.Polarity[i] = 1 # 将所有PWM通道都设置为正极性for i in range(0,8):PWMConfig.Precision[i] = 100 # 将所有通道的占空比调节精度都设置为1%for i in range(0,8):PWMConfig.Prescaler[i] = 10 # 将所有通道的预分频器都设置为10,则PWM输出频率为200MHz/(PWMConfig.Precision*PWMConfig.Prescaler)for i in range(0,8):PWMConfig.Pulse[i] = PWMConfig.Precision[i]*30//100 # 将所有通道的占空比都设置为30%# 初始化PWMret = PWM_Init(DevHandles[DevIndex],byref(PWMConfig));if ret != PWM_SUCCESS:print("Initialize pwm faild!")exit()else:print("Initialize pwm sunccess!")print(DevHandles[DevIndex])# 启动PWM,RunTimeOfUs之后自动停止,利用该特性可以控制输出脉冲个数,脉冲个数=RunTimeOfUs*200/(PWMConfig.Precision*PWMConfig.Prescaler)#RunTimeOfUs=0,表示一直输出 RunTimeOfUs = 0ret = PWM_Start(DevHandles[DevIndex],PWMConfig.ChannelMask,RunTimeOfUs)if(ret != PWM_SUCCESS):print("Start pwm faild!")exit()else:print("Start pwm sunccess!")try:while (True):#改变PWM波形占空比 for j in range(0,101,2):for i in range(0,8):PWMConfig.Pulse[i] = j PWM_SetPulse(DevHandles[DevIndex],PWMConfig.ChannelMask,PWMConfig.Pulse)sleep(0.05) for j in range(100,-1,-2):for i in range(0,8):PWMConfig.Pulse[i] = j PWM_SetPulse(DevHandles[DevIndex],PWMConfig.ChannelMask,PWMConfig.Pulse) sleep(0.05) except KeyboardInterrupt:pass# 停止PWM# l、et = PWM_Stop(DevHandles[DevIndex],PWMConfig.ChannelMask)# if(ret != PWM_SUCCESS):# print("Stop pwm faild!");# exit()# else:# print("Stop pwm sunccess!")# Close deviceret = USB_CloseDevice(DevHandles[DevIndex])if(bool(ret)):print("Close device success!")else:print("Close device faild!")exit()
关键控制电路部分的代码为:
我选择的是CH03端口,所以对应的
PWMConfig.ChannelMask = 0x08
然后程序通过修改如下代码来改变占空比:
PWMConfig.Pulse[i] = j
并且先通过占空比增加,然后使占空比减小,从而得到呼吸灯暗亮的间歇变化。
效果视频如下:
点亮一盏呼吸灯https://www.zhihu.com/video/1224789136399835136
以上就是通过PWM来点亮一盏呼吸灯的全部过程。
wringPi 初始化GPIO 为上拉_玩转GPIO之PWM点亮呼吸灯(非树莓派)相关推荐
- wringPi 初始化GPIO 为上拉_你彻底弄清GPIO内部结构和各种模式了吗?
据说能将处理器的GPIO(General Purpose Input and Output)内部结构和各种模式彻底弄清楚的人并不多?那现在就让多一点 GPIO的功能,简单说就是可以根据自己的需要去配置 ...
- wringPi 初始化GPIO 为上拉_敏矽微电子Cortex-M0学习笔记04-GPIO详解及应用实例
前面我们已经对敏矽微电子的基于cortex m0内核的ME32F030R8T6的基本功能做了介绍,然后详细讲解了开发环境MDK的安装,pack包的安装,工程的建立及程序的仿真,紧接着讲解了ME32F0 ...
- esp32找不到com端口_玩转GPIO之ESP32点灯大法(MicroPython版)
在这篇文章,介绍了ESP32搭建Python开发环境的基本流程. myastrotong:玩转GPIO之ESP32搭建Python开发环境zhuanlan.zhihu.com 搭建基本开发环境以后, ...
- 鸿蒙开发板hi3861 hispark code 2.0 canary金丝雀版本,gpio如何上拉电阻呢?
鸿蒙开发板hi3861 hispark code 2.0 canary金丝雀版本,gpio如何上拉电阻呢? code 2.0 LTS支持,canary没有这个功能呢 IoSetPull(WIFI_IO ...
- wringPi 初始化GPIO 为上拉_GPIO接口
//阅读完大约10min //本文中的正文,改编自以下链接评论,由于非常全面明晰,所以我将之采纳. STM32的I/O口的8种工作模式-OpenEdv-开源电子网www.openedv.com 前言 ...
- wringPi 初始化GPIO 为上拉_GPIO子系统重要概念
来源:百问网 作者:韦东山 本文字数:3161,阅读时长:5分钟 1.1 引入 要操作GPIO引脚,先把所用引脚配置为GPIO功能,这通过Pinctrl子系统来实现. 然后就可以根据设置引脚方向(输入 ...
- 使用TIM3和TIM4,驱动外接LED和STM32上已焊接的LED,实现2个 LED呼吸灯的效果
文章目录 一.PWM相关介绍 1.PWM的含义 2.PWM的基本原理 3.PWM的优点及应用范围 4.STM32上的PWM 5.PWM相关寄存器 6.PWM脉冲宽度调制 7.PWM的频率 二.实现呼吸 ...
- micropython arduino选哪个好_玩转GPIO之ESP32基于MicroPython与Arduino的计算性能测试
ESP32芯片简直是玩转Arduino的性价比之王,为了摸清其特性,本文分别基于MicroPython与Arduino对ESP32进行计算性能测试.本文采用的硬件是NodeMCU-32S. 本文测试M ...
- stm32核心板可以点亮灯吗_利用STM32F103C8T6最小系统板点亮流水灯
后台网友建议制作一个流水灯,正好发现自己有之前购买的STM32F103C8T6核心板,今天搭建一个流水灯,正好学习一下STM32 GPIO输出如何实现,将来驱动蜂鸣器.继电器等都会使用的. 流水灯相当 ...
最新文章
- 两个三维图像互信息python_python – 使用numpy计算成对互信息的最佳方式
- 1060 爱丁顿数 (25 分)(思维)
- unity3d 鼠标事件穿透GUI的处理
- 共享两个做项目最常用功能操作的封装类
- adf可以自定义溶剂吗_ADF Faces。 立即的自定义客户端事件
- c语言float m1 m2什么意思,m1和m2的区别,一文带你秒懂这两者的关联
- HappyLeetcode64:Sqrt(x)
- Turbo码:3GPP TS 36.212
- html怎么隐藏y方向内容,如何隐藏scroll-Y纵向滚动条,并不影响内容滚动的方法...
- POJ 1830.开关问题(高斯消元)
- 2012年4月份第2周51Aspx源码发布详情
- SQL2000和SQL2005同时安装问题(转载)
- 基于springboot的物流管理系统设计与实现 JAVA MYSQL
- html设置等宽字体效果
- matlab转换为函数表达式,matlab中将符号表达式转换为函数
- Linux使用命令行工具管理用户和组
- 电商 秒杀系统 设计思路和实现方法
- excel冻结窗格怎么同时冻结行和列
- 初中数学可以用计算机吗,中学生利用手机电脑学习数学可行吗?
- hadoop dremel Caffeine Pregel
热门文章
- php文件上传到虚拟主机,php源码上传到虚拟主机(php源码上传到服务器)
- 如何在linux下yum安装mysql_linux下使用yum安装mysql详解
- Matlab给Ansys助攻
- 正常矩形计算IOU与与NMS,多边形计算IOU
- 【每日SQL打卡】DAY 1丨部门工资最高的员工【难度中等】
- Scrapy 爬虫教程导航
- Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件表达式)
- gtx1660是什么级别的_GTX1660Ti到底属于什么系列?Nvidia一句话定性了
- 重力加速度换算_中考物理重难点汇总——公式换算大全
- linux修改python版本修改哪个配置文件_linux安装python修改默认python版本方法