嗯嗯,效果不错。趁着这个热乎劲,接到俺的LED测试板上试试。呃~~~ 竟然和小LED的效果不一样啊,不一样。不但闪烁而且完全没有调光效果。郁闷内,查查原因呗。看看那里出问题。迅速在PT4115手册里翻查。PWM有频率要求,难道我的频率太高啦。"最高可达20KHz“,好吧,就是高那么一丁点。继续折腾吧。不知何时外面的路灯亮了。渐渐只有汽车在路上压过马路的飞驰声,稀稀疏疏的几只蛤蟆在不停嘟囔着。余光瞟了下屏幕右下方的时间,竟然已是深夜1点多。看小穆两只水汪汪的大大眼,没了平时柔情似水电波。只看到双下眼皮在不停的打架。时间太晚为了明天继续保持活力,储备能量只为让明天同样的高效。睡觉去(~﹃~)~zZ。小穆晚安!

-_-!! 再酱紫下去,是不是应该去写网络小说,听说现在凡是有肉的文章都被赶尽杀绝。
 
    第二天一早醒来,翻查小穆使用手册。功能介绍多达80个快速I/O端口,几乎所有的端口均可以容忍5V信号。几乎~~几乎~??!!。那就是说有部分引脚是无法承受5V。用手不停的抓着已经被剃的很短的发根,深深的吸了几口气。一种不祥的阴云笼罩在心头。马上让小穆上电,面包板上插上LED测试。果不其然,调光没用。穆,俺的穆啊~~~ 小穆对着我摇了摇头,一脸无奈的看着我,耸耸肩摊开了双手。估计引脚是被烧坏。哎~~ 长叹一声。
 
    降压吧,找个电阻把电压降下来再试。电阻要多大有点难住我了,要不搞个稳压管简单点?有三伏的稳压二极管。其实用来调光测试的白色二极管就能做到这点。白色发光二极管的正向特牲,可作稳压二极管用。它的导通电压也接近三伏,稳压特牲也不比3伏的稳压二极管差。
 
    电压是降下来了,可是。。可是。。。还是TNND不行。用线连接减压管并短接调光脚,没问题可以关断LED。用电阻试试,折腾了几下完全没效果。和降压管情况一样都告失败。天哪,老天你干嘛戏弄俺纯洁而又弱小的心灵。想不出有其他什么招数了。 
    注释:电阻有滤波功能,可以把波形滤直。放在PWM线路上会吧方波变成正弦波。
    加上降压管,PWM波形的基点会稍微有些偏移。测试可以正常调光。最终决定保险起见,还是换个没有AD的引脚 。求个心理安慰而已,正常情况每个引脚都有上拉和下拉电阻,输入5v是没有问题的。
 
    病急乱投医,开始怀疑一切。输出的波形有问题,和计算的有差异?难道说PT4115调光控制有问题?。。。。难道俺小穆的晶振有问题?一堆的问题搅在一起,和成了稀泥~~~。脑袋开始变质,如同浆糊一般粘稠,又如同棉絮松散。
 
    要不买个示波器看看波形,再换个IC试试?在X宝上发挥第六感潜能,搜了个简易的USB示波器。同时在网上开始漫长的搜索,寻找可能带来希望的可调光替代方案。相关调光IC真不少,都挑花俺的四眼。这么多芯片万一结果还是一样不就麻烦了吗,得选些不同模式的IC。可以慢些买先做好功课,等示波器拿到手。看看实际情况如何,是不是PWM波有问题再说。
 
    示波器到手等了半周,俺的美好时光就这么浪费在漫长的等待中。拿到手迫不及待进行实地检测。发现还不会用示波器,肿了吧-_-!!。翻了下说明书,还好使用还是蛮简单的,调整好基准就能使用。测试小穆的8M高速晶振是否正常,输出PWM是否正常。折腾了几下,发现一切正常完全没问题。再插上LED测试板试试,又弄坏了2块。其实只是测试下,情况和原来一样,就是手贱的后果。发现有个崩坏的测试板竟然能调整亮度,就是闪烁的厉害,无法直视。
    “你敢不敢再闪的厉害点木? 玩累了,小穆洗洗睡吧!”
     
    这段日子不停的往复循环着。周六做两板子,然后周日就烧坏。下周再做再烧坏... ...。如此往复了2周。替换IC的资料也找了一堆,但又担心换IC还是这问题。实在无计可施了,反正也是在准备换IC的资料和材料,死马当活马医求助网上的高手们。网上高手很多,但说实在的俺并不看好能解决。原因是当某些环境未知,而这些因素一定是自己所忽略或不知道的。当大侠们设定的场景和实际场景有出入,套用上去来帮忙解决,就会产生偏差。困难就在这里,怎么提问才能得到答案?
 
    不过幸运的我,碰到一大群大侠。非常感谢EEPW论坛的群主们,特别感谢witin。问题迎刃而解,是共地问题。大功率LED使用测试电源供电,小穆妹子是用普通USB供电,没有共同的地平。导致实际PWM波形出现异常。这种异常波形可以通过示波器看到。只连接探针,不连接探针的接地。这个情况在第一次测PWM波形时看到过,就是不太明白其中道理。
    
    俺理解共地的关系图
    
    解决这个调光问题,噎在喉咙口的鱼刺终于解决,心情舒畅很多。不用破费俺的钱袋子,也不用浪费时间去找其他替代方案。
 
 
