找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4781|回复: 7
打印 上一主题 下一主题
收起左侧

无感无刷直流电机之电调设计全攻略(共97页pdf下载)

  [复制链接]
跳转到指定楼层
楼主
在参考一些关于无刷电机驱动的书籍和帖子的时候,发现高手或是大师好像都比较惜字如金,一些问题往往点到为止或者一笔带过,有些看似简单的问题会让像我这样的电调DIYer困惑很久。所以在本文行文时,笔者力图把问题以大白话的形式说明白,如果各位有觉得哪里看得不明不白的,可以回帖提出(时限一个月,呵呵),我会修改文档以试图将问题讲清楚。如果有些问题我无法回答,我会老老实实跟你说我也没搞清楚,还要请高手来解惑啊。如果发现我哪些内容讲错了,也请不吝指正。


完整的pdf格式文档51黑下载地址(共97页):
http://www.51hei.com/bbs/dpj-116510-1.html


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏7 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:29667 发表于 2019-10-26 18:14 | 只看该作者
好资料,感谢分享
回复

使用道具 举报

板凳
ID:120823 发表于 2019-10-27 06:45 | 只看该作者
感谢分享
回复

使用道具 举报

地板
ID:303467 发表于 2021-9-16 08:56 | 只看该作者
非常好的直流电机设计资料
回复

使用道具 举报

5#
ID:992213 发表于 2021-12-14 14:53 | 只看该作者
资料非常好,值得推荐
回复

使用道具 举报

6#
ID:156777 发表于 2021-12-25 13:04 | 只看该作者
刚好需要学习电调DIY,非常感谢你的资料,我将竭尽所能学习,不浪费你的心血
回复

使用道具 举报

7#
ID:335252 发表于 2023-4-7 19:25 | 只看该作者
非常感谢你的资料
回复

使用道具 举报

8#
ID:598932 发表于 2023-6-8 13:15 | 只看该作者
非常感谢 我也整段示例代码吧 直接源码
#include <reg51.h>
#define FOSC 11059200L
#define BAUD 9600
#define TIMER_CLOCK 921600L

sbit IN1 = P1^0;  //引脚定义
sbit IN2 = P1^1;
sbit IN3 = P1^2;
sbit IN4 = P1^3;

unsigned char code PWM_HL[8] = {0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x3F}; //PWM占空比

void delay_us(unsigned char i)
{
    while(i--);
}

void delay_ms(unsigned char i)
{
    unsigned char j;
    while(i--)
        for(j = 0; j < 110; j++);
}

void Timer0Init()
{
    TMOD &= 0xF0;
    TMOD |= 0x01; //16位计数器模式
    TH0 = 0x3C;
    TL0 = 0xB0;
    ET0 = 1;
    TR0 = 1;
    EA = 1;
}

void SerialInit()
{
    PCON = 0x00;
    SCON = 0x50;
    TMOD |= 0x20; //Timer1为8位自动重载定时器模式
    TH1 = 256-((FOSC/12/32)/BAUD);
    TL1 = TH1;
    TR1 = 1;
}

void PWM(unsigned char speed)
{
    unsigned char i;

    if(speed > 7)
        speed = 7;

    for(i = 0; i < 500; i++)
    {
        if(speed > i >> 8)
            IN1 = 1;
        else
            IN1 = 0;
        if(speed > i >> 6)
            IN2 = 1;
        else
            IN2 = 0;
        if(speed > i >> 4)
            IN3 = 1;
        else
            IN3 = 0;
        if(speed > i >> 2)
            IN4 = 1;
        else
            IN4 = 0;

        delay_us(1);
    }
}

void main()
{
    SerialInit();
    Timer0Init();
    while(1)
    {
        PWM(5);
        delay_ms(2000);
        PWM(2);
        delay_ms(2000);
    }
}

void Timer0_ISR() interrupt 1
{
    static unsigned char count = 0;
    static unsigned char speed = 0;
    TH0 = 0x3C;
    TL0 = 0xB0;
    count ++;
    if(count >= 10)
    {
        count = 0;
        if(SBUF > 10)
            speed = SBUF - 10;
        else
            speed = 0;
    }
    PWM(speed);
    TF0 = 0;
}
```

在此示例中,我们使用了定时计数器Timer0来产生控制无刷电机(4相)的PWM信号。通过修改定时器的计数方式和TH0、TL0寄存器的值,可以实现不同的PWM频率和占空比。具体实现步骤为:

1. 根据控制要求,定义引脚和占空比常量
2. 初始化定时器Timer0,并编写相应的定时器中断服务函数Timer0_ISR()
3. 初始化串口通信,并在主函数中调用PWM()函数来控制无刷电机的速度和方向
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表