拥抱ARM妹纸第二季 之 第三次 给我变个月亮,让约会更浪漫!
嗯嗯,效果不错。趁着这个热乎劲,接到俺的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波形时看到过,就是不太明白其中道理。
俺理解共地的关系图
![](http://images0.cnblogs.com/i/31908/201407/021217148554723.png)
解决这个调光问题,噎在喉咙口的鱼刺终于解决,心情舒畅很多。不用破费俺的钱袋子,也不用浪费时间去找其他替代方案。
重新做的横流测试板,来个双胞胎照 ^^
![](http://images0.cnblogs.com/i/31908/201407/021217409967241.jpg)
后面用胶带贴起来。
一来防止桌上的原件碰到发生短路。
二来小手摸来摸去沾上不干净的东西(^_^不要想歪咯)。病从口入,据XX权威机构研究得出结论,铅容易让人变小白。锡丝用无铅的,降低对俺身体的伤害。
包起来减少接触总归是好事。
![](http://images0.cnblogs.com/i/31908/201407/021217594029398.jpg)
临时做了个统一的供电电源板。中间一个5V的IC接反了。快凌晨时是吃夜宵的好时光啊。
”老板给小穆和我来50串羊肉串。“
”好嘞~~”
上~电~,开始慢慢烤出风味来。
“啊~~ 糊了 糊了~~ ”
“客官,实在不好意思。你要的IC糊了~,要不您再瞅瞅,重新点些其他的?”
哎~ 这节骨眼上,竟然烤糊了~~ TNND太不给力了。明显是不然俺睡觉的节奏吗~。
![](http://images0.cnblogs.com/i/31908/201407/021219122464452.png)
硬件搞定,软件是俺的强项没啥大问题。稍微改了下频率。计算频率的实际重载值还是比较简单。
[最大赫兹] / [目标赫兹] = [可设置重载计数值]
所有的时钟通道的都是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 = 0; // 使用外部8MHz晶振,启用PLL设置系统时钟为 72HMz // USB 可用 // APB1 低速总线 36HMz // APB2 高速总线 72HMz RCC->CFGR = 0x001D0402; RCC->CR = 0x01010083; // 闪存访问延迟,48MHz ~ 72MHz = 010。 复位值:0x30 FLASH->ACR = 0x32; // 确定外部高速晶振起效 while (!(RCC->CR>>17)); // 确定PLL设置起效 while (!(RCC->CR>>25)); // 确定PLL为系统时钟源 while(dump != 0x02) { dump = RCC->CFGR >> 2; dump &= 0x03; } } void Delay(unsigned int v) { unsigned int x, y, iDelay; for (iDelay=0; iDelay < v; iDelay++) for (x=0; x < 100; x++) for (y=0; y < 1000; y++) ; } int main(void) { unsigned char iDir; unsigned int pwmwidth, pwmarr; iDir = 1; pwmwidth = 0; pwmarr = 7200; // 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 = 25; // 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 (1) { Delay(20); if (iDir) { pwmwidth += 50; if (pwmwidth > pwmarr){ pwmwidth = pwmarr; iDir = 0; } } else { if (pwmwidth > 50) pwmwidth -= 50; else { pwmwidth = 0; iDir = 1; } } TIM4->CCR4 = pwmwidth; } }
羊肉串吃完,一切就绪。上电测试一切顺利。就是在调光模式下,横流测试板有啸叫声。
难道恒流板中锁着一位在哭泣的艳丽女鬼?? 俺来搭救你。哇~~~咔~~咔~~~!!
换上22uh 电感测试板,一切OK。
增加公共供电测试板后,没有修改任何外围相关,测试成功啦。折腾了快一个月的问题终于解决,真是大快人心。完了凌晨2点多,兴奋过度没有一点睡意,明天上班是要打瞌睡的节奏。
小穆,拍个照留个念。
![](http://images0.cnblogs.com/i/31908/201407/021221080128353.jpg)
小穆!俺们去约会吧,已经把大太阳变成了月亮,月色随心所动。^_^
小穆和俺的糗事
前前后后一共做了8块PT4115测试板,烧坏6块残存2块。换烧坏IC弄掉1颗IC。弄爆 2颗 3wLED。烧烤了1颗5V转换IC。
相关资料
PT4115数据手册