找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10716|回复: 8
收起左侧

自制萝莉无刷电调

  [复制链接]
ID:611123 发表于 2020-4-23 11:07 | 显示全部楼层 |阅读模式
首先感谢萝莉大神的一系列教程,原贴地址
游客,本帖隐藏的内容需要积分高于 1 才可浏览,您当前积分为 0

贴内有详细教程,本人只把图纸和固件拷贝至此,为方便广大电子爱好者下载学习;
PN版

PN版

PN版
112651wswhw564ab78bhz8.jpg
全N

PN

PN
112540w3gugfa9axf5cmfe.jpg

固件烧录
110958s1ee6bzjffcp699e.png
固件;全N版
只有hex文件,无源码: 萝丽全N无刷固件.rar (2.07 KB, 下载次数: 169)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:611123 发表于 2020-4-23 11:11 | 显示全部楼层
全N和PN的原理图位置错了,大家注意,全N指的是用的MOS管都为nMOS
回复

使用道具 举报

ID:639666 发表于 2020-12-22 10:31 | 显示全部楼层
你的电路图全部都有错误
回复

使用道具 举报

ID:675863 发表于 2021-6-27 12:44 | 显示全部楼层
电路图好像两个 全n和pn的有错误,电源反了吧
回复

使用道具 举报

ID:13396 发表于 2022-3-13 20:41 | 显示全部楼层
不错,谢谢楼主。
回复

使用道具 举报

ID:467178 发表于 2023-4-9 11:22 | 显示全部楼层
太棒了留下记号
回复

使用道具 举报

ID:467178 发表于 2023-4-9 11:22 | 显示全部楼层
lhxtzlhxtz 发表于 2020-12-22 10:31
你的电路图全部都有错误

???
回复

使用道具 举报

ID:467178 发表于 2023-4-9 14:07 | 显示全部楼层
能把c分享一下吗
回复

使用道具 举报

ID:598932 发表于 2023-6-8 13:13 | 显示全部楼层
不给源码 这不浪费感情嘛,我给你写一个示例代码把
#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 单片机教程网

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