拥抱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波形时看到过,就是不太明白其中道理。
    
    俺理解共地的关系图
    
    解决这个调光问题,噎在喉咙口的鱼刺终于解决,心情舒畅很多。不用破费俺的钱袋子,也不用浪费时间去找其他替代方案。
 
 
重新做的横流测试板,来个双胞胎照 ^^
 
后面用胶带贴起来。
一来防止桌上的原件碰到发生短路。
二来小手摸来摸去沾上不干净的东西(^_^不要想歪咯)。病从口入,据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 = 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点多,兴奋过度没有一点睡意,明天上班是要打瞌睡的节奏。
 
小穆,拍个照留个念。
 
小穆!俺们去约会吧,已经把大太阳变成了月亮,月色随心所动。^_^
  
小穆和俺的糗事
    前前后后一共做了8块PT4115测试板,烧坏6块残存2块。换烧坏IC弄掉1颗IC。弄爆 2颗 3wLED。烧烤了1颗5V转换IC。
 
相关资料
    PT4115数据手册
 

转载于:https://www.cnblogs.com/gleam/p/3819921.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值