1 - 香橙派硬件PWM控制sg90舵机

pwm,sg90 · 浏览次数 : 0

小编点评

**随笔标题:深入探索香橙派GPIO引脚** **引言** 我是机械电子专业的大一学生,在二手平台花费300大洋入手了香橙派zero3和3B,并安装了ubuntu操作系统进行实验。虽然看到了板子上的40pin引脚,但当时并未立即探索其硬件扩展功能。几天后,好奇心驱使我深入了解这些引脚的用途,我开始研究香橙派的GPIO编程。 **GPIO编程** 硬件PWM是一种利用芯片控制电路输出高低电平的技术。在香橙派上使用wiringPi来输出PWM波需要设置引脚为PWM输出,并通过pwmSetClock()和pwmSetRange()函数控制波形的频率和占空比。 **舵机控制** sg90舵机是一种常见的执行机构,它可以驱动四条独立的电机,使其旋转。为了让舵机旋转到45度处,我们可以设置其转速为50Hz。 **代码示例** ```c #include "wiringPi.h" #include #define PWM_pin 21 int main() { int div = 8; int arr = 60000; int ccr = 3000; if (wiringPiSetup() == -1) { printf("初始化失败惹>︿<\"); } pinMode(PWM_pin, PWM_OUTPUT); while (1) { pwmSetClock(PWM_pin, div); pwmSetRange(PWM_pin, arr); pwmWrite(PWM_pin, ccr); // 占空比duty = ccr / arr = 5.0% 对应45度位置 } return 0; } ``` **结论** 通过代码示例,我们可以看到如何在 wiringPi 中驱动sg90舵机并控制其转速。 GPIO引脚可以用于多种硬件扩展功能,通过编程可以实现各种控制效果。

正文

本人机械电子专业的大一学生一枚,这是我在博客园的第一篇随笔

  2024年4月份我在二手平台花费300大洋入手了香橙派zero3和3B,买回来后一开始是装上ubuntu跑QQ机器人和minecraft服务器的,所以虽然看到了板子上的40pin引脚,但当时并未立即探索其硬件扩展功能。几天后,好奇心驱使我深入了解这些引脚的用途,我开始研究香橙派的GPIO编程。故发表随笔来记录我的折腾之旅。

  180度舵机作为一种常见的执行机构,广泛应用于机器人关节控制、摄像头云台调整等场景。要驱动舵机,关键在于理解PWM(脉冲宽度调制)信号的生成与控制。不过在香橙派上使用wiringPi来输出PWM不需要像stm32一样去配置各种寄存器,还算是方便一些。

  我们需要以下函数来输出硬件PWM波(以香橙派3B为例)

1 pinMode(int pin, int Mode); // 设置引脚为pwm输出,参数Mode为PWM_OUTPUT
2 pwmSetClock(int pin,int divisor); // 参数divisor为div
3 pwmSetRange(int pin,unsigned int range); // 参数range为arr
4 pwmWrite(int pin, int value); // 参数value为ccr

   硬件PWM的频率是可调的,有适用于香橙派的计算公式

频率 = 24000000 / (arr * div);
占空比 = ccr / arr;

  下面写一个控制sg90舵机旋转到45度处的代码

1 #include "wiringPi.h"
2 #include <stdio.h>
3 #define PWM_pin 21 
4 //香橙派3B的硬件PWM输出引脚为wpi编号下的2和21号引脚,这里使用21号引脚
5 int main()
6 {
7     int div = 8;
8     int arr = 60000;
9     int ccr = 3000;
10    //频率= 24000000 / (60000 * 8) = 50Hz   sg90舵机要50Hz才能正常驱动
11    if (wiringPiSetup() == -1) {printf("初始化失败惹>︿<");}
12    pinMode(PWM_pin, PWM_OUTPUT);
13    while (1)
14    {
15        pwmSetClock(PWM_pin, div);
16        pwmSetRange(PWM_pin, arr);
17        pwmWrite(PWM_pin, ccr);
18        //占空比duty = ccr / arr = 5.0% 对应45度位置   
19    }
20 }

  保存,命名为main.c

  我是用vscode远程连接到香橙派3B的,在控制台输入gpio readall就可以看到香橙派3B的引脚定义图。使用cd命令进入代码所在文件夹,输入


orangepi@orangepi3b:my-project/ $ gcc main.c -o test1 -lwiringPi

  然后再输入


