1 - 香橙派硬件PWM控制sg90舵机
本人机械电子专业的大一学生一枚,这是我在博客园的第一篇随笔
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舵机的更多相关文章
- 实现硬件PWM控制电机旋转和通过编码器计算所转圈数的简单例程
该例程所用的硬件设备: 直流电机驱动模块YYH-LWZ: H桥 大功率 正反转 刹车 PWM 调速 5/12/24V 12V直流减速电机JGB37-520B:ASLONG JGB37-520B编码器减 ...
- 树莓派(香橙派)通过.NET IoT 操作SPI编写屏幕驱动 顺手做个四足机器人(一)
摘要 这片文章主要是记录自己的整活过程,涉及到的技术包括.NET IoT, .NET Web, .NET MAUI,框架采用的也是最新的.NET 7. 本人是用的树莓派Zero 2 W(ubuntu- ...
- 180度\360度sg90舵机的使用及代码程序
大部资料都是在网上找到网友大神所共享的,在网上找了几种舵机的,刚接触有点懵,之后找得多了就理解了,想要控制一个硬件就要先了解这个硬件.这里有介绍180度舵机和360度舵机的具体使用,有网上大神的程序, ...
- 树莓派操控SG90舵机
目录 舵机接线 PWM介绍 使用PWM控制舵机 这里使用树莓派来操作sg90的舵机.先看一下这个舵机的样子: 这就是传说中的SG90舵机啦,转角是0-180. SG90舵机接线: SG90舵机有三条线 ...
- PWM控制led渐变
PWM,中文释义:脉冲宽度调制.它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术. PWM 是一种对模拟信号电平进行数字编码的方法.通过高分辨率计数器的使用,方波的占空比被调制用来对 ...
- 树莓派 温度监控 PWM 控制风扇 shell python c 语言
Mine: 图中圈出来的是三极管 和滤波电容 依赖库: wiringPi sudo apt-get install wiringpi Shell脚本 本文介绍使用Shell脚本在树莓派上启用软件PWM ...
- 8_陀螺仪MPU6050和PWM控制在STM32F4-Discovery开发板上的实现
非常早曾经就把圆点博士的程序从STM32F103移植到STM32F4_Discovery (STM32F407), battery.陀螺仪和PWM电机控制的程序都已经測试完成,执行有一段时间,正常.以 ...
- PWM控制灯亮暗的verilog实现
PWM的全称为Pulse-Width Modulation(脉冲宽度调制),即调节脉冲的占空比.当输出的脉冲频率一定时,输出的脉冲占空比越大,相当于输出的有效电平越大,这样也就简单实现了由FPGA来控 ...
- 【完整篇】orangepi香橙派新手入门之被官方坑
图片特意缩小,看不清请打开另一个窗口查看原图. 第一步:烧录系统,我烧录的是Ubuntu_Desktop[请注意!!!!用户名是错的!!用户名是错的!!用户名是错的!!] 正确的用户名是orangep ...
- 2022年写的香橙派 OrangePi Zero 用python获取dht11温度和湿度
感谢网上资料和个人的不放弃,终于方便的解决了香橙派 OrangePi Zero用python获取dht11温湿度的问题. 网上关于香橙派的资料比起树莓派真是少之又少,现在香橙派zero能干的活暂时也只 ...
随机推荐
- MySQL基本手册
MySQL配置文件 MySQL软件使用的配置文件名为my.ini,在安装目录下. MySQL常用配置参数: 1.default-character-set:客户端默认字符集. 2.character- ...
- MogDB 使用样本数据集Mogila
MogDB 使用样本数据集 Mogila MogDB 提供了一个样本数据集 Mogila,本数据集借鉴了适用于 MySQL 的Sakila 示例数据库.Sakila最初由 MySQL AB 文档团队的 ...
- 7月27日19:30直播预告:HarmonyOS3及华为全场景新品发布会
7月27日 19:30 HarmonyOS 3 及华为全场景新品发布会 高能来袭! 在HarmonyOS开发者社区企微直播间 一起见证HarmonyOS的又一次智慧进化 扫码预约直播,与您不见不散!
- Excel 表间关联运算的示例
用 Excel 处理数据时,经常会涉及到多页 sheet 数据之间的关联运算需求,用 vlookup 可以完成部分简单关联,但较复杂的情况时仍然不太方便,常常需要多次操作才能完成.另外,当要做关联的文 ...
- docker 应用篇————容器卷[十一]
前言 简单介绍一下容器卷. 正文 我们发现一个文件,就是什么呢? 就是说因为我们的容器一但删除那么什么都没有了. 那么如何能够不删除呢?那么可以使用容器卷. 比如说系统我们容器内的/usr 使用我们的 ...
- maven 创建spring boot 需要的配置[一]
前言 之所以写这个是因为现在官方推荐云创建: 所以标注一下maven project,创建后,如何导入spring boot. 正文 1.步骤一 在pom.xml 中加入: <dependenc ...
- 一文读懂IoU,GIoU, DIoU, CIoU, Alpha-IoU (代码非常优雅)
IoU就是就是我们说的交并比 Intersection over Union ,具体就是两个box的交集除以并集. 当我们计算我们的anchors 或者 proposals 与 ground trut ...
- spring boot oauth2 取消认证
最近有一个项目需要从微服务中抽离,但是因为调用的包里关联了认证所以就算抽离处理还是会进oauth2默认的登入页面: @SpringBootApplication(exclude = {EurekaCl ...
- 自动化部署脚本--一键部署单机版k8s
cat danjiDeploy_k8s.sh #!/bin/bash . /etc/init.d/functions # 版本 VERSION=v1.0.1 # IP地址,默认为本机第一块网卡IP地址 ...
- hashchang事件是异步更新的
1.代码 // 此时会触发hashchange location.hash = '/test' window.addEventListener('hashchange', () => { con ...