直流无刷电机控制器(换电机霍尔收费多少)

上封帖子介绍了51单片机,JMT18F003PLUS,提供了芯片例程和资料,链接如下:JMT18F003PLUS单片机芯片手册,例程等资料下载http://www.51hei.com/bbs/dpj-148985-1.html(出处:51hei)这里把这款芯片用于直流无刷电机控制的demo程序,有感和无感源代码,一并开源,希望对学习者有帮助。BLDCdemo板是这样的:芯片资料,bldc控制板…

大家好,又见面了,我是你们的朋友全栈君。

上封帖子介绍了51单片机,JMT18F003PLUS,提供了芯片例程和资料,链接如下:

JMT18F003PLUS单片机芯片手册,例程等资料下载

http://www.51hei.com/bbs/dpj-148985-1.html

(出处: 51hei)

这里把这款芯片用于直流无刷电机控制的demo程序,有感和无感源代码,一并开源,希望对学习者有帮助。

BLDC demo板是这样的:

芯片资料,bldc控制板简要说明,原理图,有感和无感的开源软件等等,请点击下载:

JMT18F003 PLUS BLDC DEMO 板应用笔记

1. 简介

本应用笔记讨论了使用 JMT18F003 PLUS 控制芯片对无刷直流电机(Brushless Direct Current Motor,  BLDC)进行方波算法的控制。

2.  JMT18F003 PLUS 芯片特点

8位MCU,兼容 MCS51指令集;

内核运行最高频率 24.576MHz;

8K字节Flash、1K字节外部 RAM、128 字节内部RAM;

2个高性能 16位 PWM 模块,最高运行频率 73.728MHz,其中 PWM0支持3路互补加 1路独立PWM, PWM1支持 1路互补PWM;

1 个 12 通道的 10 位 ADC、1 个可编程运算放大器(4 组差分输入) 、1个模拟比较器(4组可切换) 、3个 Timer、1个蜂鸣器输出;

通信接口:SPI总线、 I2C总线、 UART总线接口;

支持 JTAG 调试。

3. 电机开发板使用说明

3.1 电机板如下图 1 所示,包括以下资源:

控制芯片:JMT18F003 PLUS芯片;

24V-DC电源接口:为电机板提供24V直流电;

电机U/V/W 接口:连接电机的3根控制线;

电机霍尔接口:连接电机霍尔信号的五根控制线,从左至右依次为: HC、HB、HA、VDD、GND;

串口:用于程序下载和打印调试信息;

滑阻:通过改变滑阻的大小,实现对电机转速的控制;

采样电阻:0.05欧;

排针J5、J6、J7:通过跳线帽选择电机运行方式为无感或有感;

按键S1、S2:用户自定义。

3.2 电机板使用注意点

由于下载串口的 RX管脚与滑阻管脚复用,在使用的时候只能二选一;

电机控制方式选择如图 2 所示,排针 J5、J6、J7 按图 2 左边方式短接则表示选择的电机控制方式为无感控制方式,按图 2右边方式短接则表示选择的电机控制方式为有感控制方式。

JMT18F003 PLUS BLDC DEMO板原理图如下:

4.1JMT18F003 PLUS主控芯片电路如下图所示

4.2 供电模块电路

电压为24V供电,经过如下电路转为5V 电压,给芯片供电。

4.3 PWM MOS 管及驱动电路

4.4 电机反电动势采样电路

4.5 电机霍尔信号输入电路

4.6 电流采样电路

电机板默认采用内部放大电路对电流进行 AD采样。

5. 软件参数设置

电机控制方式选择 SENSORMODE、极对数 POLE_PAIRS、转速范围、电压保护

参数、电流保护参数等参数都位于MotorPara.h文件中。示例如下图所示。

电机控制方式选择SENSORMODE选择为0时,表示选择无感控制电机的方式,主板需要按图 2 左边的排针接法连接;SENSORMODE 选择为 1 时,表示选择有感控制电机的方式,主板需要按图2右边的排针接法连接。

注意:

