完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
` 本帖最后由 蓝蓝的天he 于 2015-7-6 22:58 编辑
这段时间一直在用STM32驱动TM1812,期间遇到了不少的问题,网上搜贴却很难找到解决方法,所以笔者将这段时间来遇到的问题逐一简述,希望对用到TM1812的朋友有所帮助。 一、关于TM1812硬件电路设计问题 首先TM1812是一款串行输入的全彩LED驱动芯片,具体的相关数据可以参考数据手册,这里不赘述。TM1812采用PWM驱动LED,所以需要在LED上串联合适的限流电阻,这里还应考虑到功耗问题,对于5V的电源电压,笔者采用R串联180欧姆的电阻,G、B串联150欧姆的电阻。 二、关于时序问题 TM1812采用串行数据输入,所以稳定的时序是非常重要的。由于芯片的高低电平保持时间只有几百纳秒,所以用定时器延时反而达不到很好的效果,笔者开始就采用系统定时器进行延时的,结果产生咬尾。直接采用__nop()_函数进行延时,当然也可以采用for循环进行延时。这里笔者建议不要将延时程序封装成函数,而是写成宏,因为调用函数会占用几个甚至几十个周期,这样产生的时序效果不好,写成宏可以在预编译时展开,相关的程序片段如下: #define DIN_BIT_0() do{ //0码 GPIOA->BSRR = (uint16_t)0x0040; //I/O口置0 _nop(); //若干个_nop() GPIOA->BRR = (uint16_t)0x0040; //I/O口置1 __nop(); //若干个_nop() }while(0) #define DIN_BIT_1() do{ //1码 GPIOA->BSRR = (uint16_t)0x0040; //I/O口置0 _nop(); //若干个_nop() GPIOA->BRR = (uint16_t)0x0040; //I/O口置1 __nop(); //若干个_nop() }while(0) 程序中具体有多少个_nop()函数视具体MCU而定,最好能用示波器看一下波形,确定合适的个数。宏里面的可以网上查阅C语言相关。 三、关于电平转换问题 关于电平问题,TM1812的官方数据手册里有点略坑,数据手册里说芯片高电平输入的最低电压是3.8V,我们知道STM32电源电压是3.3V,而TM1812电源电压是5V,所以一开始就考虑到电平转换,但是时序的开关频率大概能达到4到5M左右,采用三极管和MOS管都不能得到很好的输出,这大概折腾了将近一星期,结果。。。结果TM1812和3.3V是完全兼容的。。。完全不需要电平转换就能很好的驱动,所以大家一定要亲自实践了才行。 (笔者认为互联网的最大的好处就是分享,自己遇到的问题他人也可能遇到,所以大家可以解决后发到网上,这样其他人就可以少走弯路了) ` |
|
相关推荐
|
|
能否提供TM1812驱动借鉴,参考一下!
|
|
|
|
|
|
楼主您好,我现在也在调试TM1812,但是程序一直出现问题,您调试过的代码能不能发我一份,我学习学习,谢谢。我的邮箱是qqgirlwyh@163.com ,或者qq 3313548247 ,谢谢。
|
|
|
|
|
|
wangyunhua01 发表于 2016-9-5 10:33 这里我将驱动函数统一贴出来吧,顺便说一句,现在TM1812好像已经停产了吧,它是恒压驱动的,可以使用TM1926,这是恒流驱动,输出恒流20mA,可以完美替换TM1812。 //宏定义,发送每一位的PWM波 #define PB9_DIN_BIT_0() do{ GPIOB->BRR = (uint16_t)0x0200; __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop(); __nop();__nop();__nop();__nop();__nop();__nop(); GPIOB->BSRR = (uint16_t)0x0200; __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop(); __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop(); __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop(); __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop(); __nop();__nop();__nop();__nop();__nop();__nop(); }while(0) #define PB9_DIN_BIT_1() do{ GPIOB->BRR = (uint16_t)0x0200; __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop(); __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop(); __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop(); __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop(); __nop();__nop();__nop();__nop(); GPIOB->BSRR = (uint16_t)0x0200; __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop(); __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop(); }while(0) //驱动函数,发送一个8位的数据 void PB9_Send_Data(u8 Date) { if(Date & 0x80) PB9_DIN_BIT_1(); else PB9_DIN_BIT_0(); if(Date & 0x40) PB9_DIN_BIT_1(); else PB9_DIN_BIT_0(); if(Date & 0x20) PB9_DIN_BIT_1(); else PB9_DIN_BIT_0(); if(Date & 0x10) PB9_DIN_BIT_1(); else PB9_DIN_BIT_0(); if(Date & 0x01) PB9_DIN_BIT_1(); else PB9_DIN_BIT_0(); if(Date & 0x02) PB9_DIN_BIT_1(); else PB9_DIN_BIT_0(); if(Date & 0x04) PB9_DIN_BIT_1(); else PB9_DIN_BIT_0(); if(Date & 0x08) PB9_DIN_BIT_1(); else PB9_DIN_BIT_0(); } |
|
|
|
|
|
蓝蓝的天he 发表于 2016-10-13 10:29 TM1812没有停产。。我就是天微的。 |
|
|
|
|
|
楼主你好 我采用这款芯片 3.3v供电 我没有加限流电阻用 我买了400片但里面有100片不能用 出现闪的情况 其他的都正常 加上限流电阻会好点 不知道是设计原因还是这种芯片问题比较多
|
|
|
|
|
|
楼主你好 我采用这款芯片 3.3v供电 我没有加限流电阻用 我买了400片但里面有100片不能用 出现闪的情况 其他的都正常 加上限流电阻会好点 不知道是设计原因还是这种芯片问题比较多
|
|
|
|
|
|
成都太科 发表于 2016-12-26 22:47 我使用的是5V供电,没有出现这种情况,出现这么高比例的废片,可以咨询厂家 |
|
|
|
|
|
楼主,你好我是用的是STM32F030C8T6芯片,使用ST-Link进行供电,静态显示时灯没有问题,但是手去晃动时就能明显的看到每四个灯(96Bits)和下一个TM1812显示不在同一直线上的问题(板子上一排焊接了32个灯,8个TM1812芯片串联)。有解决办法吗?(QQ:1558989572)
|
|
|
|
|
|
Andy001847 发表于 2017-9-11 18:11 时序有问题,你是不是时序发错了啊 |
|
|
|
|
|
OV7670摄像头使用串口发送数据到另一个板子上的lcd,出现花屏
958 浏览 1 评论
557 浏览 0 评论
483 浏览 0 评论
STM32CUBEMX(12)--IIC,12864OLED(0.96寸)移植
601 浏览 0 评论
STM32CUBEMX(5)--自定义红外NEC解码,定时器TIM捕获方式
554 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-17 14:20 , Processed in 0.887377 second(s), Total 70, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号