简 介: 测试了APA102C的工作机制。利用MM32F3277 MicroPython中的SPI控制APA102C工作。

关键词APA102CMM32F3277SPI

#mermaid-svg-1dMRs5eydBfToic6 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1dMRs5eydBfToic6 .error-icon{fill:#552222;}#mermaid-svg-1dMRs5eydBfToic6 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-1dMRs5eydBfToic6 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-1dMRs5eydBfToic6 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1dMRs5eydBfToic6 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1dMRs5eydBfToic6 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1dMRs5eydBfToic6 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1dMRs5eydBfToic6 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-1dMRs5eydBfToic6 .marker.cross{stroke:#333333;}#mermaid-svg-1dMRs5eydBfToic6 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1dMRs5eydBfToic6 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-1dMRs5eydBfToic6 .cluster-label text{fill:#333;}#mermaid-svg-1dMRs5eydBfToic6 .cluster-label span{color:#333;}#mermaid-svg-1dMRs5eydBfToic6 .label text,#mermaid-svg-1dMRs5eydBfToic6 span{fill:#333;color:#333;}#mermaid-svg-1dMRs5eydBfToic6 .node rect,#mermaid-svg-1dMRs5eydBfToic6 .node circle,#mermaid-svg-1dMRs5eydBfToic6 .node ellipse,#mermaid-svg-1dMRs5eydBfToic6 .node polygon,#mermaid-svg-1dMRs5eydBfToic6 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-1dMRs5eydBfToic6 .node .label{text-align:center;}#mermaid-svg-1dMRs5eydBfToic6 .node.clickable{cursor:pointer;}#mermaid-svg-1dMRs5eydBfToic6 .arrowheadPath{fill:#333333;}#mermaid-svg-1dMRs5eydBfToic6 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-1dMRs5eydBfToic6 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-1dMRs5eydBfToic6 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-1dMRs5eydBfToic6 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-1dMRs5eydBfToic6 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-1dMRs5eydBfToic6 .cluster text{fill:#333;}#mermaid-svg-1dMRs5eydBfToic6 .cluster span{color:#333;}#mermaid-svg-1dMRs5eydBfToic6 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-1dMRs5eydBfToic6 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

APA102C
目 录
Contents
背景介绍
设计测试板
测试APA102C
测试总结

§01 APA102C


一、背景介绍

  最初是由学生在公众号(TSINGHUAZHUOQING)提问,是否允许使用APA102C制作无线充电车模的电压显示。从TB( APA102C 5050 RGB 灯珠 内置IC 单点控全彩灯珠 APA102正品灯珠5V , ¥0.5/piece)购买到一些样品进行测试。

  APA102C 是一款集成有亮度控制的彩色(RGB)LED灯珠,采用两线控制方式,适合大多数MCU的IO口控制。比起 WS2812 使用单线脉冲序列来说,APA102C对于信号的波形没有太多的要求,因此使用起来应该是更加的方便。

二、设计测试板

1、管脚封装

  下面是APA102C放大后的图片,可以看到:

  • 内部的R,G,BLED的分布;
  • PIN1 对应的斜三角的标志;

▲ 图1.2.1 APA102C放大图片

(1)封装尺寸

▲ 图1.2.2 APA102C 管脚封装信息

▲ 图1.2.3 根据APA102C封装图像测量对应的封装尺寸

(2)建立元器件AD库

AD元器件库:
原理图:APA102C
PCB:APA102C

▲ 图1.2.4 元器件库

2、测试电路板

  下面是APA102C 应用电路参考图。

▲ 图1.2.5 APA102C 应用电路参考图

AD\Test\2021\LED\TestAPA102C.PcbDoc

(1)测试电路板

  下面设计由三个APA102C组成的测试电路。

▲ 图1.2.6 测试电路原理图

▲ 图1.2.7 快速制版测试PCB

(2)焊接PCB

▲ 图1.2.8 焊接之后的测试PCB

三、测试APA102C

1、APA102C控制协议

(1)级联控制协议

▲ 图1.3.1 级联控制协议

  下面是单个字节发送协议。

▲ 图1.3.2 发送字节协议

  因此可以使用MCU的SPI进行控制。SPI的模式:

SPI的模式:
Polarity:1
Phase:1

2、测试平台

  使用 设计带有SD卡的 MM32F3277 MicroPython 实验板 ,通过MicroPython编程,使用其中的SoftSPI进行控制。

