本文为版权内容,文章内容(包括但不限于文字、图片、声音、录像、图表、软件、程序)未经版权人书面许可,任何人不得引用、复制、转载、摘编或以其他任何方式非法使用。
Copyright material!
All material on this page is copyright of ZhangFeng(zjjszhangf@gmail.com) unless otherwise acknowledged. Duplication or sale of all or any part of it is not permitted.
作者:张锋 (zjjszhangf@gmail.com)
Notice:Video camera causes the flicker rolling bar.
本制作功能及特点
1、使用真彩色1.5〃高亮度OLED显示屏,显示效果奇佳,展现出绝对艳丽的色彩与全视角的显示效果;
2、主显示界面采用机械手表外观,指针边界平滑,走时效果顺畅,软件层增加了优化渲染与阴影效果,仿真度极高;
3、超小尺寸制作,成品长宽只有3.6mm*3.6mm,与OLED屏尺寸基本相同,组装采用层叠式结构,可制成超小型显示设备;
4、采用STM32-103系列处理器,具备高速处理能力与丰富的片上资源,单芯片即可实现所需功能,电路简单,零件少,成本低;
5、板上带有可充电式微型锂电池作为后备电池,当主电源掉电后,可在一定时间内维持RTC实时时钟正常走时;
6、制作采用全贴片零件,尽量将厚度做到最小,PCB板四周包含四个调整用的微型侧按按钮,日后制作配套外壳时可方便使用按键功能;
1、OLED简介:
OLED全称为Organic Light Emitting Diode(有机发光二极管),又可以作为有机电致发光显示器(Organic Electroluminesence Display, OELD)的缩写,它是最近几年流行起来的新型显示技术。OLED利用有机半导体材料在电流驱动下发出可见光的原理实现显示,被业界认为是未来的最具发展前景的新一代显示器件,具有替代TFT-LCD的能力。
OLED 显示器件的优点:
1、OLED显示器件属主动发光器件,无需背光源,无需偏振片,厚度上就可以比LCD做的更薄、重量更轻。常见的OLED屏在厚度上基本都在2毫米以下,还不到LCD屏的1/3,是到目前为止通用市场上最薄的彩色发光器件之一。同时,主动发光带来的另外一个优点就是视角广,OLED视角接近180度,在任何角度看过去,显示效果完全一致,可以说是真正意义上的全视角显示器件。通常在TFT LCD显示器件中只有IPS或MVA类的TFT屏才具有“全视角”效果,此类TFT屏与普通屏相比视角的确很宽,显示效果也比较好,但在大角度下观看,亮度还是有明显的衰减,无法与OLED屏的显示效果相媲美。
2、与LCD相比较,OLED的响应速度快,仅几微秒到几十微秒,而通常的TFT-LCD的响应速度则需要几十毫秒,OLED在展现高速运动画面时不会出现拖影问题;
3、具有优异的物理特性与温度范围。OLED属全固态显示器件,内部无液体材料,抗震动性能优良,可在大加速度与振动等恶劣环境下使用;且工作温度范围宽-40℃~80℃,尤其是低温特性好,可在-40摄氏度的环境下正常显示,而传统TFT-LCD的温度范围只有-20℃~60℃,且随着温度的降低,其响应速度随之变慢,影响低温下的显示效果;
4、OLED属电流发光器件,发光转化效率高,比LCD耗能低。且其耗电程度与点亮的像素点的多少成正比例,即点亮的像素点越少,屏幕所需要的电流也就越小,屏幕就越省电。
5、OLED制程的60%左右都与TFT相同,且工艺更加简单,制造成本更低,性价比更高。同时支持多种不同的基板材料,可以做出可弯曲的柔性显示器。
OLED器件的基本结构
从结构图上来看,OLED器件是一种由多层薄膜顺序层叠组成的结构。以玻璃基板为基础,上下两端分别是作为电极使用的透明ITO导电阳极和金属阴极,通常OLED的阴极为具有高反射性的金属薄膜,可提高OLED器件的性能。在两导电曾之间夹着空穴注入层(HTL)、复合发光层(EL)和电子传输层(ETL),这些层的组成物质为有机物,当在两电极之间施加一定的正向直流电压后,载流子的注入,电子传输层的电子和空穴注入层的空穴分别向发中间的光层迁移,在复合发光层发生相遇后,电子和空穴复合产生激子(exciton),激子在电场的作用将能量传递给发光分子,并激发电子从基态跃迁到激发态。激发态能量通过辐射跃迁,发出可见光。此过程完成了由电能转换成可见光的整个过程。通常情况下,只有部分的能量会经由“单重态到基态”(singlet to ground state)的形式转换成发光形式,剩余能量将转换成磷光或热的形式回归到基态。
OLED制作中,通过调整有机膜的材料与特性或使用彩色滤光片,可以实现发出不同波长的光,制造出彩色显示器件。
从驱动形式上分,OLED大致可分为“有源驱动”(Active Matrix,AM OLED)和“无源驱动”(Passive Matrix,PM OLED)两类。实际上,这两种驱动形式与LCD屏的驱动形式类似。有源驱动的结构与TFT-LCD相似,单独的像素都有对应的薄膜晶体管与对应的电容来存储与控制信号,以实现对像素点的亮度控制,保持稳定的显示效果,主要用于大屏幕领域;无源驱动与CSTN类似,使用行列交叉的电极进行动态显示刷新,通常用来驱动小尺寸低像素的显示屏,可以用来显示少量的本和简单的图形。
OLED显示器件目前存在的问题
1、价格过高,屏幕尺寸偏小。由于尚未象TFT LCD那样大规模、大批量生产,OLED屏目前价位还是偏高,暂无法在价格上与TFT LCD屏竞争。目前市场上的应用主要还是以小尺寸、低分辨率的OLED屏幕为主,常见应用领域为Mp3、Mp4播放器、手机显示屏等便携类的数码产品,大尺寸OLED屏幕的量产还需要一定的时间;
2、制造工艺、显示效果有待改善。对于无源驱动的OLED屏,主要存在两个方面的问题:首先是屏幕显示存在像素点亮度不一的问题。由于目前使用的OLED制造工艺还无法实现整块显示屏上的所有发光像素的具有完全相同的物理特性,不能保证所有像素点都具有相同的发光阈值电压;同时,对于无源驱动屏,由于采用的是行列式动态扫描结构,同行/同列内的像素使用的是公用的行/列电极,这些透明的ITO电极上存在的电阻会产生电压降,这会使得位置不同的像素点上的实际施加的电压存在差异,使显示出现亮度不均匀的现象;
3、显示上存在“交叉效应”(Crosstalk)。所谓“交叉效应”指的就是在显示过程中,相邻像素间互相影响,导致显示的图象出现模糊与混乱的现象,影响实际的显示效果。“交叉效应”在无源驱动的OLED屏上尤其明显。由于无源驱动的OLED屏一般使用的是行列动态扫描的方式进行显示,当进行扫描显示时,行/列上的动态扫描信号通过OLED屏幕上电极间的等效电容进行传播,会造成电极之间信号的串扰,同时加上电极间因制造工艺的问题,可能存在一定程度漏电。这些原因综合起来会导致本不应该显示的像素点上也存在一定程度的正向电压,当这些电压达到一定值时,会使本不应该发光的相邻像素也会出现一定程度的的发光现象,以致出现错误的发光显示,形成“交叉效应”。这一现象在高点阵密度的真彩色屏上表现得尤为明显;
4、寿命偏低,虽然目前红色和绿色的OLED材料的寿命可以达到1万小时以上,但是如蓝色有机物等材料的寿命目前好很低,只有1000小时,影响到了器件整体的寿命。OLED器件通常只有不到5000小时左右的工作寿命,而LCD则至少都有1万小时以上;
OLED显示器件虽然存在着一些问题,但是根据目前的应用来看,它依旧是一种非常优秀的显示器件,具有相当的实用价值。相信随着OLED制造工艺的不断进步与驱动技术的提高,这些目前存在的问题也会逐步获得改善与彻底的解决。
2、UG-2828真彩色OLED显示屏规格
上面简单介绍了OLED屏的基本原理与优缺点,现在来看一下本制作中实际使用到的OLED显示屏幕的基本规格参数。
本制作选择的OLED屏幕的型号为UG-2828GDEDF02,属于OLED真彩色显示屏,生产厂家是台湾悠景科技股份有限公司(Univision Technology)。此屏外观尺寸为33.80×34.00×1.70 (mm),有效显示部分的尺寸是26.855×26.864 (mm)(约为1.5英寸),厚度仅有1.6毫米,重量只有4.0 (g),很薄很轻。屏幕的显示像素为128*128像素,水平每个像素由RGB三像素组成。屏幕驱动芯片为SEPS225,可支持18-bit 262k色(R:G:B=6:6:6)或16-bit 64K色(R:G:B=5:6:5)的显示模式,数据接口支持8080/6800并行及3线SPI串行模式。芯片封装于FPC软片上,通过间距为0.5毫米的30Pin的FFC插片进行连接。
驱动此OLED屏需要提供两组电压,一组是逻辑电压,用来驱动屏载芯片的逻辑部分,这部分的电压推荐值为2.6V~3.3V,典型值2.8V,最高不应超过4V;另外一组是设备高电压VDDH,用来驱动OLED屏像素的显示,典型值为13V,最大不超过19.5V。
OLED屏驱动电路中所需的外围零件比较少,其中三个电容为稳压滤波用,需要注意VDDH部分的两个电容的耐压值,另外两个零件是参考电阻与震荡电阻,使用普通贴片电阻即可。
连线路中除了电源供电部分外,剩余引脚基本都是数字I/O连接,其中的Export1为内部震荡输出测试用,可以不必引出焊盘;CPU与PS引脚为设置数据总线模式与数据格式用;D17~D9为数据总线;RS、CSB、RDB、WRB为数据/命令读写控制线路;RESETB为复位。各引脚的详细功能如下表所示。
引脚号 |
功能符号 |
类型 |
功能 |
||||||
2,4,27,29 |
VSSH |
P |
高压驱动电源地 |
||||||
3,28 |
VDDH |
P |
高压驱动电源 |
||||||
25 |
VSS |
P |
逻辑电源地 |
||||||
26 |
VDD. |
P |
逻辑电源 |
||||||
5 |
IREF |
I/O |
电流参考电阻,用于亮度调整,连接68KΩ电阻到VSS。 |
||||||
6 |
OSCA2 |
O |
连接10kΩ的振荡电阻到OSCA1。 |
||||||
7 |
OSCA1 |
I |
外部时钟输入口。 |
||||||
8 |
EXPORT1 |
O |
晶振测试。 |
||||||
9 |
CPU |
I |
选择CPU类型。 高电平:68系列CPU。 |
||||||
10 |
PS |
I |
选择并行/串行接口类型 低:串行,高:并行。 |
||||||
11~19 |
D17~D9 |
I/O |
主机数据输入/输出总线 引脚总共提供9位双向数据总线,与单片机的数据总线连接。
|
||||||
20 |
RS |
I |
"数据"/"命令"选择 低电平:命令; 高电平:参数/数据; |
||||||
21 |
CSB |
I |
"片选",低电平有效。 |
||||||
22 |
RDB |
I |
“读”/“读/写”有效 在80系统总线接口:读选通脉冲信号(低电平有效)。 在68系统总线接口:总线使能选通(高低电平有效)。 在串行模式时,固定连接到VDD或VSS电平。 |
||||||
23 |
WRB |
I |
“写”或“读/写”选择 低电平:写;
高电平:读; |
||||||
24 |
RESETB |
I |
SEPS225芯片复位(低电平有效)。 |
||||||
1,30 |
NC |
- |
未使用引脚 |
UG-2828GDEDF02模块引脚功能表
从模块的数据接口上来看,UG-2828GDEDF02支持并行与串行两种数据连接方式,并行模式的优点是数据传输数据快,效率高,缺点是所需连接的数据引脚多,花费较多的I/O口;串行的优点是所需要的线路连接数量少,缺点是数据传输速度低,部分串行仅支持数据写入,不支持读取操作。考虑到本制作对数据传输速度的要求,选择使用并行连接模式。并行模式支持“8080模式”与“6800模式”两种,区别在接口逻辑时序不同,实际选择的是最常用的“8080并行模式”。工作模式由CPU引脚与PS引脚的电平连接来确定。特别主要的是,如果用户选择使用的是串行数据模式,串行数据连接线由D[17~15]提供,且RDB引脚与WRB引脚需要上拉到高电平或低电平。
使用“8080并行模式”需要连接以下信号线:
●RESETB:芯片复位;
●CSB:"片选",低电平有效;
●RS:"数据"/"命令"选择;
●WRB:写数据;
●RDB:读数据;
●D[17~D9]:双向数据总线;
备注:本制作选择的是16bits色彩模式,所以数据总线只使用D[17:10],D9脚未使用。
读写时序图如下所示:
8080并行接口读/写时序图
下面以 8080并行模式的读写为例,简单说明一下各引脚的信号顺序:
对于写数据操作,首先设置片选CSB为低电平,使片选有效,然后根据所需要传送的是命令还是数据,设置对应的RS引脚的高(数据)/低(命令)电平,接着根据所需要进行的操作类型是“读”:还是“写”设置好RDB与WRB引脚的电平值。写数据时,设置RDB恒为高电平,WRB先设为低电平,然后在数据总线上输出数据,待数据稳定后,将WRB先设为高电平,将数据总线上的数据写入SEPS225中。数据读取的过程基本一致,只是在读过程中WRB恒为高电平,RDB先设为低电平,待数据稳定后,将RDB先设为高电平后读出。
如果总结一下,绘制一个状态表,应该会表达得更加清楚:
功能 |
RDB(读) |
WRB(写) |
CSB(片选) |
RS(命令/数据) |
写入命令 |
1 |
上升沿 |
0 |
0 |
读取状态 |
上升沿 |
1 |
0 |
0 |
写入数据 |
1 |
上升沿 |
0 |
1 |
读取数据 |
上升沿 |
1 |
0 |
1 |
8080并行接口模式信号状态表
基本引脚信号逻辑清晰后,读写命令/数据已经不是问题,已经可以对控制芯片SEPS225进行操作,下面需要简单熟悉一下基础的操作命令:
典型的SEPS225操作由一个命令带头,后跟相关的数据信息。模块驱动流程主要分三步走,首先是复位模块,需要保持10ms左右的稳定复位信号,正确复位后,接着进行控制芯片的初始化工作,一般的初始化过程包括设置控制芯片的相关工作模式、基础设置参数(包括显示结构、驱动参数等)。初始化是一次性的工作,相关参数与流程可参考具体的模块说明书。
最后是绘制工作,这一部分需要做具体的了解。对于SEPS225而言,基础绘制工作就是往GRAM中填充图象数据,数据是以矩形块的形式进行填充的,也就是说需要先设置参数以确定是对屏幕上的哪部分矩形区域进行填充。首先需要设置内存偏移地址(MEMORY_ACCESSPOINTER X,MEMORY_ACCESSPOINTER Y),接着设置列起始与结束地址(MX1_ADDR,MX2_ADDR)以及行起始与结束地址(MY1_ADDR,MY2_ADDR),最后输出一个内部数据存取命令DDRAM_DATA_ACCESS_PORT,后跟所需数量的待写入数据,即可。
具体代码细节请参考演示程序,典型全屏数据填充的代码如下所示:
void Fill_RAM(unsigned char data1, unsigned char data2)
{
unsigned char pos;
Set_Display_Offset(0x00,0x00);
Set_Column_Address(0x00,0x7F);
Set_Row_Address(0x00,0x7F);
Set_Write_RAM();
for(pos=0;pos<128*128;pos++) {
Write_Data(data1);
Write_Data(data2);
}
}
更加详细的功能及命令细节,请参考模块使用说明书、SEPS225说明书及演示代码。
硬件设计及单片机选型
1.单片机选型:
本制作考虑到对单片机速度、内存、功能都有一定的要求,且对价格也比较敏感,使用STM系列32位处理器作为驱动是比较合适的,通过综合比较与实验,最后选定STM32F103C8T6作为实际使用的芯片。选择STM32F103C8T6的主要原因是:在STM32系列中,目前其零售价格最低,且为48脚LQFP封装,尺寸小巧,同时具备72MHz主频,提供64K字节的FLASH与20k字节的SRAM,包含定时器、SPI、I2C、UART、USB、CAN以及10-bit ADC等丰富的资源,符合本制作对单片机资源的需求,同时还考虑到其片内包含一个可由电池维持的RTC,且有单独的VBAT掉电维持电源接口,适合制作电子计时器类应用。
使用STM32系列处理器需要特别注意的一点就是外部晶振及匹配电容的选择非常关键,否则极容易出现晶振不起振的问题,尤其是STM32的RTC所使用的32.768K晶振,需要选择6pf负载电容的晶振,使用普通的12.5pf的晶振,会出现不起振或者晶振启动时间过长的问题,环境温度低时尤其明显,易导致设备无法正常运行。
2.RTC维持部分电路
STM32本身就带有内部RTC电路,而且提供一单独的引脚VBAT用以连接RTC维持供电电路,维持电流仅需1.4μA。在通常的STM32应用设计中,这一引脚一般与1220电池连接。但是考虑到本制作PCB尺寸的限制,1220电池的尺寸过大,不适合本制作。所以需要选择一种尺寸更小、符合需要的维持电池或法拉电容作为掉电供电用途。考虑到一般主电源断电时间不会很长,使用后备电池的目的主要是维持短时间的时钟走时,可以选择容量较小、但是最好可反复充电的后备电源器件。通过资料的查阅与比较及试验应用,最后选择了414系列电池可充电电池作为后备电源器件.这一系列电池有多种规格,其标称电压为3V,容量为<2mAH,最大放电电流0.15mA,外观直径4.8毫米,高1.4毫米。414系列电池在手机、GPS等设备中很常见,体积小巧、寿命长,在20%放电的情况下可反复充电1000次,完全放电情况下可反复充电100次,非常适合如RTC、RAM数据维持等应用。与414电池同规格封装的器件也包括法拉电容系列,414法拉电容典型容量为0.08F,与可充电电池相比容量较低,但法拉电容具有可反复充电上万次的特性,寿命更长,读者可根据需要进行选择。
3.OLED高压部分电路
DC/DC升压电路部分采用专用DC/DC转换芯片进行转换,将5V输入电源转换成13V高压输出,以驱动OLED显示,全屏点亮时所需要的最大电流是36mA。就OLED高压驱动电路,一般选择以电感为升压零件的Boost升压电路,就理论上看,应该选择带有全关断功能的转换芯片,当使用无全关断功能的芯片时,应当在DC/DC电路的主供电线路上增加一个MOSFET或BJT作为电源开关,以便在屏幕关闭时,完全切断DC/DC电路的供电电压,防止输入电源通过电感与二极管为OLED供电,出现漏电电流。
在实际制作过程中考虑到带有全关断功能的DC/DC转换芯片价格比较高,而增加外部零件作为开关时,容易造成PCB上布线困难,而本制作主要依靠外部电源供电,对漏电电流不敏感,所以在实际设计中没有使用全关断方案。
4.按键开关选型
电路中总共有四个按键,分别设计在左右两侧各两个按键,所使用的按键规格是小型侧面按键,实际使用的是ALPS SKRELGE010系列,俗称“小乌龟开关”,主要考虑到这一类型的按钮外形小巧,接触片为左右展开形,业余条件下焊接容易,而且底部带两个安装定位用的小支柱,可以作为受力点,确保焊接到PCB上的按钮安装稳定,便于按动。同时使用侧按开关的目的也是为了使今后制作外壳时为方便设置按键杆做考虑。
电路结构
由于STM32-103C系列资源很丰富,本应用的重点功能也是驱动UG-2828真彩色OLED屏,所以除了电源电路以外,剩余的电路基本都是围绕着STM32芯片配套的辅助电路。整个核心电路结构基本可以视为一个STM32最小板与OLED驱动板的组合,所以整体电路结构相当简单,分成电源电路、OLED电路、单片机电路三个主要部分。
电路主供电部分由Micro USB引人5V直流电。由于单片机及OLED显示屏逻辑部分提供需要3V3供电,电路中使用了一个LDO,实现5V转3V3的降压功能。如想提高电源效率,也可使用DC/DC型降压电路,这里的3V3电压主要供逻辑部分使用,其电流不大,所有选择使用LDO进行转换。实际选择的LDO型号为PAM3101,SOT-23封装。选用PAM3101的主要原因是利用其低压差优点,因为设计前考虑到电路可能使用聚合物电池供电,PAM3101只需要0.18V的压差即可,也就是说如果需要输出3V3电压,则输入电压只需要大于3.48V即可,而传统的AMS1117输出3.3V时需要4.4V的输入电压,不适合聚合物电池供电。
OLED所需的13V驱动高压由DC/DC专用芯片实现,在转换芯片的选型上,考虑到电路转换效率及PCB尺寸的限制,选用了TI公司生产的高效的TPS61040转换芯片,组成典型的Boost升压电路,由于TPS61040的最高工作频率可达1MHz,则意味着转换电路中的电感可选择较小的容量,这样在同等工作电流的情况下,可以使用尺寸更加小的电感。实际上本制作选择的是22uH的小型Sagami磁屏蔽贴片绕线功率电感,电感尺寸大约只有3×3×1.5mm,完全满足升压的需要。
就实际应用经验来说,为了保持OLED屏产生稳定的显示效果,避免出现出现亮度不一的显示问题,需要特别注意提供给OLED显示器件的驱动高压的稳定性。所以本电路除了做好高压的滤波设计外,还在后极增加了一简单的稳压管稳压电路,以期获得更加稳定的驱动高压。
在OLED与单片机的连接部分主要是地址总线与部分控制线的相互连接,设计中将PA口的低8位作为数据总线,控制线与PB口连接,分开两个不同的端口连接一是考虑到布线方便,二来程序设计上也比较方便。数据总线只使用了8位,意味着OLED屏幕只能以16位色显示(64K真彩色),主要也还是考虑到编程的方便与单片机器内部RAM的容量限制。
单片机本身的辅助线路主要是两个晶振,8M的晶振提供主工作频率,通过单片机内部进行9倍频后,提供72M的主工作时钟,另外一个是偶合电容为6pF的32.768K时钟晶体,供应内部RTC计时使用。
为了防止掉电丢失计时数据,RTC使用连接到VBAT引脚的外部可充电电池维持供电,由于使用可充电式电池,必然要设置充电电路,为了防止电路复杂化,这里使用了二极管隔离,外加电阻限流的最简涓流充电电路,限流电阻选择2KΩ即可,实测在414电池无电的情况下,连接2KΩ限流电阻,外加3.3V电压充电,大约2小时后电池可以充到2V5以上。记得首次使用时,应先让414电池电量充满后才可正常实现RTC断电维持功能。
为了便于在板上对单片机编程及调试程序,板上通过跳线及2.0mm间距排针的形式,引出了所有与编程相关的引脚。支持串行、SWD、JTAG三种写入模式,本制作推荐使用SWD模式,只需要直接连接三根线即可,自己制作三根2.0mm插头转2.5mm插针的转接线即可,不需要制作外接电路;对于JTAG模式,由于板上一些相关的JTAG上/下拉电阻没有设置,需要制作转接板方可连接;对于串口下载模式,板上附带了BOOT0与BOOT跳线口,需要根据状态自行设置,缺点是设置比较麻烦,优点是不需要专门的ULINK/JLINK编程器。
最后记得,如果需要正常从片内Flash启动程序,单片机的BOOT0脚需要接地,即JP2跳线部分需要焊到地。更多的关于编程接口及设置细节请参考STM32官方参考手册。
数量 |
元件值 |
元件名称 |
元件标号 |
1 |
|
87758-0216 |
X1 |
1 |
|
87758-1016 |
J |
1 |
|
DIODE-ZENER-BZT52 |
D1 |
4 |
2SKRELGE010 |
SWITCH 侧按开关 |
S1, S2, S3, S4 |
1 |
500mA |
VARISTORCN1206 自恢复保险丝 |
R16 |
2 |
0R |
RESISTOR0603-RES |
R2, R4 |
1 |
0u1 |
CAP0402-CAP |
C8 |
3 |
0u1 |
CAP0603-CAP |
C4, C5, C6 |
1 |
1k5 |
RESISTOR0603-RES |
R3 |
2 |
1u |
CAP0603-CAP |
C10, C17 |
1 |
1u |
CAP0805 |
C19 |
1 |
1uF |
CAP0603-CAP |
C20 |
1 |
1uF/25v |
CAP_POL1206 |
C13 |
1 |
2k |
RESISTOR0603-RES |
R14 |
1 |
2u2 |
CAP_POL1206 |
C15 |
2 |
4U7 25V |
CAP0805 |
C14, C18 |
2 |
6p |
CAP0603-CAP |
C3, C7 |
1 |
8M |
5032-2P 主晶振 |
Y1 |
5 |
10k |
RESISTOR0603-RES |
R7, R9, R10, R12, R18 |
1 |
10nf |
CAP0805 |
C1 |
1 |
10u |
CAP0603-CAP |
C9 |
2 |
12p5 |
CAP0603-CAP |
C2, C16 |
1 |
13V |
DIODE-ZENER-BZT52 |
D |
2 |
22R |
RESISTOR0603-RES |
R1, R13 |
1 |
22uH |
INDUCTOR. 功率电感 |
L3 |
1 |
30R |
RESISTOR0603-RES |
R8 |
1 |
68k |
RESISTOR0603-RES |
R17 |
1 |
32.768k |
MC-306 时钟晶振 |
Q1 |
1 |
? Pf |
CAP0805根据升压芯片选择使用 |
C12 |
1 |
IN4148 |
DIODESOD |
D2 |
1 |
R8T6 |
STM32F10XCXTXTQFP48 单片机 |
IC1 |
1 |
RB414II06E |
RB414II06E |
BAT1 |
1 |
Ref1 |
RESISTOR0603-RES |
R5 |
1 |
Ref2 |
RESISTOR0603-RES |
R6 |
1 |
TPS61040 |
V_REG_TPS61040SMD DC/DC升压 |
U$3 |
1 |
UG-2828GDEDF02 |
FH12-30S-0.5SH |
X3 |
1 |
USB |
USB-MICROB |
X5 |
1 |
USB_ENABLE |
JUMPER-2SMD-NO |
JP4 |
1 |
V_REG_LDOSMD |
V_REG_LDOSMD |
U1 |
1 |
schottky |
DIODESOD |
D3 |
元件清单
软件设计及实现
考虑到使用普通I/O口模拟时序以实现对OLED的控制及内部GRAM的读写,如果仅用于输送显示数据到GRAM,刷新速度上是没有什么问题的,但是如果直接利用OLED内部的GRAM作为通用绘制内存的话,就会出现两大问题,其一是屏幕更新速度过慢,因为一个改写过程可能会经历"读GRAM数据到CPU内存"->"修改CPU内存中的数据"->"将CPU内的数据送回GRAM显示"这样三个步骤,导致屏幕更新速度缓慢;其次,由于GRAM内的数据修改会直接表现在屏幕上,所以整个内部绘制过程将完整地在屏幕上即时展现,不仅表现效果不佳,也容易出现更新闪烁现象。
制作中采用的解决方法是在单片机的内存中先开辟一块与显示区对应的内存区域作为VRAM区域,将所需要绘制的内容先绘制在这片内存中,待所有更新绘制工作完成后,一次性将VRAM内的数据拷贝到GRAM中显示,这样做的优点就是避免出现更新闪烁,同时由于是在内部内存中绘制,整个绘制速度也加快很多,而且单片机与OLED屏的可通过一次性大数据交换来完成显示更新,可针对此动作进行代码优化,以提高速度。这个方法的缺点是需要消耗一定程度的内部RAM资源,对于RAM本来就不充裕的单片机来说,一次分配掉一大片内存作为VRAM使用,会影响到其他应用工作的内存需求,所以在代码设计中对RAM的使用进行了非常仔细的规划,在确保所有任务正常运行的前提下,尽可能多地分配出剩余的RAM空间,作为显示绘制缓冲区。
绘制过程中考虑到程序空间的限制,及渲染速度的要求,所使用的基本绘制结构是背景图象与指针渲染结合的方式,首先在公共领域图库内选择了一套可免费使用的时钟渲染效果图,利用软件去除掉其中的指针部分,将图象缩小到所需要的尺寸,然后进行RLE压缩,将其作为背景时钟面。而指针部分则使用矢量多边形描述方式,每次根据指针位置先进行仿射变换后再渲染到图象上,最后刷新显示。指针走时最小间隔为1度,每秒走6次,每次走1格,以产生细腻的仿真机械表的走时效果。
整个软件结构并不复杂,从程序的主干来说,单片机先完成主时钟源、RTC时钟源、中断、各端口功能的配置以及开启高压产生部分、OLED初始化、VRAM内存的分配等过程,然后设置RTC中断源,以预设的Hz数产生计时中断(例如1Hz则代表整秒时产生中断),完成初始化后,程序等待RTC中断产生。每当产生一个计时中断,程序先将时钟背景绘制到VRAM中,接着根据RTC中读取的时分秒数据,根据当前的时、分、秒数据在VRAM中已有的背景层上对应的位置与角度绘制出手表对应的指针,绘制完成后,将VRAM中的数据一次性拷贝到OLED的GRAM中进行显示。接着等待下一个RTC中断的产生,继续重复这一绘制过程,屏幕上就展现出一个仿真机械表的走时画面了。
安装调试
1.焊接与安装:
由于本制作尺寸较小,使用的又是全贴片零件,所以焊接工作必须非常细心,尤其是单片机与FPC插座部分的引脚比较细,需要注意一定的焊接技巧。
通常在业余条件下焊接这些密集引脚贴片零件一般都推荐使用平底的烙铁头,合适尺寸的C型或者CF型烙铁头是首选。焊接前,先使用茶色高温胶带将零件暂时固定在PCB上的正确位置,对准焊盘,然后使用烙铁头带上适量的焊锡与助焊剂将所有引脚与焊盘焊接在一起,先不要管引脚上的焊锡粘连,全部焊接完后,先清洁烙铁头,然后使用吸锡带(如果吸锡带没有预涂助焊计,则建议先吸一些松香上去),逐步将多余的焊锡吸除。使用吸锡带吸锡时要特别注意不要用烙铁拖着吸锡带前进,而要沿垂直方向进行,逐一逐块吸去多余的焊锡。优质的吸锡带也可以使用侧吸的方式,即先使用烙铁熔化焊锡,然后将焊锡带从侧面接触焊锡即可利用毛细作用吸掉多余的熔化焊锡。FPC排座请选择耐高温的优质产品,焊接方法同上。
如果发现焊接完成后零件有轻微的移位问题,可使用热风枪,配合适配的风嘴,对相关位置进行均匀加热,待引脚上的焊锡熔化后,用镊子轻推零件,熔化后的焊锡表面张力可使零件回归正确的焊盘位置。在这个过程中请特别注意增加适量的助焊剂与设置正确的热风枪温度。同时必须特别注意在焊接晶振等零件时,最好使用烙铁焊接,使用热风枪焊接容易造成这些元件损坏。
焊接完成后需要先清洁PCB,然后使用放大镜仔细检查引脚焊接情况,避免存在短路或者虚焊等现象,尤其需要注意FPC插座的引脚的垂直面,这个部分最容易出现搭焊的问题,造成电路短路。
2.电路调试
本制作的电路基本是单片机应用电路,整体电路中无可调节零件,所以调试工作比较简单。首先是检查电源部分的三组电压是否正确提供,首先是通过USB或排针引入的主电源电压是否存在,例如USB供电应有5V的输入电压,接着测试LDO输出的3V3电压与高压部分的13V高压是否生成,方法是使用万用表测量板上 C15和C13两个钽电容两端的电压是否正确。数字电路部分,只要焊接正确,基本都可以正常运行,应当特别注意的是32.768K晶振是否起震,如果屏幕有显示,但是指针无走时,说明32.768K晶振部分有问题,请更换合适的6pF晶振尝试。STM32的8M主晶振也容易出现不起振的问题,请更换不同值的适配电容后再尝试。STM32的模拟供电引脚也要连接上供电,以防止芯片不工作。
制作及使用小经验:
OLED模块安装时的注意事项
OLED应用中,为减少屏幕所占据PCB面积,通常将OLED屏的FPC以弯折形式进行安装。在本制作中,为了尽量减小成品的尺寸,也是使用弯折的方式进行安装。一般情况下,根据FPC弯折方式及所处的PCB安装面的不同,需要使用对应的FPC插座与其配套。弯折安装通常有两种方式,对于FPC弯折安装到PCB反面的情况,使用FPC插座与不弯折仅水平安装时使用的插座是系统的,都使用上接式插座;而对于FPC弯折式安装在PCB同面的情况,需要使用下接式插座。当然,对于弯折安装到PCB反面的情况下,PCB上应该注意冼出过FPC片的槽,便于安装。
本制作中考虑到需要充分利用两面PCB面积焊接零件,所以采用的安装方式是FPC弯折式安装在PCB同面,在这种情况下,需要对FPC进行一定程度的弯折,在弯折时要特别注意保持一定的弯折弧度,建议严格按照规格说明书的要求进行弯折,最好弯折位置应呈自然弯曲状态。在同面安装时更需要特别注意弯折问题,由于同面安装时没有PCB板的边缘作为过渡,很容易出现把FPC折死、折断的问题,如果真的需要比较紧密的弯折,可先将FPC表面的茶色胶布撕开,轻轻弯折FPC到所需要的角度后再粘回胶布,这样FPC默认就保持一定程度的自然弯折状态,比较不容易折断(如需恢复原样,可撕开胶布,展平FPC后,重新粘回即可)。
改善OLED显示亮度的方法:
从规格书的参数上来看,OLED的显示亮度还是比较高的,但是OLED屏幕点亮后,还是感觉亮度不满足需要,下面介绍两种简单的方法来改善OLED显示亮度。
最简单的增加OLED亮度的方法是提高VDDH驱动电压。根据OLED的特性,随着驱动电压的增加,其发光强度也会在一定范围内线性增加。使用这一方法需要特别注意的是电压值不应超过OLED允许的上限,同时要注意到,提高驱动电压来提升屏幕显示亮度会造成OLED屏寿命缩短,如无必要,不推荐使用这种方法;
另外一种更简单的方法是撕掉OLED屏表面的滤光片。由于OLED屏是主动发光的器件,结构上不需要象LCD屏那样表面需要偏光片,实际上OLED屏幕表面贴的一层塑料片是滤光材料,用来将OLED的本色调整成接近黑色,这层滤光片撕除后,会显露出黄金色的屏幕本色。通过实际试验,在无滤光片存在的情况下OLED显示出的亮度会明显增高很多,几乎是成倍增加,而且去掉滤光膜后的屏幕,其厚度也会变得更薄。这一方法的缺点是由于去掉了滤光片,在屏幕不显示的区域,也就是黑色区域现在展现的是屏幕的黄金底色,可能会影响到一些画面中黑色部分的表现。当然,如果应用产品本身就包含滤色片,或者屏幕显示较少黑色区域,那么这一方法是值得推荐的。
剥离滤光片的方法也很简单,先撕掉屏幕表面的保护膜,然后使用干净的、锋利的刀片(如美工刀片),以水平方向,从OLED屏的一个边角开始,小心推入几个毫米,使边角的滤光片浮起,然后使用镊子夹住这一浮起的滤光片边角,慢慢用力撕除滤光片。在撕除过程中应该注意小心使力,应该沿各个方向逐渐施力,慢慢撕开。同时值得注意的是,视刀片切入位置,可能一次揭除的只是滤光片的一层,可能一次剥离不完全,可多进行几次,一般情况下第一次可以撕除滤光片的大部分厚度,剩余的厚度一般都很薄,直接使用镊子沿边角挑开撕除即可。撕除完滤光片后,将原保护贴膜贴回屏幕表面,起到保护作用。
通常情况下,只要是有滤光片的OLED屏幕,建议在业余制作中应当撕掉滤光片使用,此时的屏幕表现亮度绝对可以满足应用需求。
结语
通过本制作,正式接触了OLED真彩色显示器件,实践了STM32单片机编程,收益良多。在整个制作过程中付出了很多努力,也遇到了很多困难,当然,也收获了很多的经验。希望通过此篇文章与大家分享电子制作的乐趣,共同进步与提高。
Write a comment
williams (Tuesday, 22 January 2013 08:32)
您做的这个非常漂亮,我之前也做了一个几乎一样的表,只是把OLED点亮了,后面就没在写程序,您这个做的很漂亮,不知能否参考您的这个时钟的代码。我那个是128*128的OLED。板上做了蓝牙和GPS
host (Tuesday, 22 January 2013 18:44)
程序已因硬盘损坏丢失,暂时无精力重新写,等有时间再交流。
wz18th (Monday, 13 January 2014 01:32)
你好,我最近也在点OLED,用的屏幕是UG-2828GDEDF04,一开始没注意后缀,用UG-2828GDEDF02(SEP225)的接法,烧了一块屏,后来发现是SSD1339的主控。这两款屏的OLED发光部分应该是一样的,我按照1339的写法写了一份驱动,没有点亮,试了网上的几套驱动,都没有成功。已经点了两个月了,略懊恼。。
master (Monday, 13 January 2014 02:32)
UG-2828GDEDF04的规格与UG-2828GDEDF01类似,请参考:
http://oled.jimdo.com,有for arduino的代码.