这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » ARM妹纸-绿色生命之光 第二季【更新7/4】

共9条 1/1 1 跳转至

ARM妹纸-绿色生命之光 第二季【更新7/4】

助工
2014-05-31 19:58:53     打赏

第二季 绿色生命之光

-----------------------------------------------------------

我和春天有个约会 - 生命的萌芽                                  沙发

第一次 点亮太阳                                                           8楼

第二次 约会需要浪漫,这么大灯泡怎么弄?              9楼

第三次 给我变个月亮,让约会更浪漫!                    13楼

第四次 记忆美好的瞬间                                        (待续...)




现在网络不是草根能随便使用,相关资料上传后都被屏蔽。所以,后面只能共享本帖自己产生的数据给大家。再被屏蔽俺也木有办法了。





关键词: 草灯     ARM     LED     调光     摄像头     视频    

助工
2014-05-31 20:11:50     打赏
2楼
我和春天有个约会 - 生命的萌芽 



春姑年轻轻的吻了一下小穆妹纸的额头!从沉睡中苏醒的小穆妹纸,缓缓伸了个懒腰~~~ 啊~~ 睡得真香! 等~~等~等~!好像和童话故事里的情节不一样,应该由王子我来亲吻睡梦中的妹纸才能醒!!~~ 强烈抗议重新改写此段!
又大又醒目而又显眼的废字     我的ARM妹纸有名字啦,她不再叫翠花~ 也不叫凤姐~~ 叫小穆^^
    这几天的天气不错,河边柳条郁郁葱葱。这是个踏青的好时节,陪老婆和儿子去逛逛苗圃。人那是真的多,狭窄的小路两边停满了做生意和像我家一样来采购植物的车,连靠边停的地方都找了许久才找到个偏远的位置停了下来。苗圃就是不同,各式花卉样样齐全。看多了不知道选,最好是全包-_-!!。“你也太贪心了吧!”,“好吧!我承认有点贪心。谁叫这里的花那么吸引人!”