【表1-3-2 MM32 SPI端口定义】
SPI管脚 SCK MOSI MISO
SPI0 PA5 PA7 PA6
SPI1 PA3 PB4 PB3
SPI2 PC9 PA8 PB9

(1)搭建测试平台

  在面包板上搭建测试电路。利用MM32F3277的SPI0,对应的SPI端口:

SPI端口:
SCK:PA5
MOSI:PA7
MISO:PA6

▲ 图1.3.3 面包板上搭建测试电路

(2)测试SPI发送字符

 Ⅰ.测试代码
from machine                import Pin,SPI
import utimespi = SPI(0, baudrate=100000, polarity=1, phase=1)
print(spi)buf = bytes((0x55,))
while True:spi.write(buf)utime.sleep_ms(100)
 Ⅱ.SPI波形

  如下是SPI中的SCK,MOSI的波形。可以看到它符合APA102c的串行通信协议。

▲ 图1.3.4 SPI中的SCK,MOSI的波形

3、测试LED点亮

(1)控制一个APA102C

 Ⅰ.测试代码
def led1buf(r,g,b):'''led1buf: Construct one APA102C dataParam r: Red LED lightParam g: Green LED lightParam b: Blue LED lightReturn: buf : 8+4=12bytes'''return bytes([0]*4) + bytes((0x1f, b, g, r)) + bytes([0xff]*4)buf = led1buf(0x80, 0xff, 0x20)
print(buf)

  测试输出:

SPI(id=0, baudrate=100000, polarity=1, phase=1)
b'\x00\x00\x00\x00\x1f \xff\x80\xff\xff\xff\xff'
 Ⅱ.点亮第一个灯
from machine                import Pin,SPI
import utimespi = SPI(0, baudrate=100000, polarity=1, phase=1)
print(spi)led = Pin('PB2', Pin.OUT_PUSHPULL)def led1buf(r,g,b):'''led1buf: Construct one APA102C dataParam r: Red LED lightParam g: Green LED lightParam b: Blue LED lightReturn: buf : 8+4=12bytes'''return bytes([0]*4) + bytes((0x1f, b, g, r)) + bytes([0xff]*4)buf = led1buf(0x80, 0xff, 0x20)
print(buf)spi.write(buf)while True:led(led()^1)utime.sleep_ms(100)

▲ 图1.3.5 第一个APA102C被点亮

(2)点亮三个LED

 Ⅰ.测试代码
def led3buf(l1,l2,l3):'''led3buf: Construct three APA102C LED dataParam l1: LED 1 (rgb)Param l2: LED 2 (rgb)Param l3: LED 3 (rgb)Return: buf : 8+4*3=20bytess'''return bytes([0]*4) + bytes((0x1f,l1[2],l1[1],l1[0])) + bytes((0x1f,l2[2],l2[1],l2[0])) + bytes((0x1f,l3[2],l3[1],l3[0])) + bytes([0xff]*4)buf = led3buf((0xff,0xff,0xff),(0xff,0xff,0xff),(0xff,0xff,0xff))
print(buf)spi.write(buf)
 Ⅱ.测试结果

▲ 图1.3.6 点亮三个LED

4、复杂LED控制

(1)流水灯

 Ⅰ.测试代码
#------------------------------------------------------------
def led3light(l1,l2,l3):return bytes([0]*4) + bytes((0x1f,l1,l1,l1)) + bytes((0x1f,l2,l2,l2)) + bytes((0x1f,l3,l3,l3)) + bytes([0xff]*4)#------------------------------------------------------------
count = 0
while True:led(led()^1)utime.sleep_ms(100)#--------------------------------------------------------count += 1if count >= 3: count = 0if count == 0:buf = led3light(0xff, 0, 0)elif count == 1:buf = led3light(0, 0xff, 0)else:buf = led3light(0, 0, 0xff)spi.write(buf)
 Ⅱ.测试结果

▲ 图1.3.7 测试流水灯的效果

  注意:从上述测量结果来看,最后一个LED并没有完全熄灭。因此。在输出数据的时候,最后不足一个(0000),看是否可以将最后一个LED完全熄灭?

  错误: 看错了!将LED控制的第一个字节修改为0xff,便可以满足控制要求了。

