基于RoboMasterC板的RT-Thread使用分享—PWM扩展实验_电磁式蜂鸣器驱动电路_kaiyuntiyu-kaiyun体育官方网站-kaiyun体育官方网页

基于RoboMasterC板的RT-Thread使用分享—PWM扩展实验


时间: 2024-06-16 09:14:44 |   作者: 电磁式蜂鸣器驱动电路

这次因为没有新增功能所以新建功能部分我就先略过了,你们可以参考一下上篇文章,其中我修改Kconf...。

  这次因为没有新增功能所以新建功能部分我就先略过了,你们可以参考一下上篇文章,其中我修改Kconfig,开启PWM5 CH1/2/3的部分已经提交PR了,各位之后导入工程时可以先看一下

  aRGB 为一种色彩模式,aRGB 分别代表了 alpha(透明度)、Red(红色)、Green(绿色)和Blue(蓝色)四个要素,一般我们给每个要素设置十进制下 0-255 的取值范围,通过 16 进制表示就是 0x00-0xFF,因此一个 aRGB 值能够最终靠八位十六进制数来描述,从前到后每两位依次对应 a,R,G,B。

  在 aRGB 中,alpha 值越大色彩越不透明,RGB 中哪个值越大,对应的色彩就越强。比如纯红色可以用 8 位 16 进制表示为 0xFFFF0000,纯绿色可以表示为 0xFF00FF00,纯蓝色可以表示为 0xFF0000FF,黄色由蓝色和绿色合成,所以能表示为 0xFF00FFFF。

  根据上面的描述我们就可以创建一个rt_uint32_t类型变量作为我们的aRGB值。之后每八位分别作为我们的alpha(透明度)、Red(红色)、Green(绿色)和Blue(蓝色)四个要素。

  我这里为了代码变量的清晰,我定义了一个aRGB结构体,用于装载计算后的aRGB值。你们可以自行尝试一下。这里三原色的类型为rt_uint16_t的原因之后我们计算过程中需要给它们乘以alpha因此使用rt_uint8_t会溢出。

  下面就是计算函数,这里我们应该把传进来的rt_uint32_t整型进行位运算,将每八位的值移入给我们的结构体成员内。然后用透明度alpha与R、G、B三者依次相乘。后面我们就可以将R、G、B各值作为脉冲宽度。这里R、G、B三个值计算出来范围是0-65536,我们所以我们后面将PWM周期设置为65536。

  下面就放出完整代码,这里我是自定义了一个MSH命令,输入aRGB_led_sample 0xFF00FF00之类的命令即可设置aRGB值。

  用于MSH命令输入的参数都是字符串,所以这里我使用了stroul()函数,这个函数能将字符串转化为无符号长整型。

  实验效果如下我们在MSH控制台输入0xFF00FF00,就会亮绿灯。如果输入0x88888888,就会显示如下颜色。

  蜂鸣器部分主要参考了RT-Thread文档中心的蜂鸣器播放器,大家有需要的话可以直接去看官方教程,我这里因为篇幅原因会有缩减。

  蜂鸣器是一种可以通过控制的发声器件。在生活中,几乎所有能够发出哔哔响声的电子器件中都装有蜂鸣器。蜂鸣器能够为使用者提供直观的声音信息,是一种常见的人机交互模式。

  根据是否内置震荡电路可分为有源蜂鸣器和无源蜂鸣器。有源蜂鸣器只需要出示直流电压就能够最终靠内部的震荡电路产生震荡电流进而发出声音,而无源蜂鸣器要输入特定频率的方波才能发出声音。两者比较起来,有源蜂鸣器的控制更简单,但是只能发出单一频率的声音,而无源蜂鸣器虽然控制起来挺麻烦,但是能通过改变输入方波的频率发出不同音调的声音,还可以用来演奏乐曲。

  本次我们应该的外设蜂鸣器,查看原理图后发现我们应该的PWM4 CH3已经开好了,我们直接去RT-Thread Setting中开启即可

  之后我们后面音符频率对周期进行设置,下面程序就实现了播放音符CDEFGAB的功能。

  后面关于音乐数据编码解码方面的知识,我自己也是完全是跟着教程的复刻,所以这里就不进行教程的搬运了,大家自行跟着官方教程吧。