基于STM32的智能台灯

系统简介

台灯早已成为人们生活的必需品,但是随着科技的发展,以及人们对生活质量的追求 ,市面上的普通台灯已经不能满足智能家居的应用要求,所以台灯也随着科技的进步走向智能化。此次设计的智能台灯拥有多种功能,作为以STM32为基础的台灯,其主控制器为Cotex-M3控制器,它的生产者是意法半导体企业,在完成软硬件设计之后,此智能台灯便能够拥有多种功能,比如能够进行短距离无线遥控以及多级亮度调节等,使得台灯更加智能化,更方便。
首先是台灯的多级调亮功能,本设计为了实现台灯不同亮度的调节,采用的是控制LED的闪烁间隔时长的方法。多级调亮可以满足人们对不同光照亮度的需求,比如睡前看书时可以选择较亮的亮度,睡觉时有开夜灯习惯的人就可以把亮度调低,以充当夜灯的效果。
然后是遥控功能,这里采用的是红外来实现无线短距离遥控。红外遥控器可以控制台灯的开和关,以及台灯的亮度。这个功能主要是防止忘记关灯是可以不用再走到灯前,更加方便。
最后是触摸按键控制,触摸按键的增加使得台灯更加的简洁,只需要一个触摸按键就可以实现亮度的调高或调低。
此次通过实验测试结合系统总体设计方案这一手段来展开研究,通过研究发现,通过对STM32的运用,智能台灯能够展开多任务管理工作,这使得系统不但具备实时性特点,而且也十分稳定。

关键字:STM32 智能台灯 红外 触摸按键

第一章绪论

1.1 课题研究的意义及背景
当今社会,不仅科学技术在不断发展,人们的生活质量水平和以往相比也有了极大进步,所以在各种家居中,对于智能化技术的运用也愈加频繁。通过对以往的照明系统进行分析能够发现,以往选用的通常为综合布线方式,在对电路进行控制时选用的则是翘板开关,如此设计会令灯具受损,同时会极大地缩短灯具寿命,并且还容易造成长时间的明灯,从而浪费能源。当前不论是嵌入式技术,还是半导体技术都有了极大改进,同时电子产品也愈发重视环保节能性能,所以人们对照明系统也提出了更高的要求,智能化的台灯也应运而生。从市场的角度看,人们对于台灯的要求具体有以下两点:首先是有较强的装饰性,有设计感,可以体现出不同的个性:其次是多元功能能够令人们多元需求获得充分满足。此时这种智能台灯向组合化、系统化、网络化、装饰化、高效节能化方向发展,智能台灯的出现改变了台灯行业的现状。
但是,我国在研发新能源上起步比较晚,而且和发达国家相比相关技术也存在较大差距。如今在我国市场翘板开关依旧为主流产品,人们长久以来的生活习惯以及翘板开关不方便控制的缺点,导致了大量的能源浪费。我们身边到处都是这样的例子,比如放学后空无一人的教室依然开着十数盏灯,夜深后楼道里却还是耀如白昼,没有人的书房却依旧开着灯。这些不光会造成每年的能源浪费,长明灯也会导致灯具寿命的缩短。灯具和开关的损坏也会反映到资金的浪费,这样的恶性循环是经济社会不能忍受的。
现在,智能台灯的开发基于LED,不论是色温还是亮度都是可以进行调整的,其主要技术方向是实现远程控制的同时能够提供诸多场景模式。而它的照明目标有三个,一是状态反馈;二是对光源进行控制;三是对环境情况进行自动识别。能够发现在照明控制系统里,三方面之间的协调与可靠的通信平台密不可分,这三方面首先是光源;其次是管理平台;最后是传感器。当前伴随着物联网的充分发展,当照明系统有了新的发展机会的同时,也需要面临许多新挑战,作为和生活实现紧密联系的一种物联网应用,对于智慧城市而言,照明的重要性不言而喻。
通过对我国灯具市场进行分析能够发现,当前市场灯具拥有丰富的种类,普通台灯光源选择的是白炽灯或者日光灯,供电选择的交流电源(220V),控制开关则是前文所提到的翘板开关。然而此类台灯拥有诸多不足,首先,其电压比安全电压高得多,容易产生用电隐患;其次会消耗许多电量;最后如果使用的是日光灯,由于日光存在频闪效应,所以会在一定程度上令人的眼睛受到伤害。截至目前,虽然人体智能台灯拥有诸多优点,比如它的供电选择的是直流电源(+5V),不但没有辐射,而且也十分安全,不但并不会产生污染,而且能够使用很久等等,但是在市场上这类产品并不多。
而智能台灯克服了传统台灯供电方式单一的缺点,可进行灯光的亮度调节,且将寻迹功能和短距离无线通信功能与传统的台灯相结合,不仅实现了智能化、极大地方便人们的生活需要,而且也能够对室内环境进行装饰,令人们的生活质量得到提升。从能源角度观察,因为它的高科技特点,它更加能够在能源节约方面做出更大的贡献,也是节能的一个代表。
1.2 本文主要研究的内容
当前人们生活质量和以往相比有了极大变化,人们对于安全问题也愈发重视,所以对于访问控制系统性能要求也在不断提高。可以预见,在照明系统的未来发展过程中,照明系统将进一步网络化,数字化,集成化,多元化和智能化。
本文共分为五章,具体内容如下:
第一章:绪论,先对台灯现实存在意义进行了阐述,然后对照明系统在我国和其他国家的发展情况进行了叙述。
第二章:详细介绍了智能台灯技术所涉及到的相关理论知识,然后根据系统具体的需求和设计目标,确定智能台灯的总体方案。
第三章:嵌入式硬件平台设计。主要包括主控模块、2.5G红外发送和接收模块、TTP223电容式触摸按键模块和LED模块,介绍各个模块芯片的特性以及与STM32的接口通信。
第四章:系统软件测试。详细分析系统启动流程,对系统的核心识别算法进行理论研究。同时分析了评价施行的条件、具体过程以及设施要求等内容。
第五章:总结部分。在总结此次设计系统的情况之后,提出了下一步研究方向。

