论坛» 嵌入式开发» STM32

MicroPython实战之TurnipBit开发板旋转按钮控制脱机摆动

助工
2018-06-29 16:02 1楼

一、实验目的:


?学习在PC机系统中扩展简单I/O 接口的方法

?学习TurnipBit拼插编程

?了解舵机工作原理

?学习TurnipBit扩展板舵机和旋转按钮接线方式


二、所需原器件:


?TurnipBit一块

?TurnioBit扩展板一块

?杜邦线若干

?usb数据线一条

?舵机一个

?旋转按钮一个


三、实验原理:


1. 舵机的组成与参数

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


1.png

舵机的接线

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


舵机的控制原理

舵机的转动的角度是通过调节PWM(脉冲宽度调制)信号的占空比来实现的。


占空比:

1.指高电平在一个周期之内所占的时间比率。

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


四、接线方法:


TurnipBit扩展板与发光二极管接口对应如下表:

2.png


五、源代码:

from microbit import * #----------- #github:https://github.com/microbit-playground/microbit-servo-class #------------ class Servo: def __init__(self, pin, freq=50, min_us=600, max_us=2400, angle=180): self.min_us = min_us self.max_us = max_us self.us = 0 self.freq = freq self.angle = angle self.analog_period = 0 self.pin = pin analog_period = round((1/self.freq) * 1000) # hertz to miliseconds self.pin.set_analog_period(analog_period) def write_us(self, us): us = min(self.max_us, max(self.min_us, us)) duty = round(us * 1024 * self.freq // 1000000) self.pin.write_analog(duty) self.pin.write_digital(0) # turn the pin off def write_angle(self, degrees=None): degrees = degrees % 360 total_range = self.max_us - self.min_us us = self.min_us + total_range * degrees // self.angle self.write_us(us) sv1 = Servo(pin1) temp=0 while True: #读取旋转按钮传入的值,范围2~1023 read_val=pin0.read_analog() #舵机旋转180度,将1023分割成180份,约等于5.67 angle=round(read_val/5.67) if (temp!=angle): temp=angle sv1.write_angle(angle) sleep(60)


高工
2018-07-02 09:00 2楼

谢谢楼主分享

菜鸟
2019-04-18 17:55 3楼

不错

共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]