航模无人机中PWM信号频率浅谈

航模中执行机构:动力电调,舵机等基本都是通过PWM信号来驱动的,但不同的电机或电调输入的信号频率和占空比又是不一样的,这个是由什么决定的呢?今天就以我的理解来简单讲一讲。

        最早的航模多是固定翼,是没有飞控的,PWM是由遥控器接收机的PWM通道输出的,频率大概是在50HZ左右(以前用示波器测试过乐迪遥控器的PWM频率是67.42HZ),这个频率主要由舵机的输入频率决定的,早期模拟舵机是直流伺服电机控制器芯片一般只能接收50Hz频率(周期20ms)~300Hz左右的PWM,脉宽在0.5-2.5ms之间。

        接收机

           舵机

 

     后来多旋翼时代,一直沿用这个控制信号来做控制,但是对于多旋翼,要求更高的控制频率和精度,如果PWM还是50HZ,会限制电调每秒钟调节的次数最多就50次,得不到很好的控制效果,所以多旋翼飞控在输出PWM的时候会采用更高的频率,像Pixhawk采用的是400HZ,为什么不再高一些?这个主要由两方面决定的:

 

   1)对于姿态控制一般100HZ-250HZ就能取得良好的控制效果,再大由于电机的转动惯量差别不大。再小的话也不能小于控制算法的控制频率。

   2)

Arduino Uno可以读取航模接收机PWM(脉宽调制)信号通过连接适当的传感器或电路。PWM信号通常用于遥控设备,比如控制电机的速度或舵机的位置。以下是步骤: 1. **硬件连接**: - 将航模接收机的PWM引脚连接到Arduino Uno的数字输入端口。这些通常是棕色或蓝色的信号线,例如接收机上的5V、接地(GND)、以及PWM通道(如通道1或通道2)。 - 确保连接可靠,避免短路。 2. **安装库**: - Arduino Uno需要安装`Servo`库来解析PWM信号。如果你还没有安装,可以在Arduino IDE的"Sketch"菜单选择"Include Library",然后搜索并安装"Servo"库。 3. **编写代码**: ```cpp #include <Servo.h> // 引入Servo库 Servo myservo; // 创建一个伺服对象 void setup() { myservo.attach(9); // 通常PWM信号会连接到pin 9,如果是其他则替换数字,范围0-11 Serial.begin(57600); // 初始化串行通信,用于监控接收到的数据 } void loop() { int pwmValue = analogRead(A0); // 如果接收的是模拟信号,则从A0引脚读取值 // PWM信号通常是一个0-1023的数字,这里假设接收机将信号映射到这个范围内 if (pwmValue > 0 && pwmValue <= 1023) { float angle = map(pwmValue, 0, 1023, 0, 180); // 根据PWM值计算角度 myservo.write(angle); // 设置舵机的角度 } delay(50); // 每隔一段时间读取一次,可根据实际需求调整延时时间 } ``` 4. **测试与调试**: - 编译并上传程序到Arduino Uno板上,然后使用串行监视器查看接收到的PWM信号是否正常,并观察舵机动作是否响应。 注意:如果接收的是原始的PWM脉冲信号,而不是经过编码的模拟电压,那么你需要先将其转换成数字信号再处理。此外,某些接收机可能需要特定的协议解析才能得到正确的数据,这通常会在接收机的手册有说明。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值