def led3light(l1,l2,l3):return bytes([0]*4) + bytes((0x1f,l1,l1,l1)) + bytes((0x1f,l2,l2,l2)) + bytes((0x1f,l3,l3,l3)) + bytes([0]*4) + bytes([0xff]*4)

▲ 图1.3.8 发送四个LED,可以完全将最后一个熄灭

(2)呼吸灯
from machine                import Pin,SPI
import utimespi = SPI(0, baudrate=100000, polarity=1, phase=1)
print(spi)led = Pin('PB2', Pin.OUT_PUSHPULL)def led1buf(r,g,b):'''led1buf: Construct one APA102C dataParam r: Red LED lightParam g: Green LED lightParam b: Blue LED lightReturn: buf : 8+4=12bytes'''return bytes([0]*4) + bytes((0xff, b, g, r)) + bytes([0xff]*4)def led3buf(l1,l2,l3):'''led3buf: Construct three APA102C LED dataParam l1: LED 1 (rgb)Param l2: LED 2 (rgb)Param l3: LED 3 (rgb)Return: buf : 8+4*3=20bytess'''return bytes([0]*4) + bytes((0xff,l1[2],l1[1],l1[0])) + bytes((0xff,l2[2],l2[1],l2[0])) + bytes((0xff,l3[2],l3[1],l3[0])) + bytes([0xff]*4)def led3light(l1,l2,l3):return bytes([0]*4) + bytes((0xff,0, 0, l1)) + bytes((0xff,0,l2, 0)) + bytes((0xff,l3,0,0)) + bytes([0xff]*4)count = 0
flag = 0
while True:led(led()^1)utime.sleep_ms(1)if flag == 0:count += 5if count >= 0xff:flag = 1count = 0xffelse:count -= 5if count <= 0:flag = 0count = 0buf = led3light(count,count,count)spi.write(buf)

▲ 图1.3.9 呼吸灯测试结果

※ 测试总结 ※


  测试了APA102C的工作机制。利用MM32F3277 MicroPython中的SPI控制APA102C工作。


■ 相关文献链接:

  • APA102C 5050 RGB 灯珠 内置IC 单点控全彩灯珠 APA102正品灯珠5V
  • APA102C
  • WS2812串行可控彩色LED灯珠
  • 设计带有SD卡的 MM32F3277 MicroPython 实验板

● 相关图表链接:

  • 图1.2.1 APA102C放大图片
  • 图1.2.2 APA102C 管脚封装信息
  • 图1.2.3 根据APA102C封装图像测量对应的封装尺寸
  • 图1.2.4 元器件库
  • 图1.2.5 APA102C 应用电路参考图
  • 图1.2.6 测试电路原理图
  • 图1.2.7 快速制版测试PCB
  • 图1.2.8 焊接之后的测试PCB
  • 图1.3.1 级联控制协议
  • 图1.3.2 发送字节协议
  • 表1-3-2 MM32 SPI端口定义
  • 图1.3.3 面包板上搭建测试电路
  • 图1.3.4 SPI中的SCK,MOSI的波形
  • 图1.3.5 第一个APA102C被点亮
  • 图1.3.6 点亮三个LED
  • 图1.3.7 测试流水灯的效果
  • 图1.3.8 发送四个LED,可以完全将最后一个熄灭
  • 图1.3.9 呼吸灯测试结果

