源代码GIT链接:https://gitee.com/dhxiaotu/esp32-sg90.git
DIY模块地址 https://shop64022682.taobao.com/
1.打开VsCode,点击左边栏PlatformIO图标->点击”Create New Project”按钮->点击“+ New Project”按钮,新建工程。
2.在弹出的工程向导对话框中,填选相应信息。Name:工程名,Board:开发板类型,Framework:框架,Location:工程文件在PC的存放路径,可以选默认路径或者自己设置。
3.工程创建成功后,会自动生成默认源代码。在src目录下的main.cpp文件即为主程序文件。
setup()函数程序一启动便首先运行,且只运行一次,可以将系统的初始化代码放在这里面。
loop()函数是主函数,在setup()之后循环执行。
myFunction()函数是用户自定义程序,用户可以随意添加代码。
鼠标右击main.cpp->在弹出菜单中选择”Reveal in File Export”,即可打开文件所在的文件夹。
4.SG90舵机原理
SG90舵机是通过PWM信号控制旋转角度的一种伺服电机。其中,PWM(Pulse-width modulation)是脉冲宽度调制的缩写,其原理是通过调节高电平在整个脉冲周期中所占的比例来控制电机角度。具体到SG90舵机,它的PWM控制信号周期是20毫秒,高电平所占比例是0.5毫秒到2.5毫秒,高电平所占的时间长短与舵机的旋转角度成正比,高电平0.5毫秒对应舵机角度为0度,2.5毫秒对应角度180度。
电路接线如下图所示:
5.去除无关代码,编写ESP32驱动SG90的代码。
首先,设置PWM信号的输出引脚为GPIO15,设置中断定时器的超时时间设为10微秒。
2.5毫秒-0.5毫秒=2毫秒=2000微秒=200个10微秒
180度÷200=0.9度
即定时器超时时间设为10微秒时,电机的最小旋转角度为0.9度。
在定时器中断响应函数中,检测计数器是否小于高电平中断数cntHigh,
小于cntHigh则说明在高电平区间内;
大于cntHigh小于2000(20ms),则说明在低电平区间内;
大于2000,则说明新的脉冲周期开始了。
在loop()主循环中循环累加高电平时间,使高电平时间在0.5毫秒到2.5毫秒之间循环,对应的舵机角度在0度到180度之间循环。
5.点击PlatformIO:Upload按钮,编译代码,并把程序烧录到开发板上。
烧录成功后,舵机开始循环转动。