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等云产品使用,阿里云工程师已在紧急处理中。” 在这个寒冷的冬天,一个炸雷给业界惊起了一个大波浪。很多人不解的是说好的高可

influxdb得导出与导入

转载请注明出处: 1、备份元数据 基本语法: influxd backup 备份元数据,没有任何其他参数,备份将只转移当前状态的系统元数据到path-to-backup。path-to-backup为备份保存的目录,不存在会自动创建。 该备份会备份所有数据库以及所有

Redis巡检检查 redis-check-aof

一、AOF1、AOF 是什么以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,Redis启动之初会读取该文件重新构建数据,换言之,Redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。 2、AOF默认不开

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

〇、写在前面 本应用基于开源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