第二章系统总体结构

2.1 设计的需求分析
此次研究的对象是多功能智能台灯,在设计时选择的主控芯片为STM32F103C8T6芯片,系统的所有开发都围绕该芯片展开,底层开发尽可能的利用主控芯片的资源。该芯片系统时钟为72 MHz,为48引脚LQFP贴片封装,具有64KBFlash,不仅性价比较高,功耗较低且自带的计数器可产生足够的PWM信号及用作触控捕获。其硬件系统整体设计方案如图1所示。
在这里插入图片描述

图1 硬件系统方案

2.2 系统的功能需求
内容及要求:制作采用STM32系列MCU作为主控芯片来负责驱动其他外设模块的智能台灯,其特点是可以多级双控调整亮度,一种是用触摸按键,另一种采用红外作为无线模块以达到无线遥控控制的效果。具体要求如下:
1.插上电源,打开自锁开关后,台灯默认处于不亮状态,此时可以使用手中的红外遥控器对准台灯的红外接收模块,按下开关按钮,台灯就会亮起,再次按下开关按钮,台灯就会关闭。
2.此时按下调亮按钮,台灯的亮度就会增加,当增加到一定的亮度后按下调亮按钮台灯的亮度也不会改变。但若是按下调暗按钮,灯光就会随之变暗。
3.台灯主体上的触摸按键也可以控制台灯的开启和关闭以及灯的亮度,轻触触摸按键是开启或关闭台灯,开启后台灯依旧默认是最暗的状态,此时长按触摸按键后抬起就可以增加亮度,增加到最亮后再这样操作就会变暗。
4.如果用触摸按键增加灯光到一定亮度,但不是最亮,这时用遥控器按一下调暗的按钮,再用触摸按键控制灯光就会跟着变暗,反过来操作也是一样。
2.3 系统总体设计
通过对LED应用电路进行分析能够发现,它主要包括三部分,首先是TTP223;其次是红外;最后是MCU。其中的MCU芯片,能够操作TTP223芯片寄存器,同时还能够处理红外接收信号。
能够发现,此系统中需要通过寄存器来操作TTP223芯片,比如进行标志位的设置以及得到识别结果等。
它的寄存器有许多类型,比如语音识别控制寄存器以及各类辅助寄存器等。它有两类读写操作方式,一个是串行方式;一个是并行方式。通过对LD3320寄存器进行分析能够发现,它拥有00H→FFH编号的八位地址空间。
此次设计以STM32F103C8T6为主控MCU。演示的软件程序全部烧录在MCU的内置Flash中。主控MCU直接控制红外和TTP223完成所有的开关以及亮度调整的工作。

第三章 系统电路设计