东挑细选的,最终抱回家十来株小植物,屋子里添了那么些许绿色的,感觉很清新心情舒畅!想象着美好的春天,小屋沉浸在绿色植物的王国中。。。 “来换花盆”美梦被我老婆给打破了。看来这份绿意还是要细心呵护,才能有所回馈。可是~~ 想想本人实在有些懒,想到要隔三差五浇花施肥。坚持不忘实在是有些难为大老粗一个的我,实为不易之事。
下面的看官急了“你这是写的什么乱七八糟的东西?”
懒人总会想到偷懒的方法,为啥不搞个自动。科技的目标就是解放劳动力,专心投身更有价值的工作,让生活更美好!(价值是相对的^_^,对很多人来说就是脸上流露出的那种甜美笑容!)。
  ~~~ 这完全是我这个懒人的想法!浮想尽情和小穆妹纸去约会吧~(也要多陪陪家人!^^
为了实现这个夙愿,准备着手做一个可以自动灌溉这一抹绿意的方案(“基业长青”脑子里浮现出这个词,完蛋了被公司洗脑过度,已经无法自拔)
那么植物需要什么内阳光和雨露! bibo~~ 小穆妹纸答的完全正确!那我们就动手造太阳和雨露。 在适合的时间给予适合的光照和灌溉。要弄成什么样子呢?
用爪子划拉个草图,各位看官见笑!^^

也许大概可能应该确定~肯定就是长这样吧了吧!草稿确定,下面就是和小穆妹纸幽会的时间啦!

助工
2014-06-01 07:19:09     打赏
3楼
 热好啊,热了就能有新主题:”再夏天里的雪花,习习凉风吹入心头“。搞个MINI冷风扇玩玩。

助工
2014-06-02 12:17:15     打赏
4楼
第一次 点亮太阳
上次做鱼缸LED灯时还有很多材料正好拿来用。穆等等哥~ 俺去找材料。
材料列表     3W LED   x  3     散热片     x  1     恒流IC     x  1     其他零件  ... ...

注意哦,大功率LED那叫个热啊。一定不要忘记把这个东东绑在散热片上,否则这小家伙会把自己的脑袋给烧掉。 “CPU散热器行吗” “当然,只要能散热的都行。”
小穆,帮忙摆摆整齐。笑一笑,茄子~~~! 

再来一张

~~~ 一堆乱七八糟的东西! 自己动手搭个测试环境。
恒流IC使用的是比较常见的PT4115。电路比较简单,外部元件很少,而且能通过PWM调光。当然啦,高手是可以直接使用MCU加MOS管进行控制。显然俺还是属于初级水平,现在只能依靠成品恒流IC单元^_^。
这张是手册上的3w标准电路图,实际只要4个外部元件就能搞定咯。一个电容,一个电阻,一个电感一个二极管,非常简单吧。
全部齐备,准备开工。好久没焊,能力明显下降。先拿简单的开刀。
三个LED串联,够简单。焊这个我喜欢。

控制电路完成啦^^。
确认没问题,上电测试。小穆,快躲远点~~ 上电啦~~ 心跳好快~~ 完了,出手汗了~~ 麻烦了,小穆快拿脸盆来,手汗流到地毯上湿透啦~ 带上你的太阳眼镜。

通电啦~~ 好像没有发生可怕的事情~~~ 哇咔咔卡~~~
哇~~ 为啥不亮啊~~ TNND ~~ 
hoho~~ 发现测试板上的开关木有开。原来是焊开关时把自锁开关的方向颠倒了,结果是按下为关闭,弹起时打开。 而且这个开关接触不良-_-!!


瓦咔咔~~ 被亮瞎了。 那个叫刺眼啊。太阳终于被我点亮啦,小穆欢呼吧~~~ 雀跃吧~~~ 灯关掉能照亮整个屋子。

相关资源     PT4115数据手册 --- (自己搜一下,网络已经不再是草根可以随便使用的网络了)

助工
2014-06-08 09:19:55     打赏
5楼

第二次 约会需要浪漫,这么大灯泡怎么弄?



终于轮到俺的小穆出场啦。有请能让太阳也为之暗淡的小穆闪亮登场~,鼓掌吧,欢呼吧!~~ We can burn brighter Than the sun ~~~ “谢谢~~~“ 唱的太棒啦,再来首~~  再来首~~   谢谢大家,为大家表演《遮天蔽日》魔术“  !@%&……¥%!@!@#……¥@#¥%@#¥!@!!%%……¥%……&¥(咒语)
 ... .... 场内一片漆黑,只看到3个省略号~~~ 番茄或鸡蛋可以丢,硬东西可乐罐之类不要丢啊!划伤俺小穆可爱的脸,哼哼~和你们拼命! 好吧,不玩啦~!
对小穆来说,PWM输出那是小菜一碟。小穆对木?嗯嗯!哇咔咔~~~ 连代码都不用写就能实现的喔!。
可以直接通过TIM中的设置,实现PWM的输出! “啥??PWM?PWM是什么东东??” “怎么连这个都不知道!! 就是小穆唱歌的节拍呗。” 官方点就是“脉宽调制”,这可是个很有用的东西,很多东西都可以用这进行调节。如马达的转速,当然还能调节LED亮度。具体可以搜搜网上有非常详尽的说明。
拿出《小穆妹纸攻略手册》,找到TIM2-TIM5。
上面的是TIM2 到 TIM5 的原理图。手册上TIM1排在前面,感觉怪怪的。TIM1前面扣这一顶“高级”的帽子,那货对俺来说高级功能暂时不用,所以直接忽视→_→。TIM2的图比较简单。 小穆现在不在!偷偷告诉你,俺看了这图N遍啊~N遍~~,才有了大致了解。女人心海底针,想要了解真不容易。
看看,这个图要比时钟配置简单多了。按照上面俺把她划分成三块。   1、RCC输入                         ---  为产生节拍提供基准   2、时基单元                         ---  小穆的心跳节拍器,1/4拍是多长呢?   3、捕获比较输入输出通道    ---  跟随着节拍,唱出你的快乐吧。 看着图就能知道,俺的小穆有多强大。一个时钟能同时控制4路通道,就是4个IO口~\(≧▽≦)/~啦啦啦。蓝色区域左手边是监听耳麦(输入捕获的),右手边是麦克风(比较输出的)“通道在那个IO引脚上?”
“打开MicroXplorer,设置TIM1-4 为PWM输出,所有通道对应IO一目了然。这太简单了,比看葵花宝典清晰不知道多少倍!”


按照刚才看妹纸使用手册,就大致能知道怎么处理过程。主要6步就能搞定。
PWM设置步骤   1、确定那个TIM输出PWM   2、使能总线 IO口和TIM   3、使能IO口,设置复用输出   4、使能TIM,设置输出比较模式   5、设置时基TIM寄存器   6、设置TIM产生通道的相关寄存器
按照上面的步骤还是很多,寄存器一大把。抓头发吧~~~ 大头了吧~~。俺有个超级法宝“IDE调试器”,这个东东可以居家旅行必备神器。PWM是直接通过配置获得,这种情况下。嘿嘿~~ 直接运行空程序,进入调试状态。小弟用KEIL,所以...

控程序当然也不是完全空,至少已经设置好晶振。这个是小穆妹纸标准行头(模板),拥抱小穆妹纸第一季的珍贵遗产。 整个代码设置基本的时钟单元,int main(void) 函数就只有让小穆无限劳碌命的一句话。
#define STM32F10X_MD
#include 

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;
    }              
}

