有办理之道? 呵呵,本文这个可通过USB来掌握三基色RGB灯可完美地完成这个小CASE。
2、作品亮点
传统的USB LED小台灯方案,都是一个大略的方案,即把多个白色LED灯和电阻串并起来,然后直接接到USB的VBUS(+5V)电源端上,然后这样的方案,只能发出单色的光。
比较之下,本方案具有以下创新和特点:

①发光单元采取RGB三基色LED灯,通过任意搭配理论上可发出255x255x255=16581375种颜色的灯光!
②Windows真个人机界面程序,可以及其方便地掌握RGB灯的发光颜色。
③调度好的LED灯发光颜色,断电后可保存在单片机的EEPROM里,上电后颜色可规复。
④采取支持USB HID协议的CH9326芯片,可无需再麻烦安装驱动程序(即免驱动),而且采取 HID协议还可广泛运用于多种操作系统,如window 7, XP, Linux等等.
⑤板载电子芯片式保险丝BD2243G,具有uS级别的过流保护功能,比较可规复保险丝那种数秒反应的传统方案,BD2243G具有数千倍更快的过流保护动作,而且通过外置的电阻R,可任意设置过流保护的大小。
设置好了颜色的USB LED灯,还可以这样用,直插充电宝~
3、系统构架图4、事理图事理图分为多个部分,下面逐一先容:
第一部分: 系统供电和VBUS过流保护部分:
备表明释: 上图中,采取ROHM罗姆公司的DB2243G芯片,通过调节R2电阻,可以设置电流受限的大小,当电流超过改值时,Pin6 脚输出为零伏,即负载断开,同时D2这个赤色的发光LED指示灯会亮起,表示过流啦!
正常输出情形下,D2是熄灭的。有了这个电路,纵然负载直接对地短接,都不会破坏PC机的USB端口!
而且保护动作极快!
不是传统可规复保险丝那种大略的被动器件可比拟的。过流状态肃清后,Pin6 脚急速规复正常输出状态,即输出即是5V。
第二部分:系统供电部分
备表明释: 上图中,SOT-23封装的LDO芯片PT5110的浸染是把5V降压到+3.3V。如果系统(负载端)须要VCC=5V,那PT5110该当不焊接,同时在F2焊接一个零欧姆的电阻或者焊接一个可规复保险丝即可。须要指出的是,系统中的芯片(单片机和CH9326)都是可以在5V或3.3V下事情的。差异只是IO输出的电等分歧而已。
第三部分:USB通信部分
备表明释: 上图中,USB通信部分由CH9326独立完成,它可完成USB列举、配置和收发通信任务,大大减轻和解决了单片机的USB 通信难题。CH9326可以理解成一个透明的通信装置,任何大略单纯的单片机都可以不用考虑USB是如何实现的,只卖力串口收发数据即可USB双向通信功能。在本系统总,CH9326的紧张用场是将PC端发过来的RGB灯的掌握数据输出到串口TxD中,同时也可以将RxD端口吸收到的单片机数据回传到PC中。
须要指出的是: 如果想让CH9326事情于5V,那R14电阻须要空着。而想让CH9326事情于3.3V,那R14电阻须要焊接上0欧姆;此外,D5 LED指示灯在USB连接到PC后,如果能通信正常,那D5会亮起,反之不亮。而单片机可以通过USB-LINK-OK这根线理解到USB通信连接的状态。如果通信不正常,单片机可以通过/RESET旗子暗记对CH9326进行复位。
第四部分:单片机驱动和掌握RGB灯部分
备表明释: 上图中,LED灯的主控由8位单片机 stm8s003或stm8s103完成,单片机通过三路PWM的办法分别掌握RGB灯的发光颜色。P1是单片机的烧录和仿真下载端口,利用者可以用ST-LINK/V2 这个才几十元的单片机开拓工具!
以下是这个电子制作的BOM列表,器件全部采购来自主创商城,PCB板的制造和SMT贴片在深圳嘉立创完成。
6、PCB实物图
7、软件部分的描述软件分为两部分,一部分是单片机真个实现,其余一部分是PC电脑端(上位机)的掌握程序。个中,单片机上电后首先初始化干系IO、按键扫描、串口波特率和串口中断。其关键部分的代码如下:
三路PWM输出掌握的初始化片段:
主程序Main的重复实行部分:
while (1)
{
if(tFlag) //------- 通过状态机的办法,每隔 8ms 实行一次按键处理的个中一个步骤
{
IWDG_ReloadCounter(); //Reload IWDG counter
KeyScan();
tFlag = 0;
}
if(MyKey[0].KeyPress) //------- 如果创造按键有效被按下,重复关灯或开灯(颜色不变)
{
if(sMode==0)
{
TIM2_SetCompare2(0x00);
TIM2_SetCompare1(0x00);
TIM2_SetCompare3(0x00);
}
else
{
TIM2_SetCompare2(RxBuffer[0]);
TIM2_SetCompare1(RxBuffer[1]);
TIM2_SetCompare3(RxBuffer[2]);
}
sMode = ~sMode;
MyKey[0].KeyPress = 0; //-- 完成按键按下的任务,打消按键处理标记。
}
if(RxFlag) //---- 通过串口中断的办法,吸收串口数据。收到后RxFlag=1
{
//--- 收到PC端(CH9326)下传过来的RGB数据,然后输出改变RGB-LED灯的
PWM驱动旗子暗记,同时保存PWM值到单片机的EEPROM区。
sMode = 0x00;
TIM2_SetCompare2(RxBuffer[0]);
TIM2_SetCompare1(RxBuffer[1]);
TIM2_SetCompare3(RxBuffer[2]);
SaveValue(); //---- 保存PWM驱动旗子暗记,上当后将可规复LED颜色。
UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE); //--- 再次许可串口吸收
RxFlag = 0; //---- 串口吸收处理完毕,清楚吸收标记。
}
} //--- End of While(1)
//------------- 以下是串口中断的处理部分:通过状态机的办法,吸收RGB灯的掌握数据
INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{
//=================== Receiver Processing
gTemp = UART1->SR; //--- Creal OverRUN if possible.
gTemp = UART1->DR; //--- UART1_ReceiveData8();
switch(gState)
{
case 0x00:
if(gTemp==0x1B)gState = 0x01;
else gState = 0x00;
break;
case 0x01:
if(gTemp==0xF5)
{
gState = 0x02;
gRxIndex = 0x00;
}
else gState = 0x00;
break;
case 0x02:
RxBuffer[gRxIndex++]= gTemp; //----- Following xxx Bytes...
if(gRxIndex>=3) //--- Receive Finish,OK
{
UART1_ITConfig(UART1_IT_RXNE_OR, DISABLE);
gState = 0x00;
RxFlag = 0xFF;
}
break;
default:
gState = 0x00;
break;
} //------- End of Swith(gState)
}
PC电脑端(上位机)的掌握程序,其界面如下:
备表明释: 因版面有限,单片机端和PC电脑真个掌握程序(VC++ 编写)的全部源码
请自行在立创商城或社区里进行下载。同时郑重声明:未经本作者容许,其它人不能将以上设计和源码直策应用到商业产品中。
8、作品演示因出版刊物限定,视频演示的视频,请读者自行在立创商城或社区里进行不雅观摩辅导。
9、总结USB已经成为无数嵌入式运用的首选接口,然而从开拓职员的角度来看,USB是须要相称多的固件专业知识和开拓事情量的繁芜协议,通过内置支持USB HID协议的芯片---CH9326此电子制作得于快速、顺利完成。其余,此作品参加了立创商城2017年首发的\公众成功设计一款PCB方案验证板褒奖1000元!
\"大众活动,本作品有幸得到了立创商城的资金资助,在此表示感谢!
并唯一授权立创商城对本作品进行宣扬和开源!
「关于」立创商城是中国在线订单成交量最大的一站式电子元器件采购自营商城,自建6000多平米当代化元器件仓库,现货库存超40000种。本文由立创商城原创,转载请注明出处。