重新做的横流测试板,来个双胞胎照 ^^
 
后面用胶带贴起来。
一来防止桌上的原件碰到发生短路。
二来小手摸来摸去沾上不干净的东西(^_^不要想歪咯)。病从口入,据XX权威机构研究得出结论,铅容易让人变小白。锡丝用无铅的,降低对俺身体的伤害。
包起来减少接触总归是好事。
 
临时做了个统一的供电电源板。中间一个5V的IC接反了。快凌晨时是吃夜宵的好时光啊。
”老板给小穆和我来50串羊肉串。“
”好嘞~~”
上~电~,开始慢慢烤出风味来。
“啊~~ 糊了 糊了~~ ”
“客官,实在不好意思。你要的IC糊了~,要不您再瞅瞅,重新点些其他的?”
哎~ 这节骨眼上,竟然烤糊了~~ TNND太不给力了。明显是不然俺睡觉的节奏吗~。
 
 
硬件搞定,软件是俺的强项没啥大问题。稍微改了下频率。计算频率的实际重载值还是比较简单。
[最大赫兹] / [目标赫兹]  = [可设置重载计数值] 
 
所有的时钟通道的都是72MHz( 72 x 1000 x 1000 Hz),要得到 100HZ 。按照公式可以得出 720000这个值。内部重载值最大只能设置  $FFFF(65535)明显无法无法处理,需要再除10.98649.... 左右才能设置。那个叫预分频的东东,派上用处了。
 
[可设置重载计数值] = [自动计数] x [分频值] 
 
明显俺对十六进制计算是灰常不敏感的,为简便计算拆成 7200 x 100 ,酱紫就简单多了。想要多少频率,调分频值就能搞定。亮度值可以从0~7200 随便调,呵呵~~其实也不需要这么多。其中具体多少分频还是需要看实际情况
#define STM32F10X_MD

#include <stm32f10x.h>

