前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >直流无刷电机控制器(换电机霍尔收费多少)

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

作者头像
全栈程序员站长
发布2022-07-28 21:47:01
8690
发布2022-07-28 21:47:01
举报

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

上封帖子介绍了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)

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年4月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档