int main(void)
{
    while (1);
}

-------------------------------------------------- 

译开关 STM32F10X_MD

    这个模板只适合 STM32F101~3 Flash 64~128K,具体参见参考手册(RM0008 V14 英文版)第2.2章。中文版没找到类似说明,应该是翻译版版本太旧。STM头文件中也有类似说明,可以直接删除此行,就能定位到。第一季里有详细说明。

启动调试后所有小穆妹纸的心思,那是一目了然。
如俺想打开TIM2通道2的PWM进行输出。按照下面红色圈圈的位置打开设置,想要的PWM的设置完成啦。可以看到那些寄存器的值,就是最终需要设置的结果哦。这竟然时如此之的简单。

想看看效果这容易,打开逻辑分析界面。就能看到有条线在上下跳动。 1、打开逻辑分析界面, 2、打开设置对话框 3、加入需要监视的引脚(如:PORTA.1)  4、设置按BIT(电平方式)显示。颜色改个热辣的


“我什么都没看到。” “我就看到一坨颜色” 难道就是传送中国王的新衣,只有聪明的人才能看到?"  “图片圈圈2位置,右边→_→看,有个Zoom,点点下面 缩小(In) 或 放大(Out)试试。应该就能看到。”  “还是看不到?" 看来要找找问题,监视的引脚不对?TIM使使能没?IO口使能没?总线使能没?重头到尾过一遍。
按照上面的设置,可以看到实际原理图大致对应寄存器位置。


“PWM输出多少频率还是不清楚?” “第四和第五个圈圈,是设置实际频率的位置。” 每次从1数到100,到100后从头再数。这个就是“时基单元”干的活。至于想用啥鸟语数,这个俺不管啦,反正小穆听得懂就行。 数到多少让小穆脉动一下呢,如到50后脉动一下?设置“捕获比较寄存器” 。那么数到50后,小穆用犀利的眼神盯着我,让给买奶茶。 “那设置0呢,或是俺调皮一下设成101,或999999,会发生什么情况?” “好吧,我太牛了。试试会发生什么事情!”
数数还有很多方法,如倒着数,顺着数,双数数...,那种能让你心动,就可以用那种。想了解更多,参见葵花宝典!反正我只要顺着数就行了。
玩够了,俺准备直接把这些值使用盖世神功“啃秋四,啃秋五”全部抄袭下来。

