1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。关注微信公众号【嵌入式大杂烩】,回复1024,即可免费获取!

最近没有什么产出,吓得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,即可免费获取!


STM32 | 基于STM32实现的普通灯泡调光控制器相关推荐

  1. 基于STM32实现的普通灯泡调光控制器

    最近没有什么产出,吓得ZhengN翻箱倒柜倒出一些小东西来发.下面分享一个ZhengN大二时候的一个小玩具,软硬件都分享给大家,有需要的小伙伴,文末获取. 这个小作品设计到了强电,不建议没经验的小伙伴 ...

  2. 基于单片机的调光控制器设计

    1 调光控制器设计 在日常生活中,我们常常需要对灯光的亮度进行调节.本调光控制器通过单片机控制双向可控硅的导通来实现白炽灯(纯阻负载)亮度的调整.双向可控硅的特点是导通后即使触发信号去掉,它仍将保持导 ...

  3. 基于8086单片机的PWM调光(带汇编)

    之前网上并没有详细的基于8086的PWM调光设计,做完课程设计,给大家分享一下使用DAC8032提供电压的设计思路. 1. 总体设计 在这次设计中,使用了PWM脉宽调制输出方式,即通过对一系列脉冲的宽 ...

  4. 基于单片机的LED自适应调光系统的设计与实现 - 调光电路图

    电路图简介: 本文主要介绍了基于单片机的LED自适应调光系统的设计与实现.LED自适应调光系统是一种典型的绿色照明方式,与传统照明相比,具有智能.节能.环保.寿命长.安全可靠等这些优点,这是代表着照明 ...

  5. 【PWM】从stm32到pwm到OLED屏幕调光到晚上不要玩手机

    一.前言 最近做项目,配置了单片机中PWM波形输出,配置单片机中的一个引脚输出PWM波,示波器查看这个波形,做了实践操作,有一些感想,将一些了解过的知识和常识结合,包括pwm.stm32单片机.引脚. ...

  6. 基于8086单片机的PWM调光(8255带汇编)

    之前网上并没有详细的基于8086的PWM调光设计,做完课程设计,给大家分享一下使用8255实现四个等级调光的设计思路. 1.总体设计 通过8255查询ADC0808的EOC口判断A/D转化是否完成,转 ...

  7. stm32核心板可以点亮灯吗_STM32G0板卡试用 | NUCLEO-G071RB板之PWM调光实验

    新近参与电堂平台活动,获得最新款NUCLEO-G071RB板卡,帮助我了解STM32G071RB这款芯片的特性,下文为我的试用体验. 项目概述 ST公司从2012年推出入门级低成本Cortex-M0内 ...

  8. 集丰照明|LED五种调光方式详解(DALI/DMX/0-10V/PWM/可控硅)

    LED五种调光方式详解 LED的发光原理同传统照明不同,同功率的 LED 光源,因其采用的芯片不同,电流电压参数则不同,故其内部布线结构和电路分布也不同,导致了各生产厂商的光源对调光驱动的要求也不尽相 ...

  9. 照明控制那些事儿 之 可控硅调光

    编辑手记 本系列文章出自课堂君大学同窗文明之手,文同学属于当时班上学霸,现在仍然是PHILIPS的技术大拿,尤其在照明控制领域.无奈学霸通常都不喜欢抛头露面,应作者要求免去了照片.在这一系列文章里,学 ...

最新文章

  1. vuecli3 引入全局scss变量_vuecli3 从搭建到优化
  2. 联想笔记本Ideapad(flex 2)进入BIOS设置U盘启动的详细步骤
  3. 机器学习笔记:激活函数
  4. 快节奏多人游戏同步:技术与算法的实现
  5. java 内部编码_Java 中文编码分析
  6. java实现 阿拉伯数字转换为汉字数字 算法
  7. Struts使用细节
  8. centos7 php多版本切换_CentOS7服务搭建----搭建私有云盘01
  9. JDK数字格式,由星期几变为周几
  10. 聚类算法---Kmeans算法、K均值算法
  11. 基于KINECT的拖拉机防撞系统
  12. 手机自动下载当天voa听力
  13. 管理信息系统开发流程
  14. 求生之路服务器列表只显示ip,L4DL4D2 玩家进入退出+玩家转队伍SteamIdIP+国家+城市显示SQL版本 SP源码 2.4(2013-10-15更新)...
  15. CSDN日报20170217——《辞职信:写给我的“藤野先生”》
  16. 如何让一个已经存在的项目跑起来
  17. 有赞测试新人训之探索与实践
  18. java根据提供word模板导出word文档
  19. 怎样做出完美的高达模型
  20. BIOS中断大全(表格)

热门文章

  1. 智能养殖场和传统养殖场区别
  2. 电脑浏览器的插件安装位置
  3. 旷视三年,我学到了什么
  4. k8s中的Volume
  5. 灰狼优化算法求函数最优值matlab,GWO(灰狼优化)算法MATLAB源码逐行中文注解(转载)...
  6. Silverlight安装
  7. 程序员的代码行数真的越少越好吗?
  8. 根据经纬度计算两点之间的距离---google计算公式推导
  9. 分词词频分析和高频词搜索分布
  10. Ubuntu 20.10 安装 gcc, g++,clang,make,make-guile