1、除 PWM 外的其他模块的时钟由片内 24.576MHz(由片内 73.728MHz 高频振荡器产生的时钟经过 3 分频得到)或外部晶振(最高 24MHz)或片内低频振荡器产生的32.768KHz 时钟提供

2、由于滑阻VSP与RXD共用引脚,故调速是RXD不可接串口

3、UVW:红黄黑    HCHBHA:黄白蓝    HUHVHW:CW-326451;CCW-623154

单片机源程序如下:

#include “main.h”

/*****************************************************************************

函 数 名  : main

功能描述  : 主函数

输入参数  : 无

输出参数  : void

*****************************************************************************/

void main()

{

StartParaInit();

WDT_Init();

Crpm_Init();

Port_Init();

UART_Init();

Interrupt_Init();

ADC_Init();

CMP_Init();

Pss(“V0.1”, NONE);

PWM_Init();

#if(SENSORMODE)

PWM1_Init();

#else

Timer0_Init();

#endif

while(1)

{

switch(MasterState)

{

case Startup:

Ps(“Start”, NONE);

Fault_InitOverUnderVoltage();        // 电源电压判断

UserSpeedControlInit();        //滑阻判断

MasterState = Operation;

mcState = mcInit;

break;

case Operation:

MotorControl();

if(ADCIntProtectCnt >= 5)        // 250us

{

Fault_OverCurrent();

Fault_OverUnderVoltage();

UserSpeedControl();

ADCIntProtectCnt = 0;

}

break;

default:

MotorStop();

break;

}

}

}

复制代码

#include “common.h”

MasterState_T MasterState;

MotorState_T mcState;

volatile u8 xdata Phase = 0;        // 相位

volatile u8 xdata NextPhase = 0;

volatile u8 xdata MotorRotation = CW;        // 电机转动方向

volatile u8 xdata TuneDutyRatioCnt = 0;        // 调整转速占空比的周期计数

volatile u16 xdata PWMDutyCycle = 0;        // PWM占空比

volatile u16 xdata CurrentPgaSample = 0;

volatile u16 xdata CurrentSample = 0;        // 电流采样值

volatile u16 xdata VoltageSample = 0;        // 电压采样值

volatile u16 xdata UserSpeedSample = 0;        // 用户调速采样值

volatile u8 xdata ADCIntProtectCnt = 0;        // ADC中断计数保护

volatile u8 xdata flag_ADCSample = 0;        // AD采样时的通道切换标志

volatile u8 xdata flag_ErrorException = 0;        // BIT0:Timer2计数超时        BIT1:比较器中断异常        BIT2:长短波启动超时        BIT3:长短波电流采样过流        BIT4:ADC采样换相异常        BIT5:CMP换相异常

volatile u8 xdata LastPhase = 0;

volatile u8 xdata SamePhaseCnt = 0;

// 电转速60度时间

volatile bit flag_SpeedTime = 0;

volatile u8 xdata SpeedTimeCnt = 0;

volatile u16 xdata SpeedTime = 0;

volatile u16 xdata SpeedTimeTemp = 0;

volatile u32 xdata SpeedTimeSum = 0;

volatile u16 xdata MotorSpeed = 0;

volatile u16 xdata UserRequireSpeed = 0;        // 用户请求转速

volatile u8 xdata RheostatCnt = 0;        // 调速信号

// 保护计数

volatile u8 xdata VoltageProCnt = 0;

volatile u8 xdata CurrentPgaProCnt = 0;

volatile u8 xdata CurrentProCnt = 0;

#if(SENSORMODE)

volatile u8 xdata NowHallState = 0;        // HALL当前位置

volatile u8 xdata PreHallState = 0;        // 前次HALL位置

volatile bit flag_HallStateRight = 0;

volatile u16 xdata OverflowCnt = 0;        // PWM1捕获上溢中断计数

#else

volatile u16 xdata NeutralPoint = 0;

volatile u16 xdata UBemf = 0;

volatile u16 xdata VBemf = 0;

volatile u16 xdata WBemf = 0;

volatile u8 xdata BlankingCnt = 0;

volatile u8 xdata CheckZeroCrossState = 0;

volatile u8 xdata Timer0OutCnt = 0;        // 换相超时

