在这篇文章,我介绍了基于逸宸电子开发的总线适配器来点亮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点亮呼吸灯(非树莓派)相关推荐

  1. wringPi 初始化GPIO 为上拉_你彻底弄清GPIO内部结构和各种模式了吗?

    据说能将处理器的GPIO(General Purpose Input and Output)内部结构和各种模式彻底弄清楚的人并不多?那现在就让多一点 GPIO的功能,简单说就是可以根据自己的需要去配置 ...

  2. wringPi 初始化GPIO 为上拉_敏矽微电子Cortex-M0学习笔记04-GPIO详解及应用实例

    前面我们已经对敏矽微电子的基于cortex m0内核的ME32F030R8T6的基本功能做了介绍,然后详细讲解了开发环境MDK的安装,pack包的安装,工程的建立及程序的仿真,紧接着讲解了ME32F0 ...

  3. esp32找不到com端口_玩转GPIO之ESP32点灯大法(MicroPython版)

    在这篇文章,介绍了ESP32搭建Python开发环境的基本流程. myastrotong:玩转GPIO之ESP32搭建Python开发环境​zhuanlan.zhihu.com 搭建基本开发环境以后, ...

  4. 鸿蒙开发板hi3861 hispark code 2.0 canary金丝雀版本,gpio如何上拉电阻呢?

    鸿蒙开发板hi3861 hispark code 2.0 canary金丝雀版本,gpio如何上拉电阻呢? code 2.0 LTS支持,canary没有这个功能呢 IoSetPull(WIFI_IO ...

  5. wringPi 初始化GPIO 为上拉_GPIO接口

    //阅读完大约10min //本文中的正文,改编自以下链接评论,由于非常全面明晰,所以我将之采纳. STM32的I/O口的8种工作模式-OpenEdv-开源电子网​www.openedv.com 前言 ...

  6. wringPi 初始化GPIO 为上拉_GPIO子系统重要概念

    来源:百问网 作者:韦东山 本文字数:3161,阅读时长:5分钟 1.1 引入 要操作GPIO引脚,先把所用引脚配置为GPIO功能,这通过Pinctrl子系统来实现. 然后就可以根据设置引脚方向(输入 ...

  7. 使用TIM3和TIM4,驱动外接LED和STM32上已焊接的LED,实现2个 LED呼吸灯的效果

    文章目录 一.PWM相关介绍 1.PWM的含义 2.PWM的基本原理 3.PWM的优点及应用范围 4.STM32上的PWM 5.PWM相关寄存器 6.PWM脉冲宽度调制 7.PWM的频率 二.实现呼吸 ...

  8. micropython arduino选哪个好_玩转GPIO之ESP32基于MicroPython与Arduino的计算性能测试

    ESP32芯片简直是玩转Arduino的性价比之王,为了摸清其特性,本文分别基于MicroPython与Arduino对ESP32进行计算性能测试.本文采用的硬件是NodeMCU-32S. 本文测试M ...

  9. stm32核心板可以点亮灯吗_利用STM32F103C8T6最小系统板点亮流水灯

    后台网友建议制作一个流水灯,正好发现自己有之前购买的STM32F103C8T6核心板,今天搭建一个流水灯,正好学习一下STM32 GPIO输出如何实现,将来驱动蜂鸣器.继电器等都会使用的. 流水灯相当 ...

最新文章

  1. 两个三维图像互信息python_python – 使用numpy计算成对互信息的最佳方式
  2. 1060 爱丁顿数 (25 分)(思维)
  3. unity3d 鼠标事件穿透GUI的处理
  4. 共享两个做项目最常用功能操作的封装类
  5. adf可以自定义溶剂吗_ADF Faces。 立即的自定义客户端事件
  6. c语言float m1 m2什么意思,m1和m2的区别,一文带你秒懂这两者的关联
  7. HappyLeetcode64:Sqrt(x)
  8. Turbo码:3GPP TS 36.212
  9. html怎么隐藏y方向内容,如何隐藏scroll-Y纵向滚动条,并不影响内容滚动的方法...
  10. POJ 1830.开关问题(高斯消元)
  11. 2012年4月份第2周51Aspx源码发布详情
  12. SQL2000和SQL2005同时安装问题(转载)
  13. 基于springboot的物流管理系统设计与实现 JAVA MYSQL
  14. html设置等宽字体效果
  15. matlab转换为函数表达式,matlab中将符号表达式转换为函数
  16. Linux使用命令行工具管理用户和组
  17. 电商 秒杀系统 设计思路和实现方法
  18. excel冻结窗格怎么同时冻结行和列
  19. 初中数学可以用计算机吗,中学生利用手机电脑学习数学可行吗?
  20. hadoop dremel Caffeine Pregel

热门文章

  1. php文件上传到虚拟主机,php源码上传到虚拟主机(php源码上传到服务器)
  2. 如何在linux下yum安装mysql_linux下使用yum安装mysql详解
  3. Matlab给Ansys助攻
  4. 正常矩形计算IOU与与NMS,多边形计算IOU
  5. 【每日SQL打卡】DAY 1丨部门工资最高的员工【难度中等】
  6. Scrapy 爬虫教程导航
  7. Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件表达式)
  8. gtx1660是什么级别的_GTX1660Ti到底属于什么系列?Nvidia一句话定性了
  9. 重力加速度换算_中考物理重难点汇总——公式换算大全
  10. linux修改python版本修改哪个配置文件_linux安装python修改默认python版本方法