3.1 主控系统硬件设计
多功能智能台灯有两种供电方式,直接供电和USB供直接供电 即为把所设计的电源模块可分两级,第一级电源模块为一个双路输出的隔离型反激式ACDC开关电源模块,可将输人的220 V市电经AC/DC转换,同时输出12V及5V直流电压,该模块具有高效的沈波功能,可保证输出电能的质量,第二级电源模块为一款基于LM2596S芯片的调压模块,可将5V电平转为3.3V输出。
3.2 最小系统
STM32F103ZET6最小系统主要由电源电路、系统时钟、复位电路和启动模式选择电路组成。
(1)电源电路
在设计系统中,电源设计属于重中之重的工作。要想令系统运行足够稳定,就必须确保设计的电源电路足够稳定和优质。通过对STM32进行分析能够发现,它拥有四个引脚,其中两个为电源地,这两个一个是VSSA;一个是VSS,而另外两个,一个是GPIO等的供电者,它就是VDD;一个是比较器以及复位模块等的供电者,它就是VDDA,两者电压范围都不低于2V,不超过3.6V。如果STM32并无VDD引脚,那么它就需要使用到一个备份域来负责供电工作,它就是VBAT。若是两类引脚拥有的电源一样,这两类引脚一是VDDA引脚;二是VDD引脚,那么便可以利用外部滤波电路来令这两个引脚相连,从而保证两类电源足够稳定,这两类电源一个是参考电源;一个是模拟电源。如果上述两类引脚使用的电源不同,那么就就必须令VDD引脚电源不超过VDDA引脚电源。到了上电环节,上电顺序为VDDA→VDD。如果已经关闭了电源,那么在短时间内,VDD可以比VDDA高,然而两者差距也不能够超过0.4V。
(2)系统时钟
通过对STM32进行分析能够发现,它的时钟源数量有四个,首先是两个内部时钟,高速低速各一个,这两个时钟能够进行快速启动;其次是两个外部时钟,高速低速各一个,这两个时钟不但十分稳定,而且准确度也很高。一般情况下,当进行芯片加电操作时,使用的时钟为内部时钟中的高速时钟,当完成对芯片的上电操作之后,就可以利用软件配置来对外部时钟进行利用。
(3)复位电路
通过对STM32进行分析能够发现,它的复位模式主要有三类,首先是系统复位,它能够对除了两类寄存器的全部寄存器进行复位操作,这两类寄存器一个是时钟控制寄存器;一个是备用区寄存器。当NRST引脚电平为低电平,窗口看门狗不再进行计数,低功耗管理以及软件就会复位,此时便是系统复位。其次是备用区域复位,当存在两类情况时,就会出现这一复位模式,这两类情况首先是VBAT引脚与VDD引脚都掉电时其中一个上电;其次是软件复位。最后是开机复位。若是存在两类情况,那么便会出现上电复位,这两类情况首先是从待机模式返回;其次是上电/掉电复位。一般情况下,当系统复位实现时,NRST引脚的电平就会变成低电平。
(4)启动电路设计
通过对STM32进行分析能够发现,它的启动模式主要由两个PIN引脚来进行选择,它们一个是BOOT0引脚;一个是BOOT1引脚,如果前者的值为零,后者的值为X,那么芯片就会从内部Flash进行启动;如果前者的值为一,后者的值为零,那么系统就会从内存进行启动;如果两者的值都为一,那么系统从SRAM启动。
3.3 LED设计
LED灯光调节功能由自开功能、白动调级和色光调级3部分组成,调光可降低等节点的发热量,提高等节点的寿命和可靠性中。
本设计使用RE200B配以外围电路由单片机AD采集完成对人体的感应。由于RE200B输出信号波动很小,应用时放大电路是必不可少的,可专用芯片BISS0010的前两级放大电路,使用运放LM324N进行搭建,电路图如图2所示。
图2 LM324N放大电路
作为热释电红外传感器,RE200B只对一种红外辐射敏感,那就是波长在十微米的红外辐射。若是它进入到探测区域内的时候,人体红外辐射便能利用部分镜面聚焦,从而被接收到热释电元中,因为热释电元有两片,它们接收的热量并不一样,所以热释电也不一样,此时便能够将检测信号进行输出。
灯光照控制方案采用PWM数字调光,也就是对PWM占空比进行调整,从而达到两个目的,一个是通过色光调节达到个性化需求,色光调节是利用RGB三色LED所发出的3种基色进行混合,得到七色光彩。一个是通过自动调级达到节能的目的,所谓自动调级,指的是根据环境光强情况来对台灯亮度进行调节。
灯条采用RGB三色5050贴片LED,每颗芯片大小为5 mm×5 mm,具有亮度高,损耗相对较少的特点。相较于220 V灯条,12 V灯条更加安全且可控性较好,不需要高低压隔离电路。