APA102C全彩色LED控制IC相关推荐

  1. 全彩色LED灯带中应用到的LED炫彩灯

    全彩色LED灯带:所谓LED全彩灯带便是指把LED组装在带状的FPC柔性线路板或PCB硬板上,因其产品形状象一条带子而得名.全彩色LED灯带和幻彩跑马灯条都可控制单灯跑马.流水.开窗.流星追尾.追逐等 ...

  2. 什么型号的全彩LED显示屏适合酒店大厅?

    什么型号的全彩LED显示屏适合酒店大厅? 现在很多一XIAN城市都去酒店会议室举办大型活动. 例如企业庆祝会.婚礼庆祝会.大型会议.大型演出.企业年终总结会.新居搬迁庆祝会等. 所有这些都需要迈普光彩 ...

  3. 实战microPython(05)-WS2812全彩LED灯串的控制

    实战microPython(05)-WS2812全彩LED灯串的控制 David Zou 2018-09-17 在喜庆的节日中,我们经常使用彩灯串来增加节日的气氛.最早期的使用的是单色的小灯珠,只有亮 ...

  4. VK1668带键盘扫描接口的LED(发光二极管显示器)驱动控制IC功能及作用介绍

    型号:VK1668 品牌:VINKA/永嘉微电/永嘉微 封装形式:SOP24/SSOP24 年份:新年份 概述 VK1668 是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成 ...

  5. stm32 led屏控制卡_全彩LED显示屏出现亮线的时候怎么处理比较好呢?

    全彩LED显示屏相对于液晶拼接屏而言,其出现亮线.屏幕小故障的概率要比液晶拼接屏大很多,但是,一般来说这些小故障很容易处理,所以全彩LED显示屏的拥护者还是众多的.全彩LED显示屏出现亮线的时候怎么处 ...

  6. Processing控制彩色LED灯

    Processing控制彩色LED灯 公众号:STCode 1-RGB彩色LED模块简介 LED是发光二极管的简称,它是半导体二极管的一种,可以把电能转化成光能.LED灯已经大量进入人们的生活.普通的 ...

  7. 按键开关多功能LED灯控制芯片,多模式手电筒控制IC

    本控制IC是一款针对低压 LED 灯的专用芯片,具有完整的充电功能和完善的电池保护功能,具有按键控制开关.电路简单无需单片机配合 具有 LED 灯短路保护功能.QK1209还具有省电模式,静态待机电流 ...

  8. LED数显驱动芯片,LED数码管驱动芯片VK1650,LED驱动控制IC,键盘扫描集成电路,内置RC震荡电路

    VINKA/永嘉微电LED显示屏驱动主要应用于以下: 1:VCR.VCD.DVD 及家庭影院等显示屏驱动. 2:电磁炉.微波炉.冰箱.空调 .家庭影院等高段位显示屏驱动. 3:LED显示屏驱动,电子秤 ...

  9. kotlin设置按钮不可点击_全彩LED显示屏软件空点功能如何设置、使用?

    全彩LED显示屏的显示功能得以实现,所使用的软件功不可没.可以说是显示屏所展现的一切的效果和特性,都得归功于软件和显示屏设备.全彩LED显示屏软件空点功能如何设置.使用,你们知道吗?下面景信科技小编为 ...

最新文章

  1. python-模块安装方法
  2. 电影院票务管理系统数据库设计(2)
  3. HTML中如何给HTML元素添加事件
  4. 用c语言实现简单的tcp协议,实现一个简单的TCP协议下的C/S
  5. 网上论坛生成测试数据方法(抢分利器)
  6. boost::asio::deadline_timer(理解)
  7. 简单算法系列之完数的计算
  8. 不忘初芯 NEC发布系列工程显示新品解决方案
  9. [Linux程序设计][调试][splint]
  10. 网管服务器和网管终端,网管员须知:二、三、四、七层交换技术区别
  11. matlab图形黎曼几何,黎曼几何不一致的定理—元数学与元物理学(22)
  12. 骨骼动画原理学习笔记
  13. excel表格公式使用失败,输出只有公式,没显示结果
  14. Win11磁盘碎片整理在哪?Win11机械硬盘磁盘碎片整理方法
  15. 总是在崩溃的边缘徘徊,可能这就是成年人的生活吧!!!!
  16. 入门级蓝牙遥控小车制作教程
  17. miui修改Android,无法修改小米MIUI设备中的系统设置
  18. 主成分分析PCA算法:为什么去均值以后的高维矩阵乘以其协方差矩阵的特征向量矩阵就是“投影”?
  19. Unity中的RectTransform
  20. Java source1.5不支持diamond运算符,请使用source 7或更高版本以启用diamond运算符

热门文章

  1. C#多线程编程(1)--线程,线程池和Task
  2. 用Xamarin.Forms创建移动应用程序
  3. 【Asp.Net】得到http请求中的参数语句
  4. 通过 .gitlab-ci.yml配置任务-官方配置文件翻译
  5. iOS中 HTTP/Socket/TCP/IP通信协议详解 韩俊强的博客
  6. CentOS7搭建LNMP--编译安装
  7. 在AWS Lambda上运行脚本语言:PHP、Ruby和Go(外文翻译)
  8. Linux设置程序开机启动-tomcat开机启动
  9. js复制input 框中的值
  10. iOS - Swift NSValue 值