【Proteus仿真】51单片机PWM信号控制舵机

该文介绍了如何在Proteus环境中,通过80C52单片机利用PWM信号来控制舵机转动。代码基于VSMStudio和SDCC编译器,通过设置不同的占空比实现舵机0到180度的角度控制,并提供了相应的定时器初始化和延时函数。附带了仿真资源链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【Proteus仿真】51单片机PWM信号控制舵机


  • 🔖Proteus仿真基础实验 - PWM信号控制舵机转动
  • 🌿Proteus8.12平台
  • 🌿本实验代码基于VSM Studio,采用SDCC编译器。
  • 🎬仿真演示:
    在这里插入图片描述
  • 🍁舵机控制原理图:
    在这里插入图片描述
    在这里插入图片描述
  • 舵机控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度伺服为例,那么对应的控制关系是这样的:


   0.5ms--------01.0ms-------451.5ms-------902.0ms-------1352.5ms-------180

脉冲信号驱动舵机角度,Proteus仿真

  • 舵机不同角度信号控制
    在这里插入图片描述
  • 舵机参数配置:
    在这里插入图片描述
  • 信号设置:不同角度,设置不同的脉冲宽度。
    在这里插入图片描述

📝示例代码

/* Main.c file generated by New Project wizard
 *
 * Created:   2023-5-25
 * Processor: 80C52
 * Compiler:  SDCC for 8051
 */

#include <mcs51reg.h>

#define PWM_Period  (0xB7FE)
#define SERVO_PIN   (P2_0)

unsigned int ON_Period;
unsigned int OFF_Period;
unsigned int DutyCycle;

/* 函数在11.0592MHZ提供1ms的延迟 */
void delay(unsigned int count)
{
    int i = 0;
    int j = 0;

    for(i=0; i<count; i++)
    {
        for(j=0; j<112; j++)
            ;
    }
}

void timer0_init()
{
    TMOD = 0x01;
    TH0 = (PWM_Period>>8);
    TL0 = PWM_Period & 0xFF;
    TR0 = 1;
    ET0 = 1;
}

void timer0_isp() __interrupt 1  __using 1
{
    SERVO_PIN = !SERVO_PIN;
    if (SERVO_PIN)
    {
        TH0 = (ON_Period>>8);
        TL0 = ON_Period;
    }
    else
    {
        TH0 = (OFF_Period>>8);
        TL0 = OFF_Period;
    }
}

void Set_DutyCycle_To(float duty_cycle)
{
    float period = 65535 - PWM_Period;
    ON_Period = ((period/100.0) * duty_cycle);
    OFF_Period = (period - ON_Period);  
    ON_Period = 65535 - ON_Period;  
    OFF_Period = 65535 - OFF_Period;
}

void main(void)
{
    timer0_init();
    EA = 1;

    // Write your code here
    while (1)
    {
        Set_DutyCycle_To(2.7); /* 0°*/
        delay(1000);
        Set_DutyCycle_To(6.33); /* 45°*/
        delay(1000);
        Set_DutyCycle_To(7.45); /* 90° */
        delay(1000);
         Set_DutyCycle_To(8.68); /* 135° */
        delay(1000);
        Set_DutyCycle_To(12); /* 180°*/
        delay(1000);
    }
}

📚仿真资源


链接: https://pan.baidu.com/s/1DSfX5NHGjLniGwQfwhLt0g
提取码: 8c7u

  • 🔖其他说明:

在Proteus中进行VSM编译,需要配置指定SDCC编译器安装路径。

  • 📍SDCC编译器下载:https://sourceforge.net/projects/sdcc/files/
### 如何使用 Jadx 打开 Dex 文件 对于希望利用 Jadx 工具来查看或编辑 Android 应用程序中的 Dex 文件的人来说,了解具体的操作流程是非常重要的。下面提供了详细的指导说明。 #### 使用命令行方式打开 Dex 文件 可以直接通过命令行使用 `jadx` 命令加载并解析单个 Dex 文件: ```bash jadx yourfile.dex ``` 这条指令会启动 Jadx 并尝试解码给定路径下的 Dex 文件[^1]。 #### 利用图形界面工具 Jadx-GUI 来处理 Dex 文件 考虑到部分用户可能更倾向于直观的交互体验,官方也推出了名为 Jadx-GUI 的图形化版本。该应用不仅简化了文件的选择过程,而且增强了用户体验,比如提供语法高亮显示、快捷导航以及全面的文字检索能力等特性。 要借助 Jadx-GUI 加载 Dex 文件,只需按照常规步骤启动应用程序之后,在界面上点击“Open File(s)”按钮选取目标 Dex 文件即可完成加载动作。不过需要注意的是,在某些情况下可能会遇到类似于 “Bad checksum”的警告信息;此时可以通过调整设置选项——即进入菜单栏里的 "File -> Preferences" ,然后找到 `[dex-input] verify dex file checksum before load` 设置项将其改为 `No` ——从而绕过这一限制继续工作[^2]。 #### 自动化批处理多个 Dex 文件 当面对大量需要逐一反编译的情况时,手动逐一遍历显然效率低下。为此可以考虑采用脚本辅助手段实现自动化作业。例如结合 Python 和 FRIDA 技术编写专门针对此类场景优化过的 DEXDump 脚本,配合 Jadx 实现多文件的同时转换与保存至预设位置的功能[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值