在这里插入图片描述

5 cm长度灯条等效电路如图3所示。灯条采用小功率NPN三极管D882,集电极最大电流2 A,放大倍数约260。功率放大电路如图4所示。
在这里插入图片描述

图3 5cm长度灯条等效电路
在这里插入图片描述

图4 功率放大电路
光敏电阻与47 kΩ电阻申联,由AD采集中点值,输人单片机确定环境亮度。
跟踪功能是采用5 V小功率舵机提供转动力矩,并且复用了自开功能中使用红外模块,使台灯照射方向可跟随人的移动而改变,其功能可防止人因偏离台灯照射区域而使眼睛长时间处于弱光照射。
显示功能利用的是ARM口仿SPI时序使之与OLED通信。在该显示屏上可实时显示由数字式温度传感器DS18B20采集到的室温;显示由STM32最小系统板自带的内量RTC时钟
3.4 红外遥控系统
通过对红外遥控系统进行分析能够发现,它主要由三部分构成,首先是接收部分;其次是发射部分;最后是调制部分,具体情况见图5.

3.4.1 调制
通过调制手段,红外遥控完成对数据的发射操作,也就是将数据和特定载波来进行操作,从而令电源功耗得以下降,令发射效率得以提升。
此处的载波频率通常不低于三十千赫,不高于六十千赫,一般选择的是方波,其频率为三十八千赫,占空比为三分之一。具体情况见图2.它的决定者是四百五十五千赫的晶振。在发射端,晶振会被进行整数分频操作,其分频系数为十二,此时则有。

第四章 系统软件平台设计与测试

4.1 KEIL操作平台
本设计的代码实现平台基于Keil MDK V5进行开发,它出现于2013年,推出者为Keil企业,对于ARM微控制器而言,它是集成开发工具的首选。
以ARM7等为基础,MDK-ARM软件为处理器设备进行了良好开发环境的提供,它是设计初衷是应用于微控制器中,此软件不但拥有丰富功能,而且使用起来也不复杂,因此在多种嵌入式应用中都十分适用,其具体特征有:
第一,其TCP/IP网络套件能够进行诸多应用以及协议的提供。
第二,存在诸多项目例程,可以让你对此软件内置特征有充分了解。
第三,能够对仿真和开发环境、调试器进行集成。
第四,USB 主机栈和设备为标准驱动类设备。
第五,拥有ARM C/C++编译工具链。
第六,拥有小封装实时操作系统。
第七,能够提供GUI库支持给嵌入式系统。
第八,拥有和程序运行有关的完整代码覆盖率信息。
第九,能够对Cortex-M等器件提供支持。
第十,存在ULINKpro,能够对应用程序进行实时分析,能够对Cortex-M指令执行情况进行记录。
第十一,通过两类工具来优化程序,这两类设备一是性能分析器;二是执行分析工具。
第十二,和CMSIS 标准相符。
通过对MDK5进行分析能够发现,它主要包括两部分,一个是Software Packs,它能够对中间库升级以及新芯片提供支持;一个是MDK Core。它主要包括4部分,首先是编辑器;其次是编译器;然后是包安装器;最后是调试跟踪器。其中包安装器主要包括三部分,首先是中间库;其次是CMSIS;最后是芯片支持。经由包安装器,能够完成最新组件安装工作,从而对最新例程、设备以及器件等进行支持,令产品开发速度得以加快。
4.2 红外遥控解码程序
4.2.1 遥控发射器及其编码
通过编码格式来对遥控发射器专用芯片机械能分类,可以分为两类。本文以uPD6121G组成发射电路作为案例来对其中更容易解码的一类的编码原理进行说明。当按下发射器按键之后,就会发射出遥控码,遥控码特点为:
存在脉宽调制的串行码,其中二进制1指的是周期、脉宽以及间隔分别为、、毫秒。二进制0指的是周期、脉宽以及间隔分别为、、毫秒。
能够发现,UPD6121G的遥控码属于三十二位二进制码组,在这三十二位中,前十六位属于用户识别码,后十六位属于操作码和反码。它的编码组合最多有一百二十八种。
当按下遥控器按键后,便会以108毫秒为周期进行二进制码的发送,其具体持续时间会根据二进制1和0 的个数而产生区别,通常不低于45毫秒,不超过63毫秒。
当按下按键高于36毫秒时,便会激活芯片,此时将有108毫秒的编码脉冲被发射出去,此编码脉冲主要由六部分构成,首先是八位数据码;其次是八位数据码反码;然后是高八位地址码;接着是低八位地址码;另外是结果码;最后是起始码。其中前四部分都为9毫秒到18毫秒,第五部分为4.5毫秒;最后部分为9毫秒。如果按下按键高于108毫秒,那么将会将连发代码发送出去,它主要包括两部分,一个是起始码,一个是结束码,两者分别为9毫秒和2.5毫秒。
4.2.2 接收器及解码
能够发现,不需要借助外接元件,一体化红外线接收器就能做好输出和接收红外线等兼容TTL电平信号的一切工作,在红外线数据传输以及遥控中它十分适用。
它发送的依次为引导码→系统码→系统反码→按键码→按键反码→重复码→短脉冲,而接收器解码为:
//串口通信程序
//想pc串口发送数据
//pc端使用超级终端建立连接
//9600 8位数据1位停止