#define GPIO_CRH_MODE9_2MHz   GPIO_CRH_MODE9_1
#define GPIO_CRH_CNF9_AOPP GPIO_CRH_CNF9_1
#define TIM_CR2_MMS_CP (TIM_CR2_MMS_0 | TIM_CR2_MMS_1)
#define TIM_CCMR2_OC4M_PWM1 (TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4M_2) void SystemInit(void)
{
unsigned char dump = ; // 使用外部8MHz晶振,启用PLL设置系统时钟为 72HMz
// USB 可用
// APB1 低速总线 36HMz
// APB2 高速总线 72HMz
RCC->CFGR = 0x001D0402;
RCC->CR = 0x01010083; // 闪存访问延迟,48MHz ~ 72MHz = 010。 复位值:0x30
FLASH->ACR = 0x32; // 确定外部高速晶振起效
while (!(RCC->CR>>));
// 确定PLL设置起效
while (!(RCC->CR>>));
// 确定PLL为系统时钟源
while(dump != 0x02) {
dump = RCC->CFGR >> ;
dump &= 0x03;
}
} void Delay(unsigned int v)
{
unsigned int x, y, iDelay;
for (iDelay=; iDelay < v; iDelay++)
for (x=; x < ; x++)
for (y=; y < ; y++)
;
} int main(void)
{
unsigned char iDir;
unsigned int pwmwidth, pwmarr; iDir = ;
pwmwidth = ;
pwmarr = ; // 100Hz // 总线 TIM4 和 B组引脚 使能
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
// PA1 脚使用复用输出,打开TIM4第二通道
GPIOB->CRH &= ~(GPIO_CRH_MODE9 | GPIO_CRH_CNF9);
GPIOB->CRH |= GPIO_CRH_MODE9_2MHz | GPIO_CRH_CNF9_AOPP;
// 设置自动重载计数器
TIM4->ARR = pwmarr;
TIM4->PSC = ; // 100分频
// 设置PWM
// 通道2 PWM模式2
// 设置比较输出
// 设置比较脉冲宽度
TIM4->CCMR2 |= TIM_CCMR2_OC4M_PWM1;
TIM4->CCER |= TIM_CCER_CC4E;
// 设置为比较输出,使能TIM2
TIM4->CR2 |= TIM_CR2_MMS_CP;
TIM4->CR1 |= TIM_CR1_CEN; TIM4->CCR4 = pwmwidth; while () {
Delay(); if (iDir) {
pwmwidth += ;
if (pwmwidth > pwmarr){
pwmwidth = pwmarr;
iDir = ;
}
}
else {
if (pwmwidth > )
pwmwidth -= ;
else {
pwmwidth = ;
iDir = ;
}
}
TIM4->CCR4 = pwmwidth;
} }

羊肉串吃完,一切就绪。上电测试一切顺利。就是在调光模式下,横流测试板有啸叫声。

难道恒流板中锁着一位在哭泣的艳丽女鬼?? 俺来搭救你。哇~~~咔~~咔~~~!!  
换上22uh 电感测试板,一切OK。
 
增加公共供电测试板后,没有修改任何外围相关,测试成功啦。折腾了快一个月的问题终于解决,真是大快人心。完了凌晨2点多,兴奋过度没有一点睡意,明天上班是要打瞌睡的节奏。
 
小穆,拍个照留个念。
 
小穆!俺们去约会吧,已经把大太阳变成了月亮,月色随心所动。^_^
  
小穆和俺的糗事
    前前后后一共做了8块PT4115测试板,烧坏6块残存2块。换烧坏IC弄掉1颗IC。弄爆 2颗 3wLED。烧烤了1颗5V转换IC。
 
相关资料
    PT4115数据手册
 