volatile u16 xdata ADCTimeCnt = 0;        // ADC中断计数

volatile u16 xdata DragTime = 0;

#endif

/*****************************************************************************

函 数 名  : Common_Init

功能描述  : 全局变量初始化

输入参数  : 无

输出参数  : void

*****************************************************************************/

void Common_Init()

{

Phase = 0;

NextPhase = 0;

TuneDutyRatioCnt = 0;

PWMDutyCycle = PWM_DUTYCYCLE_05;

CurrentPgaSample = 0;

CurrentSample = 0;        // 电流采样值

VoltageSample = 0;        // 电压采样值

UserSpeedSample = 0;

ADCIntProtectCnt = 0;

flag_ADCSample = 0;

flag_ErrorException = 0;

LastPhase = 0;

SamePhaseCnt = 0;

flag_SpeedTime = 0;

SpeedTimeCnt = 0;

SpeedTime = 0;

SpeedTimeTemp = 0;

SpeedTimeSum = 0;

MotorSpeed = 0;

UserRequireSpeed = 0;        // 用户请求转速

RheostatCnt = 0;

VoltageProCnt = 0;

CurrentPgaProCnt = 0;

CurrentProCnt = 0;

#if(SENSORMODE)

NowHallState = 0;

PreHallState = 0;

flag_HallStateRight = 0;

……………………

…………限于本文篇幅 余下代码请从51黑下载附件…………

复制代码

所有资料51hei提供下载:

JMT18F003 BLDC资料.rar(6.03 MB, 下载次数: 268)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/128976.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • oracle数据库建表语句大全_sql server建表语句

    oracle数据库建表语句大全_sql server建表语句Oracle数据库建表语句#1.建表语句createtableCUST_INFO(CUST_IDVARCHAR(36)notnull,CUST_TYPEVARCHAR(50),CUST_NAMEVARCHAR(200),ID_NO…

  • iText5实现Java生成PDF文件完整版

    iText5实现Java生成PDF文件完整版最近项目中使用到Java实现导出PDF文件,经过一番参考研究最终决定使用itextpdf来实现,当然也可以参考PDFJava类库:Spire.PDFforJava(https://www.e-iceblue.cn/spirepdfjava/create-pdf-in-java.html)。本文是使用第一种来实现的。iText是著名的开放源码的站点sourceforge一个项目,是用于生…

  • c#防止代码被反编译_C程序反编译

    c#防止代码被反编译_C程序反编译1.在编码过程中尽量使用private/internal关键词修饰class、方法和字段名称2.编码过程尽可能少地使用public修饰class、方法和字段名称3.避免使用反射和序列化,反序列化操作4.添加生成事件,调用Dotfuscator进行代码混淆if$(ConfigurationName)==Debug”C:/ProgramFiles(x86)/MicrosoftVisualStudio14.0/PreEmptiveSolutions/Dotfuscatora

  • matlab保存所有图,Matlab中图片保存的5种方法

    matlab保存所有图,Matlab中图片保存的5种方法matlab的绘图和可视化能力是不用多说的,可以说在业内是家喻户晓的。Matlab提供了丰富的绘图函数,比如ez**系类的简易绘图函数,surf、mesh系类的数值绘图函数等几十个。另外其他专业工具箱也提供了专业绘图函数,这些值得大家深入学习好久。今天我只是讨论下如何保存这些由Matlab绘制出来的图像呢?当然借助第三方截图软件,就算了!1、使用imwrite函数如图像是img,则可以使用im…

  • 使用upx脱壳工具脱壳

    使用upx脱壳工具脱壳使用upx脱壳工具脱壳查壳工具链接:https://www.52pojie.cn/thread-437586-1-1.html脱壳工具链接:https://github.com/upx/upx/releases先查壳一般做到逆向的部分题的时候,把文件丢进ida会发现函数特别少,大部分都是加壳了(以攻防世界新手区第7题为例链接:https://adworld.xctf.org.cn/task/task_list?type=reverse&number=4&grade=0)ida打开只

  • laravel中不使用 remember_token时退出报错,如何解决?

    laravel中不使用 remember_token时退出报错,如何解决?

    2021年10月28日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号