#include <iom16v.h>
#include <macros.h>
#include "uartO.h"
#define uint unsigned int
#define uchar unsigned char
ucharirr_b=0,s_s=0;
uchar wb=0,a=O,ds=O;
long da=O;
uchar  d1,d2,d3,d4;
ucharten_1,ten_2,ten_3,ten_4,i;
void ms(uint aa)
{
for(;aa0,;a--);
}
void write_cn(uchar*cn,uchar cn_nub)
{
unhar i;
for(i=0;i<(cn_nub);i++)
{
uart_tx(cn[i]); //发送数据i 
PORTA=i;
ms(60000);
}
}
//定时器T1初始化
voidt1_init()
{
TCCR1B=0x00;//关闭定时器
TCNT1H=0x00;//定时器初值
TCNT1L=0x00;
TCCR1A=0x00;//普通模式
TCCR1B=0x05;//1024分频
}
#pragma iterrupt_handler ext_intO_is.2//指定外部中断函数
//中断接收
void ext_jnt0_isr(void)
{
if(irr_b==0)//第-一个中断
{
ir_b=1; //状态为:开始接收
TCNT1L=0x00; //定时器清零
}
else if(irr_b==1) //第二个以后的中断
{
a=TCNT1L;//读取定时器的值
//判断是引导,还是数据
if(170<a)&&(a<235))//引导
{
wb=0; //数据计数清零
da=0; //数据清零
TCNT1L=0x00; //定时器清零
}
else if(8<a)&&(a<25)) //数据0
{
wb++;
da=(da<<1);
TCNT1L=0x00;
}
else if((25<a)&&(a<45)) //数据1
{
wb++;
da=(da<<1)+1;
TCNT1L=0x00;
}
}
if(wb==32)//数据长度够32位
{
ir_b=0;//状态为停止接收
Wb=0;//数据计数清零
s_s=1;/打开显示许可
}
}
//与计算机通信的程序
//计算机端使用超级终端,建立一个连接,9600,8位,1个停止位
void main()
{
uchar i=0,rx_temp;
init_devices(); //串行口初始化
DDRA=0xft;
PORTA=0x00;
DDRB=0xf;
DDRD=0x00;//中断输入
PORTD=0xf;//内部上拉
t1_init();//定时器t1初始化
MCUCR=0x02;//下降沿中断
GICR=0x40;//开外部中断int_0
TIMSK=0x00;
SREG=0x80;//开全局中断
s_s=1;//开机进行一次显
ms(3000);
write_cn("开始红外实验rIn",14);
while(1){
ds=TCNT1L;
if(ds>250) //定时器超时,接收复位
{
TCNT1L=0;
irr_b=0;
da=0;
Wb=0;
s_s=0;
}
if(s_s==1) //显示开关打开,开始显示
{
SREG=0x00; //关闭全局中断
//显示设备码
d1=da>>24;
write_cn(&d1,1);
d1=da>>16;
write_cn(&d1,1);
d1=da>>8;
write_ cn(&d1,1);
d1=da;
write_ cn(&d1,1);
DDRD=0x00;//中断输入
PORTD=0xf;//内部上拉
s_s=O;//关闭显示开关
SREG=0x80;//开全局中断
}
}
}

