摘要:舵机是常用的执行器,haas100具有pwm功能,那么python轻应用编程驱动舵机能不能实现呢?本文就一步步带您做一遍。
硬件:haas100,SG90舵机
软件:win7 x64,串口助理
目录
1.制作pwm程序
2.测试pwm例程运行效果
3.修改程序驱动舵机
4.可以一键复制的源代码
1.制作pwm程序
首先参考官方例程,文章链接是:
https://g.alicdn.com/HaaSAI/PythonDoc/library/Driver.PWM.html
选择一键复制,然后在tf卡上用vscode新建一个python文件,命名为haas_pwm.py,将源代码粘贴到该文件。
2.测试pwm例程运行效果
将tf卡插入开发板卡槽,然后打开串口助理,设置波特率150万,复位开发板,然后执行下面的命令:
python /sdcard/haas_pwm.py
使用串口助理观察当前输出的信息,出现以下的信息之后就证明运行起来了。
因为是例程,所以无法直观去观察pwm的效果,程序中设置的引脚是pwm3,就是下图中的pwm3引脚。
3.修改程序驱动舵机
用到的是SG90舵机
外观和基本参数是
这款舵机的控制信号是20ms的脉宽调制(PWM)信号,其中脉冲宽度从0.5ms-2.5ms,相应舵盘的位置为0-180度,呈线性变化。
也就是说,给它提供一定的脉冲宽度,它的输出轴就会保持在一个相对应的角度上,无论外界转矩怎样改变,直到给它提供一个另外宽度的脉冲信号。
入下图所示:
刚才分析,SG90的周期是20ms,那么频率就应该是1/0.02=50Hz。
0.5ms的占比是0.5/20=0.025
2.5ms的占比是2.5/20=0.125
将这两个参数在python程序的相应位置做出修改。
连接舵机,供电采用5V
运行起来后,舵机没有反应,可能是运行的时间太短导致。
加入延时函数试试看
为了更加直观地观察运行效果,多做几种角度试试看
将tf卡插入卡槽,复位开发板,然后运行程序。发现舵机只是运动了一点点角度而已。
那么继续进行修改,按照0.1就是占空比10%,0.8就是80%理解,而不是根据前面分析的
0.5ms的占比是0.5/20=0.025(错的分析)
2.5ms的占比是2.5/20=0.125(错的分析)
修改为下图所示的占空比
再次运行,发现舵机已经可以有好几个位置了,动作幅度有大有小。
python /sdcard/haas_pwm.py
到此就完成了整个实验,可以驱动SG90这一常见的舵机了。
驱动舵机是利用haas100的python轻应用的关键一步,相当于一个机器人的大脑有了能动的腿脚。下一步就可以继续优化程序,包括加入AI程序,让它完成更多有趣的操作了。
4.可以一键复制的源代码
# coding=utf-8
# This is a sample Python script.
# SG90 Micro Servo
# Dive an Micro Servo for 4 different positions.
# HaaS 100 with Micropython firmware is the basic materials.
# Experimental steps:
# step1:Copy this code to your .py file(e.g haas_pwm.py).
# step2:Copy the file to the tf card.
# step3:Insert the tf card to your HaaS100.
# step4:Connect your HaaS100 to your computer with a USB cable.
# stet5:Connect your SG90 to your HaaS100,the port is pwm3.
# step6:Open your serial debugging assistant such as PuTTY,with the baud rete 1500000.
# step7:Type "python /sdcard/haas_pwm.py",and enjoy it.
# The SG90 circuit:
# - SIGNAL connect to HaaS100 PWM3(pin 9)
# - GND connect to HaaS100 GND(pin 3)
# - VCC connect to HaaS100 5V(pin 5)
# created 25 Mar 2021
# by aliyun
# The source from:
# https://g.alicdn.com/HaaSAI/PythonDoc/library/Driver.PWM.html
# modified 27 Mar 2021
# by TMS320VC5257
import utime
from driver import PWM
print("-------------------pwm test--------------------")
pwm = PWM()
pwm.open("pwm3")
duty = pwm.getDuty()
freq = pwm.getFreq()
print(duty)
print(freq)
# the period is 20ms,so the freq is 50 Hz
pwm.setConfig(50, 0.1)
# delay 2s,without this operation the servo will not drive
utime.sleep_ms(2000)
pwm.setConfig(50, 0.5)
utime.sleep_ms(2000)
pwm.setConfig(50, 0.1)
utime.sleep_ms(2000)
pwm.setConfig(50, 0.8)
utime.sleep_ms(2000)
duty = pwm.getDuty()
freq = pwm.getFreq()
print(duty)
print(freq)
pwm.close()
print("-------------------pwm end--------------------")