当前位置:首页 > 公众号精选 > 嵌入式大杂烩
[导读]最近没有什么产出,吓得ZhengN翻箱倒柜倒出一些小东西来发。下面分享一个ZhengN大二时候的一个小玩具,软硬件都分享给大家,有需要的小伙伴,文末获取。这个小作品设计到了强电,不建议没经验的小伙伴上手,了解了解即可。

最近没有什么产出,吓得ZhengN翻箱倒柜倒出一些小东西来发。下面分享一个ZhengN大二时候的一个小玩具,软硬件都分享给大家,有需要的小伙伴,文末获取。

这个小作品设计到了强电,不建议没经验的小伙伴上手,了解了解即可。

功能

用STM32控制一个普通灯泡的亮度,一路开关控制普通灯泡电源的通断,另外两路开关分别控制普通灯泡亮度的增加和减小。

调光控制器的原理

通过STM32控制双向可控硅的导通来实现白炽灯(纯阻负载)亮度的调整。双向可控硅的特点是导通后即使触发信号去掉,它仍将保持导通;当负载电流为零(交流电压过零点)时,它会自动关断。

所以需要在交流电的个半波期间都要送出触发信号,触发信号的送出时间就决定了灯泡的亮度。

调光的实现方式就是在过零点后一段时间才触发双向可控硅开关导通,这段时间越长,可控硅导通的时间越短,灯的亮度就越低;反之,灯就越亮。这就需要提取出交流电压的过零点,并以此为基础,确定触发信号的送出时间,达到调光的目的。

1、硬件

控制部分:主控单元以 STM32F103RBT6 单片机为核心,交流电压过零点信号提      取电路中产生的同步信号 TB 接到STM32F103RBT6 的 EXTI_Line0,此信号的下降沿将使 STM32F103RBT6 产生中断,以此为延时时间的起点。控制部分使用的是现有的最小系统板。

驱动部分:驱动部分主要由可控硅组成。可控硅在电路中能够实现交流电的无触点控制,以小电流控制大电流。动作快、寿命长、可靠性高。所以这里选用的是可控硅。驱动部分使用的是自己绘制的电路板,电路原理图:

负载部分:本电路智能控制纯阻负载白炽灯。

2、软件

要控制的对象是 50Hz 的正弦交流电,通过光耦取出其过零点的信号(同步信号),将这个信号送至单片机的外部中断,单片机接收到这个同步信号后启动一个延时程序,延时的具体时间由按键来改变。

当延时结束时,单片机产生触发信号,通过它让可控硅导通,电流过可控硅流过白炽灯,使灯发光。延时越长,亮的时间就越短,灯的亮度越暗(并不会有闪烁的感觉,因为重复的频率为 100Hz,且人的视觉有暂留效应)。由于延时的长短是由按键决定的,所以实际上就是按键控制了光的强弱。

经过实际调试得出,延时时间为0~7ms内的值。在程序中,我把7ms分割为14等份(实际上,分割的分数越大,调节的精度会更高,但是,为了有明显的现象,取14)。对于按键的处理,采用查询法,并且采用按下一次就响应一次的方法,即长按不能连续调整。

主程序:

左右滑动查看全部代码>>>

int main(void)
{
    GPIO_Configuration();
    USART_Configuration();
    EXTI_Configuration();
    PrintfLogo();
    Bright=14-z;          //亮度缺省值为7(通过调Z间接得到Bright)
    printf("当前亮度 = % d \r\n", Bright); 
    while(1)
    {
         //S1(PC6) 调高灯的亮度
        if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_6) == Bit_RESET)
        {
            delay_ms(5);  //消除抖动
            if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_6) == Bit_RESET)
            {
                z--;   
                //等待按键释放
                while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_6) == Bit_RESET);  
                if(z==1)
                {
                   z=14;
                }
                Bright=14-z;
                printf("当前亮度 = % d \r\n", Bright);
             }
        }
        //S2(PC7) 调低灯的亮度
        if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_7) == Bit_RESET)
        {
            delay_ms(5);  //消除抖动
            if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_7) == Bit_RESET)
            {
                z++;  
                //等待按键释放
                while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_7) == Bit_RESET);
                if (z==14)
                {
                    z=1;
                }
                Bright=14-z;
                printf("当前亮度 = % d \r\n", Bright);
            }
        }
        //S3(PC8) 调节灯的亮灭
        if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_8) == Bit_RESET)
        { 
            delay_ms(5);  //消除抖动
            if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_8) == Bit_RESET)
            {
                /*S3_Num为S3按下的次数,当按下的次数为奇数时灯灭
                当按下的次数为偶数时,灯亮,并且亮度值为默认值7*/

                S3_Num=S3_Num+1;
                //等待按键释放
                while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_8) == Bit_RESET);
                if(S3_Num%2==1)
                {
                    __set_PRIMASK(1);  //关闭总中断,灯灭
                    printf("灯灭\r\n");
                }
                else
                {
                    __set_PRIMASK(0);  //打开总中断,灯亮
                    printf("灯亮,且亮度值为默认值% d \r\n", Bright); 
                }              
            }
        }
    }
}

外部中断函数:

void EXTI0_IRQHandler(void)
{
     if(EXTI_GetITStatus(EXTI_Line0)!=RESET)            
     {              
         delay_us(500*z);   //调节z的值来调节灯的亮度
         GPIO_ResetBits(GPIOC,GPIO_Pin_11);
         delay_us(100);
         GPIO_SetBits(GPIOC,GPIO_Pin_11);         
         EXTI_ClearITPendingBit(EXTI_Line0);
     }
}

验证:


【资料获取】公众号聊天界面回复调光控制器,进行获取


软硬结合是一件很酷的事情,虽然本公众号倾向于分享软件,但是ZhengN对硬件同样感兴趣。等到ZhengN软件学有所成之后再重新学习一些硬件知识,分享一些软硬结合的东西。玩嵌入式,是一辈子的事~

猜你喜欢

学习STM32的一些经验分享

我的单片机转嵌入式Linux之路


1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。在公众号聊天界面回复1024,即可免费获取!

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