第五章 总结与展望

5.1 总结
本文简述了基于STM32的多功能智能台灯的设计过程,并通过功能测试研究了其性能。本智能台灯系统是基于STM32所设计,在设计过程中最大限度的利用单片机的资源,尽可能地减少系统代码量,提高系统的实时性,同时增强系统的模块化设计。其红外无线遥控功能的实现,使得台灯的控制方式更加灵活多变,摆脱了布局布线的束缚,多级调亮使得智能台灯更加人性化。
5.2 对未来的展望
因研究时间有限,而且个人能力局限也较大,所以此次设计还存在许多不足之处需要后期进行优化。
(1)设计中的芯片属于低端芯片,不能运行复杂的算法。
(2)代码实现较为复杂,不够简洁明了,需要提高代码的整体实用度,采用更加高级的嵌套语句,使代码看起来简单易懂。
(3)当无线技术不断改进时,网络应用市场会受到压缩,此系统能够在二次开发中对无线技术进行整合。
(4)在硬件设计过程中,由于缺乏水平和经验,我没有考虑功耗,连接和其他问题。此版本为第一个版本。硬件中有很多冗余。在随后的电路重印中,可以适当删除它,以降低电路的复杂性。
综上所述,此次设计不但划分了目标功能模块,还对其内部结构进行了设计。在实现环节,对具体实现流程进行来阐述,并给出了多协议自适应和分析在系统中的应用实现。重点介绍了视频访问控制系统中的应用和实现方法。这些对产品的连续迭代有很好的效果。将来,我们将继续深入挖掘用户需求,不断完善并继续保持产品优势。
此次设计不但令我的知识得到巩固,而且还强化了我的实践能力,而这并非我一人之功,离不开老师和同学的帮助。
首先是我的导师,在我的毕业设计中花费了许多时间来对我进行指导,给我找出问题,分析问题,引导我自己去解决问题。
其次是同学们,一直以来都对我进行支持和关心,令我度过了难望的几年时光。
最后是任课老师,是他们教会了许多知识,同时其求知态度也深深的影响了我。

### 使用 STM32F103ZET6 微控制器控制智能台灯 #### 1. 系统概述 STM32F103ZET6 是一款高性能的 ARM Cortex-M3 内核微控制器,适用于各种复杂的嵌入式应用。对于智能台灯控制系统的设计,可以集成多种传感器和执行器,如光敏电阻、温度湿度传感器以及继电器模块等[^1]。 #### 2. 硬件连接说明 为了实现对智能台灯的有效管理,硬件部分通常涉及以下几个组件之间的连接: - **电源供应**:确保给定电压范围内的稳定供电; - **LED驱动电路**:用于调节灯光亮度或颜色变化; - **环境监测设备**:比如光照强度探测器、温湿度计等; - **通信接口**(可选):支持Wi-Fi/Zigbee/蓝牙等方式远程操控; 这些外设通过GPIO口或者其他专用通讯协议接入到MCU上完成数据交互操作。 #### 3. 软件设计思路 针对上述提到的功能需求,在软件层面则需编写相应的程序逻辑来处理来自各个输入端的数据并据此调整输出行为。下面给出一段简单的 C 语言源码片段作为参考实例,展示了如何利用定时中断服务函数周期性读取ADC转换后的模拟量数值进而改变PWM占空比达到调光效果。 ```c #include "stm32f1xx_hal.h" TIM_HandleTypeDef htim3; // 定义 TIM3 句柄对象 uint16_t adcValue = 0; float dutyCycle = 0; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_TIM3_Init(void); int main(void){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_ADC1_Init(); MX_TIM3_PWM_Init(&htim3, TIM_CHANNEL_1); while (1){ /* Start ADC conversion */ HAL_ADC_Start(&hadc1); if(HAL_OK == HAL_ADC_PollForConversion(&hadc1,HAL_MAX_DELAY)){ adcValue = HAL_ADC_GetValue(&hadc1); // 将ADC值映射成合适的PWM百分比 dutyCycle = ((float)adcValue / 4095)*100 ; __HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,dutyCycle*65535/100); } } } ``` 此段代码实现了基本的 PWM 输出功能,并且可以根据实际应用场景进一步扩展其他特性,例如加入按键切换模式或是联网接收指令等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值