第九章 SG90伺服舵机模块的使用

上一章介绍了气体检测传感器,可以检测室内的有害气体浓度,当室内有害气体浓度超标或者温度过高时,我们一般都会开窗通风,那就需要一个执行模块来执行开窗或者关窗的动作。所以这章介绍一款舵机模块,来模拟开窗或者关窗操作。

下图就是SG90舵机模块图片,图中方框的部位时舵机的摆臂,这个摆臂可以用来模拟窗的打开和关闭,下面会有视频展示。

 该模块是利用定时器输出周期为20ms的PWM信号来驱动摆臂摆动,而摆臂摆动的角度与一个周期(20ms)内的高电平持续时间有关,具体如下图所示,左边的时间是一个周期(20ms)内高电平的时间,右边是所对应的是转动角度。

下面这图是通过逻辑分析仪抓出来的PWM波形,图中1到3的时间约为20ms,即周期为20ms,1到2的时间是这个周期内高电平的持续时间,1到2的时长决定了舵机模块的摆臂转动几度。提示:如果不了解定时器PWM相关知识,可以去哔哩哔哩搜索  野火STM32 去学习定时器相关内容。

舵机模块到手后,就可以开整了,首先模块上引出了3根线,分别是连接5V的VCC引脚,接地的GND引脚和接收PWM信号的信号线。关注了公众号的同学可以发送“第九章”获取资料链接没有关注的同学,评论区留下邮箱,按照资料里提供的接线图,用杜邦线将SG90舵机模块与STM32F103C8T6连接起来,然后将提供的代码编译并烧录进STM32F103C8T6单片机即可看到效果。

接下来讲一下代码。

第7行 uint8_t Angle 声明变量Angle用来存储舵机要转动的角度。

第9行 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2) 设置中断优先级分组。

第11行 delay_init( ) 初始化延时函数,执行这条语句后,延时效果才会准确。

第13行 Servo_Init() 函数内有两个函数(下图所示):TIM2_Init(SERVO_TIM_ARR,SERVO_TIM_PSC) 初始化定时2的2通道输出周期为20ms的PWN信号;Servo_angle(5) 是设置舵机模块转动5°,我们后面都是用Servo_angle( )函数来设置舵机的转动,而转动的角度由括号里的参数值决定,参数值可写0~180(提醒:Servo_angle( )函数内部做了保护措施——当参数值小于5时,舵机转动角度不会小于5°,参数值大于175°时,舵机转动角度不会大于175°)。

 第15~28行 实现舵机从5°开始转动到175°,然后从175°转动到5°。实现舵机转动的函数就是第19行和第24行的Servo_angle( )函数,想要转动的角度写在括号里即可,就这么简单。

例程实现效果如下:


 正好第八章我们实现OLED显示环境的温湿度、二氧化碳和甲醛的浓度,现在顺便将SG90舵机模块的功能移植到第八章的代码中,实现当 CO2浓度大于500ppm时打开窗户,CO2浓度小于420ppm时关闭窗户,下面的视频是演示移植的过程。

提示:视频中有错,CO2浓度是ppm而不是ppd

效果如下所示:

(温湿度模块坏了,所以温湿度数值显示为0,代码是没问题的,视频中实物制作很简陋,只是起演示作用,自行制作实物时,可以做的完美一点)

猜你喜欢

转载自blog.csdn.net/qq_44645742/article/details/126709257
今日推荐