大家好,本人因项目需求使用了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的控制(欢迎补充)相关推荐

  1. 对于linux socket与epoll配合相关的一些心得记录

    对于linux socket与epoll配合相关的一些心得记录 没有多少高深的东西,全当记录,虽然简单,但是没有做过测试还是挺容易让人糊涂的 int nRecvBuf=32*1024;//设置为32K ...

  2. 记录基于MXCube,使用STM32F103RCT6 ADC多通道采集 的学习经验

    记录基于MXCube,使用STM32F103RCT6 ADC多通道采集 推荐保存一下参考博客(https://www.cnblogs.com/xingboy/p/10212308.html) ADC转 ...

  3. 船模、富斯遥控器、电调联调心得记录

    @[船模.富斯遥控器.电调联调心得记录] 富斯遥控器 我用的是富斯i6版本的遥控器,接收机为FS-iA6B,可以输出PWM,PPM,i-bus,我测试了两种输出方式,前两个,主要有以下记录: 1.PP ...

  4. APM编译记录-基于OMNIBUSF4-V3飞控板

    APM编译记录-基于OMNIBUSF4-V3飞控板 APM编译记录 Bootloader问题 固件编译 APM编译记录 初次使用APM,根据博客文章以及结合官方教程摸索,发现和PX4还是有挺大差别的, ...

  5. matlab 离散控制系统仿真,基于Matlab的离散控制系统仿真.doc

    2014 / 2015 学年第 1 学期 计算机控制技术 实 验 报 告 班 级 学 号 1108030301 学 生 姓 名 蔡 梦 指 导 教 师 张 坤 鳌 实验二 基于 Matlab 的离散控 ...

  6. 倒立摆C语言双闭环控制程序,基于双闭环PID控制的一阶倒立摆控制系统的设计(最终版)...

    <基于双闭环PID控制的一阶倒立摆控制系统的设计.doc>由会员分享,可在线阅读全文,更多相关<基于双闭环PID控制的一阶倒立摆控制系统的设计(最终版)>请在www.woc88 ...

  7. AspNetForums中基于角色的权限控制

    AspNetForums中基于角色的权限控制 http://blog.joycode.com/dotey/archive/2005/02/24/44791.aspx asp.net页面如何控制页面依据 ...

  8. 液位系统c语言程序,基于STM32的液位控制系统设计

    程训明 董婷婷 摘 要:本文设计一种基于STM32的液位控制系统,该控制系统采用STM32作为控制核心,使用压力传感器采集水箱内的液位,通过串口触摸屏进行液位显示和给定,对水位进行有效的闭环控制.系统 ...

  9. 玩转树莓派---详解树莓派的系统烧录,基础使用及基于树莓派制作手势控制的小车(附详细代码及演示效果)

    目录 一.写在前面 二.系统实现: Author:qyan.li Date:2022.6.10 Topic:详解树莓派的使用及基于树莓派制作手势控制的小车 Reference:如何给树莓派安装操作系统 ...

  10. matlab 离散控制系统仿真,实验二-基于Matlab的离散控制系统仿真.doc

    实验 基于Matlab的离散控制系统仿真一.实验目的 学习使用Matlab命令对控制系统进行仿真的方法. 学习使用Simulink工具箱对控制系统进行仿真的方法. 二.实验原理 1. 控制系统命令行仿 ...

最新文章

  1. 用了10年的微信表情,它居然偷偷把烟给戒了...
  2. 【分享】一个集成tracert和ping的网络监测工具
  3. div中的p标签于img设置同一水平_HTML网页制作常用标签及说明——前端开发入门...
  4. jvm初体验:堆溢出处理
  5. 域名如何转移?域名转移流程有哪些?
  6. 手机h5像素_拍照超逆天!华为P30大奖来袭 | 4000万像素+50倍变焦,漳州手机摄影界真要沸腾了......
  7. Selctive Search中的ABO评价方法
  8. 如何使用CANoe和CANalyzer中的Diagnostics/ISO TP
  9. 10年的工作经验?还是1个经验反复用了10年?
  10. Verilog学习之路(7)— 数字加法器
  11. 锁定计算机小键盘,笔记本数字键盘锁了要怎么办【图文教程】
  12. GitLab针对关键账户接管漏洞发布安全补丁
  13. 无线桥接怎么设置网关和dns服务器,无线桥接怎么设置网关和dns服务器
  14. Linux如何安装mysql数据库
  15. S7-200SMART 模拟量输入输出
  16. 什么是Oracle AOL
  17. 复杂推理的进展与挑战——从LSAT讲起
  18. Windows install.
  19. 唯百特测绘仪器GPS全站维修配件中心
  20. firebird java_Firebird与java的连接

热门文章

  1. java实现调用百度图像识别API,批量识别车辆车型、颜色等信息
  2. 利用Depends查看win系统下exe程序的依赖项
  3. netsetman使用教程_网络管理软件NetSetMan安装教程
  4. mysql数据库学习汇总
  5. Django技术文档
  6. 微信公众号模板消息推送
  7. MATLAB高斯平顶化,一种高斯光束变换为平顶光束整形透镜的粒子群设计方法与流程...
  8. window10_vs2015安装教程
  9. 纯净版VS2015安装教程(适合初次安装或者重装系统后)
  10. vue颜色选择器插件