pyboard使用心得记录-基于对sk6812的控制(欢迎补充)
大家好,本人因项目需求使用了pyboard进行了一些开发,遇到一些问题,在这里总结一下,希望可以帮助到大家,由于涉及到一些我的个人理解,如果有问题和建议,可以在下面进行纠正和补充。
关于MicroPython的效率
pyboard的固件主要包含了MicroPython的环境,可以区别于C语言的编程,实现python编程和交互。这种模式就非常适合于在线控制和记录。但是MicroPyhon的存在使得MCU执行效率远低于C语言,下面举出实例:
我尝试使用GPIO的翻转电平实现pyboard对SK6812RGBW(WS2812) LED阵列进行控制,从led的手册可以了解一个码元周期为1.2us,再进行高低电平区分的话,MCU的翻转电平时间不能超过300us,这对于理论GPIO最高能达到84MHz的stm32f405来数还是不困难的,然而有意思的是当我用python仅进行高低电平翻转并用示波器检测时,翻转速度仅有77KHZ, 即使使用MicroPython中stm库对寄存器直接控制,测试代码如下:
from pyb import Pin,freq
import stm
freq()
led = Pin('Y9',Pin.OUT_PP)while 1:
#stm.mem32[stm.GPIOA + stm.GPIO_BSRR] = 1 << 2
led.high()
led.low()
关于对sk6812的控制的实现
基于此,如果仍然想用pyboard实现us甚至ns级别的信号控制,还有两个方案:
1 . 如01Studio提供的LEDarray例程中的思路,使用SPI进行控制。硬件SPI的执行不会受到编译环境的影响,可以最高效率地实现信号输出;
由于我手头没有合适接口的LEDarray阵列进行对例程进行测试,我就直接使用示波器来检测信号输出结果。比较匪夷所思的是代码(ws2812.py)中使用的SPI是硬件SPI,而在main.py中定义的管脚是Y11,而Y11并非mosi引脚,而结果也确实没有在Y11中记录到有效的时序信号,不知道是什么问题。但是可以通过示波器记录到Y9的SCK信号。当我将例程中的引脚设置为Y8或者X8的时候,记录到的理想的信号,可惜的是我的硬件设计中Y8X8都另有他用,我只能尝试其他方案。
2 . 使用MicroPyhon中已经包装好的python可以调用的C函数去执行信号输出
实际上,上述使用Y11管脚初始化SPI的时候,控制台就会报出警告说Y11非SPI管脚,建议使用MicroPyhon中提供的SoftSPI代替SPI函数,据了解类似这样的库函数实际上都是C编写的,执行效率会远高于我们用python自行编写的SoftSPI函数,参考 https://docs.micropython.org/en/latest/library/machine.SPI.html#machine.SoftSPI 。当我使用SoftSPI代替01Studio的ws2812.py中的SPI后,成功在Y11中记录到了可以使用的信号。这里@一下01Studio的技术人员是不是例程中有些笔误,当然也有可能是我测试有些细节存在问题导致的。
上述的方法已经可以解决ws2812的控制,并且由于SoftSPI的存在,我在我的硬件上使用其他多余的管脚实现了对LEDarray的控制,但是高频刷新的时候会存在一些抖动,这可能是由于SoftSPI存在一定程度的不稳定性(在示波器中可以观察到),更有可能是我设计LEDarray的时候忘记添加退耦电容(
pyboard使用心得记录-基于对sk6812的控制(欢迎补充)相关推荐
- 对于linux socket与epoll配合相关的一些心得记录
对于linux socket与epoll配合相关的一些心得记录 没有多少高深的东西,全当记录,虽然简单,但是没有做过测试还是挺容易让人糊涂的 int nRecvBuf=32*1024;//设置为32K ...
- 记录基于MXCube,使用STM32F103RCT6 ADC多通道采集 的学习经验
记录基于MXCube,使用STM32F103RCT6 ADC多通道采集 推荐保存一下参考博客(https://www.cnblogs.com/xingboy/p/10212308.html) ADC转 ...
- 船模、富斯遥控器、电调联调心得记录
@[船模.富斯遥控器.电调联调心得记录] 富斯遥控器 我用的是富斯i6版本的遥控器,接收机为FS-iA6B,可以输出PWM,PPM,i-bus,我测试了两种输出方式,前两个,主要有以下记录: 1.PP ...
- APM编译记录-基于OMNIBUSF4-V3飞控板
APM编译记录-基于OMNIBUSF4-V3飞控板 APM编译记录 Bootloader问题 固件编译 APM编译记录 初次使用APM,根据博客文章以及结合官方教程摸索,发现和PX4还是有挺大差别的, ...
- matlab 离散控制系统仿真,基于Matlab的离散控制系统仿真.doc
2014 / 2015 学年第 1 学期 计算机控制技术 实 验 报 告 班 级 学 号 1108030301 学 生 姓 名 蔡 梦 指 导 教 师 张 坤 鳌 实验二 基于 Matlab 的离散控 ...
- 倒立摆C语言双闭环控制程序,基于双闭环PID控制的一阶倒立摆控制系统的设计(最终版)...
<基于双闭环PID控制的一阶倒立摆控制系统的设计.doc>由会员分享,可在线阅读全文,更多相关<基于双闭环PID控制的一阶倒立摆控制系统的设计(最终版)>请在www.woc88 ...
- AspNetForums中基于角色的权限控制
AspNetForums中基于角色的权限控制 http://blog.joycode.com/dotey/archive/2005/02/24/44791.aspx asp.net页面如何控制页面依据 ...
- 液位系统c语言程序,基于STM32的液位控制系统设计
程训明 董婷婷 摘 要:本文设计一种基于STM32的液位控制系统,该控制系统采用STM32作为控制核心,使用压力传感器采集水箱内的液位,通过串口触摸屏进行液位显示和给定,对水位进行有效的闭环控制.系统 ...
- 玩转树莓派---详解树莓派的系统烧录,基础使用及基于树莓派制作手势控制的小车(附详细代码及演示效果)
目录 一.写在前面 二.系统实现: Author:qyan.li Date:2022.6.10 Topic:详解树莓派的使用及基于树莓派制作手势控制的小车 Reference:如何给树莓派安装操作系统 ...
- matlab 离散控制系统仿真,实验二-基于Matlab的离散控制系统仿真.doc
实验 基于Matlab的离散控制系统仿真一.实验目的 学习使用Matlab命令对控制系统进行仿真的方法. 学习使用Simulink工具箱对控制系统进行仿真的方法. 二.实验原理 1. 控制系统命令行仿 ...
最新文章
- 用了10年的微信表情,它居然偷偷把烟给戒了...
- 【分享】一个集成tracert和ping的网络监测工具
- div中的p标签于img设置同一水平_HTML网页制作常用标签及说明——前端开发入门...
- jvm初体验:堆溢出处理
- 域名如何转移?域名转移流程有哪些?
- 手机h5像素_拍照超逆天!华为P30大奖来袭 | 4000万像素+50倍变焦,漳州手机摄影界真要沸腾了......
- Selctive Search中的ABO评价方法
- 如何使用CANoe和CANalyzer中的Diagnostics/ISO TP
- 10年的工作经验?还是1个经验反复用了10年?
- Verilog学习之路(7)— 数字加法器
- 锁定计算机小键盘,笔记本数字键盘锁了要怎么办【图文教程】
- GitLab针对关键账户接管漏洞发布安全补丁
- 无线桥接怎么设置网关和dns服务器,无线桥接怎么设置网关和dns服务器
- Linux如何安装mysql数据库
- S7-200SMART 模拟量输入输出
- 什么是Oracle AOL
- 复杂推理的进展与挑战——从LSAT讲起
- Windows install.
- 唯百特测绘仪器GPS全站维修配件中心
- firebird java_Firebird与java的连接