orangepi@orangepi3b:my-project/ $ sudo ./test1

  按照提示输入密码后就可以看到舵机转到了45度处

  python的代码和c语言版本大同小异,如下

 1 import wiringpi as pi
 2 from wiringpi import GPIO
 3 
 4 PWM_PIN = 21
 5 div = 8
 6 arr = 60000
 7 ccr = 4500
 8 if pi.wiringPiSetup() == -1:
 9     print("初始化失败惹>︿<")
10 pi.pinMode(PWM_PIN,GPIO.PWM_OUTPUT)
11 while True:
12     pi.pwmSetClock(PWM_PIN, div)
13     pi.pwmSetRange(PWM_PIN, arr)
14     pi.pwmWrite(PWM_PIN, ccr) # duty = 7.5% 对应 90度

  保存为main.py 然后以管理员身份执行

   python3 main.py

   是可以看到舵机转到了90度位置处

与1 - 香橙派硬件PWM控制sg90舵机相似的内容:

1 - 香橙派硬件PWM控制sg90舵机

本人机械电子专业的大一学生一枚,这是我在博客园的第一篇随笔 2024年4月份我在二手平台花费300大洋入手了香橙派zero3和3B,买回来后一开始是装上ubuntu跑QQ机器人和minecraft服务器的,所以虽然看到了板子上的40pin引脚,但当时并未立即探索其硬件扩展功能。几天后,好奇心驱使我深

Blazor HyBrid在香橙派(Ubuntu Arm)运行的效果

# Blazor HyBrid在`香橙派(Ubuntu Arm)`运行的效果 1. 准备香橙派一块!当前教程使用的是香橙派5 4G开发板 ![](https://img2023.cnblogs.com/blog/2415052/202305/2415052-20230522233717127-102

VUEX 使用学习五 : getter

转载请注明出处: Getter对Store中的数据进行加工处理形成新的数据。他不会修改state中的原始数据,起到的是包装数据的作用; 有时我们需要从 store 中的 state 中派生出一些状态,例如对列表进行过滤并计数 如果有多个组件需要用到此属性,我们要么复制这个函数,或者抽取到一个共享函数

阿里云香港节点全面故障给我们的启示

2022年12月18日上午,阿里云发布《阿里云香港可用区C某机房设备异常》公告。“阿里云监控发现香港地域某机房设备异常,影响香港地域可用区C的云服务器ECS、云数据库PolarDB等云产品使用,阿里云工程师已在紧急处理中。” 在这个寒冷的冬天,一个炸雷给业界惊起了一个大波浪。很多人不解的是说好的高可

神经网络图像数据训练集成应用 | 可视化图像处理 | 可视化训练器

〇、写在前面 本应用基于开源UI框架PyDracula进行开发,除去最基本的UI框架外,所有功能的前后端实现都由我个人开发完成,但也有部分UI(如开关控件和进度条)是参考其他大佬的分享。 这个应用是我的本科毕业设计,但因为个人能力不足,姑且只能使用Python+PySide6开发。 开发这个应用的启

查看mongo的bson数据文件

转载请注明出处: BSON(Binary Serialized Document Format)是MongoDB中用于存储和传输数据的一种二进制形式的存储格式,它基于JSON格式,但比JSON更松散,支持更多的数据类型。MongoDB使用BSON作为其文档的存储格式,这意味着当驱动程序使用文档进行插

journalctl 命令使用总结

转载请注明出处: journalctl 命令是 Linux 系统中一个用于查询和管理系统日志的命令行工具,它基于 systemd 的日志守护进程 systemd-journald 的功能。 1. 介绍 journalctl 命令可以帮助用户查找、过滤和分析系统日志。这些日志信息包括内核消息、系统服务

zookeeper:Unexpected exception, exiting abnormally ::java.io.EOFException

转载请注明出处: 服务器中断,重启服务器在重启kafka服务时,遇到如下报错: 2024-06-05 13:52:56,251 [myid:] - ERROR [main:ZooKeeperServerMain@64] - Unexpected exception, exiting abnormal

bashrc和profile区别

转载请注明出处: 作用与目的: .bashrc:这个文件主要用于配置和自定义用户的终端环境和行为。每次启动新的终端时,.bashrc文件都会被执行,加载用户设置的环境变量、别名、函数等。这使得用户能够根据自己的喜好和需求来定制终端的行为和外观。 profile(通常指的是~/.profile或/et

软考高项八大绩效域及论文纲要

转载请注明出处: 不确定性绩效域 软考高项(高级信息系统项目管理师)中,不确定性的绩效域要点包括风险、模糊性、复杂性和不确定性本身。以下是对这些绩效要点特征的说明,以及项目经理在应对这些要点时的常用实践: 1. 风险 特征: 风险是指潜在的不利事件或情况,可能会对项目的目标产生负面影响。 风险具有可