微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > TPYBoard:能跑python的stm32单片机开发板控制舵机实例演示(代码+视频)

TPYBoard:能跑python的stm32单片机开发板控制舵机实例演示(代码+视频)

时间:10-02 整理:3721RD 点击:

     关于micropython?
      MicroPython是运行在微控制器上的Python,遵守MIT协议。剑桥大学数学科学中心的Damien P. George在研究各种深奥数学、物理问题之余,还搞了一个MicroPython项目,将Python移植到ARM Cortex M微处理器上,并开发了电路板。2013年曾经在KickStarter上成功筹得近10万英镑。2014年成功完成项目,发货。



     关于TPVBoard/stm32单片机开发板?
TPYBoard是一款能跑micropython的stm32单片机开发板,现有TPYBoardV101、v102两个版本,其中v102为v101的升级版,新增swd接口。采用python开发语言,提供了30个GPIO,轻松使用python开发物联网产品。支持Python3.0及以上版本的直接运行,支持重力加速度传感器,支持上百周边外设配件,下图是从某宝上搜索的图片结果,仅供参考!



TPVBoard/stm32单片机开发板控制舵机实例演示:


先看下最终视频演示效果吧



1.舵机基本介绍:

    1.1舵机的组成与参数

     先抄一段说明:舵机,又称伺服马达,是一种具有闭环控制系统的机电结构。舵机主要是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。其工作原理是由控制器发出PWM(脉冲宽度调制)信号给舵机,经电路板上的IC处理后计算出转动方向,再驱动无核心马达转动,透过减速齿轮将动力传至摆臂,同时由位置检测器(电位器)返回位置信号,判断是否已经到达设定位置,一般舵机只能旋转180度。有的可以转到185度。



舵机结构图

      1.2舵机的接线

      舵机有3根线,棕色为地,红色为电源正,橙色为信号线,但不同牌子的舵机,线的颜色可能不同。

     1.3舵机的控制原理

      舵机的转动的角度是通过调节PWM(脉冲宽度调制)信号的占空比(1. 占空比是指高电平在一个周期之内所占的时间比率。2. 正脉冲的持续时间与脉冲总周期的比值。例如:正脉冲宽度1μs,信号周期10μs的脉冲序列占空比为0.1。即:脉冲的宽度除以脉冲的周期称为占空比。)来实现的,标准PWM(脉冲宽度调制)信号的周期固定为20ms(50Hz),理论上脉宽分布应在1ms到2ms之间,但是,事实上脉宽可由0.5ms到2.5ms之间,脉宽和舵机的转角0°~180°相对应。

     2.Python语言控制舵机的方法

     其实说了以上这些呢,都是为了给大家介绍利用Python语言来控制舵机的转动角度,和普通单片机一样的,都是需要用不同宽度的脉冲来控制器转动的角度。说白了,我们需要做的就是使用Python语言来输出不同宽度的脉冲信号,来给到信号线里面去。现在一般的舵机脉宽呢都是在0.5ms到2.5ms之间,这就可以计算了,0.5MS-2.5MS这两毫秒里面呢可以控制转动到180度,这样算下来,转一度的脉冲时间大约就是2毫秒/180度=0.011毫秒/度,这样依次计算就可以了。剩下的就是写一个脉冲信号了,相信写脉冲信号的程序大家都很熟悉啦。


     但是,在舵机里面有一些几点几的毫秒的延时脉冲,这个在Python语言里如果想要利用delay()函数来做延时的话,很难做到每个角度都可以转到,甚至说是很难做到转动到大多数的角度。所以,你需要找到一个比毫秒延时还要精确的延时函数来作为脉冲的计时延时函数。我现在用的是time.sleep(i)这个函数,这个函数里面的i,建议设置在0.0000-0.0035之间。不能说精确的转动到每个角度吧,但是百分之九十的角度都是可以转到。如果想让舵机进行循环摆动,一定要记得加上适当的延时,因为程序可以飞快的跑,但是舵机转动也是需要一点时间的。舵机转动时间肯定要比程序跑一遍的时间要长的多啦。

    3、TPYBoard v102控制舵机实验


网站截图(大家可自行参考)

3.1    实验目的

    通过加速度传感器的X方向控制舵机的转动,让舵机随TPYBoard的转动而转动

3.2实验材料

    1、TPYBoard v102 开发板 1 块

          2、sg90舵机 1个

          3、杜邦线 若干

     3.3实验线路图


     这里电路图很简单,只需要给舵机接上VCC和GNG(这是最基本的,这个开发板上好多电源和地可以用)。然后把舵机的信号线接到任意一个GPIO口(后面程序里面要在这个GPIO往外输出脉冲的,我用了X1,还有很多其他的GPIO口可以用。)就可以了。先上一张原理图,只是一张模拟的结构图哈。



是不是很抽象?下面上一张图,大家可以秒懂啦。


    3.4实验代码

    注意:实验中用0做了x的分界点,有的开发板,x的范围可能在11-31不等,所以这个分界点,可以在实验中自己取值。

  1. import pyb
  2. import time
  3. from pyb import Pin
  4. xlights = (pyb.LED(2), pyb.LED(3))
  5. ylights = (pyb.LED(1), pyb.LED(4))
  6. M0 = Pin('X1', Pin.OUT_PP)

  7. accel = pyb.Accel()

  8. i=0.0001
  9. j=0.0000
  10. while True:
  11.     x = accel.x()
  12.     print("x=")
  13.     print(x)
  14.     Y=x+20
  15.     M0.high()
  16.     time.sleep(i*Y)
  17.     M0.low()
  18.     time.sleep(i*Y)
  19.     pyb.delay(12)
  20.     if x > 0:
  21.         xlights[0].on()
  22.         xlights[1].off()
  23.     elif x < 0:
  24.         xlights[1].on()
  25.         xlights[0].off()
  26.     else:
  27.         xlights[0].off()
  28.         xlights[1].off()

复制代码

虽然舵机只是能实现转动指定的角度,看起来功能很单一,但是单一的功能结合起来,就能完成很复杂的任务。


各种改变都是由老外推动的。

搜了下 写法是简单,但是价格偏贵,有个micropython开发板运行于ESP8266无线模块嵌入式设备上的python  价格便宜带网络还是不错的,价格低一点 就好了,大量就选用python来开发了。

TPYBoardv102这款价格还是很亲民的 功能也很强大。我搜了下淘宝上的价格108包邮 你可以参考下

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top