拥抱ARM妹纸第二季 之 第三次 给我变个月亮,让约会更浪漫!的更多相关文章

  1. 拥抱ARM妹纸第二季 之 第二次 约会需要浪漫,这么大灯泡怎么弄?

    终于轮到俺的小穆出场啦.有请能让太阳也为之暗淡的小穆闪亮登场-,鼓掌吧,欢呼吧!-- ♪♪ We can burn brighter Than the sun ~~~ ♪♪ “谢谢---“ 唱的太棒啦 ...

  2. 拥抱ARM妹纸第二季 之 第一次 点亮太阳

    上次做鱼缸LED灯时还有很多材料正好拿来用.穆等等哥- 俺去找材料. 材料列表     3W LED   x  3     散热片     x  1     恒流IC     x  1     其他零 ...

  3. 《Java入门第二季》第三章 继承

    Java 中的继承1.作用:代码复用. 2.语法:extends关键字. 3.注意点:私有(private)财产(methods.fields)不可继承. Java 中的方法重写 Java 中的继承初 ...

  4. 为什么Sql Server的查询有时候第一次执行很慢,第二次,第三次执行就变快了

    老外提问: Hi, I have an sql query which takes 8 seconds in the first run. The next run there after takes ...

  5. 拥抱ARM妹子第二季 之 序:我和春天有个约会 - 生命的萌芽

      春姑年轻轻的吻了一下小穆妹纸的额头!从沉睡中苏醒的小穆妹纸,缓缓伸了个懒腰--- 啊-- 睡得真香! 等--等-等-!好像和童话故事里的情节不一样,应该由王子我来亲吻睡梦中的妹纸才能醒!!-- 强 ...

  6. 【bzoj3796】Mushroom追妹纸 hash/sa+kmp+二分

    Description Mushroom最近看上了一个漂亮妹纸.他选择一种非常经典的手段来表达自己的心意--写情书.考虑到自己的表达能力,Mushroom决定不手写情书.他从网上找到了两篇极佳的情书, ...

  7. 基于MaterialDesign设计风格的妹纸app的简单实现

    代码地址如下:http://www.demodashi.com/demo/11644.html *今天看了郭神的第二行代码,深深的被MaterialDesign的设计风格所吸引,然后就照例做了一个小D ...

  8. 【BZOJ3796】Mushroom追妹纸 二分+hash

    [BZOJ3796]Mushroom追妹纸 Description Mushroom最近看上了一个漂亮妹纸.他选择一种非常经典的手段来表达自己的心意——写情书.考虑到自己的表达能力,Mushroom决 ...

  9. [BZOJ 3796]Mushroom追妹纸

    [BZOJ 3796]Mushroom追妹纸 题目 Mushroom最近看上了一个漂亮妹纸.他选择一种非常经典的手段来表达自己的心意——写情书.考虑到自己的表达能力,Mushroom决定不手写情书.他 ...

随机推荐

  1. java的线程中的Runnable

                      在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一个类只要继承了Thr ...

  2. 从模态视图push到另一个视图

    //需要给模态视图创建一个Nav,然后再调用presentViewController if (_loginVC == nil) { _loginVC = [[LoginViewController ...

  3. android百度地图中的地图缩放级别

    前期搭建百度地图的环境就不说了,网上一搜一大把,这里只讲地图的缩放,大神可以直接绕道 首先在类的内部初始化一个百度地图的对象 private BaiduMap mBaiduMap; 然后在OnCrea ...

  4. 瀑布流布局--jQuery写法

    HTML <div id="main"> <div class="box"> <div class="pic" ...

  5. Ubuntu 15.04 无损扩展分区(目录)容量的方法 (无需格式化, 文件不丢失)

    源 起 用了一段时间Ubuntu,碰到了UBuntu磁盘空间不足的问题, 最初我只给Ubuntu分配了30个G的空间, 昨天试用了一下VirtualBox安装了一个xp虚拟系统,用以解决Ubuntu下 ...

  6. 收集一些常用的php正则表达式

    1.    平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用: 2.    "^\d+$" //非负整数(正整数 + 0) 3.    "^[0 ...

  7. Linux下DNS服务器的基本搭建

    技术交流群:286866978 安装与配置 1. 装载光驱 2. 卸载光驱 3. 将安装包放在合适的文件夹并解压(有的更换光盘需要重新装载) 4. 安装 5. 重定向配置文件 6. 配置named.c ...

  8. [老老实实学WCF] 第四篇 初探通信--ChannelFactory

    老老实实学WCF 第四篇 初探通信--ChannelFactory 通过前几篇的学习,我们简单了解了WCF的服务端-客户端模型,可以建立一个简单的WCF通信程序,并且可以把我们的服务寄宿在IIS中了. ...

  9. 第十篇、让UIScrollView的滚动条常显

    UIScrollView滚动条一直显示 1.我们知道滚动条是一个UIImageView, 滚动条隐藏是因为设置了alpha属性为0, 所有我们写一个UIImageView的分类 #define noD ...

  10. 方法:一个简单的读取配置文件.properties的工具类 JAVA

    import java.util.ResourceBundle; public class ConfigHelper { private static ConfigHelper instance; p ...