int main(void)
{
    unsigned int x, y;
    unsigned char iDir;
    unsigned int pwmwidth;
    
    // 总线 TIM2 和 A组引脚 使能
    RCC->APB1ENR = 0x00000001;
    RCC->APB2ENR = 0x00000004;
    // PA1 脚使用复用输出,打开TIM2第二通道
    GPIOA->CRL = 0x444444A4;
    // 设置自动重载计数器
    TIM2->ARR = 900;
    // 设置PWM
    //   通道2 PWM模式1
    //   设置比较输出
    //   设置比较脉冲宽度
    TIM2->CCMR1 = 0x6000;        
    TIM2->CCER = 0x0030;        
    TIM2->CCR2 = 0x0000;
    // 设置为比较输出,使能TIM2
    TIM2->CR2 = 0x0030;
    TIM2->CR1 = 0x0001;
        
    
    iDir = 1;
    pwmwidth = 1;
    
    while (1)
    {
        // 延迟
        //for (iDelay=0; iDelay < 1; iDelay++)
            for (x=0; x < 100; x++)
                for (y=0; y < 1000; y++)
                    ;
        
        if (iDir) pwmwidth++;
        else pwmwidth --;
        
        if (pwmwidth > 900) iDir = 0;
        else if (pwmwidth < 1) iDir = 1;
        
        if (pwmwidth == 10)           TIM2->CCR2 = 0;
        else if (pwmwidth == 300)     TIM2->CCR2 = 300;
        else if (pwmwidth == 600)     TIM2->CCR2 = 600;
        else if (pwmwidth == 900)     TIM2->CCR2 = 900;
    }
}
------------------❤-----浪--------漫-------分-------割-------线-----❤------------------ 免责声明:    上面只是测试用代码不能作为正式代码使用。这种臭臭的coding,只有天知道写是是什么鸟玩意。当然如果你想让自己在几天后,完全不知道写的是啥,这是个不错好方法。
代码风情    好的代码总是很优雅的,犹如妹纸的曲线。能让别人一看就知道你的思路。当然这个要求可能比较高,但是一定要有这个目标在。一般对硬件操作有2中,一种是用官方提供的库,一种是直接操作寄存器的。     第一种 固件库 (☆推荐         使用库方法,很多教学中都基本都会使用。优点是不用关心寄存器易于移植可读性高。有一套标准的函数命名规范,非常容易记忆。优点很多,小问题也是有的。函数库版本问题,容易困扰初学者。对公司级应该这不是很大问题。
    第二种 直接寄存器操作         测试代码中的例子是粗暴型控制寄存器的方法,还种是相对固件库类似的方法。用常量定义控制寄存器。在头文件中都会有定义寄存器相关的常量。命名规则和固件库函数命名规则一致。这种方式代码的可读性要比粗暴型的高很多。如打开TIM1时钟 TIM2->CR1 |= TIM_CR1_CEN 这句话肯定要比 TIM2->CR1 |= 1  更容易理解。
    可能你会问,为什么我要中这种自己都不推荐的方法来coding?其实也是蛮简单的,本身有一定的工程开发经验,xx模式之类有一定了解。所以更想侧重了解硬件,粗暴型控制能更容易了解硬件。后续代码还是以直接操作寄存器,当然不是数字型粗暴模式,而是常量型温柔模式。原有百年不变的东西(模板),直接忽视→_→。
    在整个产品中硬件控制只是一部分,还有一部分是功能实现。团队合作那么就要以团队为准,如果就你一个人项目就看你自己的拿捏。自己的代码风格对以后影响深远。
    具体相关的代码风格的文章很多,这里提就是怕被我带坏。只能忍痛在妹纸篇里插播免责声明。
------------------❤-----浪--------漫-------分-------割-------线-----❤------------------
(⊙o⊙)…~~ 跑题啦!小穆拉长了脸,写着一脸的讨厌。( ˇˍˇ )
用个LED做个测试瞅瞅,效果如何。

嗯嗯,效果不错。






相关资料     MicroXplorer      --- ST官网上有     第一季工程模板   --- http://pan.baidu.com/s/1c0w4INQ     葵花宝典              --- ( 中文参考手册被指侵犯版权,8能共享,亲们自己网上搜)
关键字    TIM原理,PWM,设置步骤,调试,代码风格,逻辑分析,引脚功能




助工
2014-06-08 09:29:26     打赏
6楼

原图都比较大,按原图可能稍微有些大。特意上传时缩小尺寸。

帖子排版真不容易!忙活半天,效果还是米word上好。


强烈建议,增加图片点击放大功能。


----------

经过风哥的指示,把图片都放大到500    





助工
2014-06-25 08:50:01     打赏
7楼
哎,LED横流调光IC搞的俺快崩溃了。

助工
2014-07-04 22:14:12     打赏
8楼

第三次 给我变个月亮,让约会更浪漫! 


    嗯嗯,效果不错。趁着这个热乎劲,接到俺的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 

#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数据手册     关于PWM调光问题讨论帖 http://forum.eepw.com.cn/thread/257194/1
关键字    PT4115,调光,地平,频率计算,共地



助工
2014-07-04 22:37:43     打赏
9楼
 米人顶,自己顶。

共9条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]