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

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


相关推荐

  • 笔记:解决redis连接错误:MISCONF Redis is configured to save RDB snapshots, but it is currently not able to…

    笔记:解决redis连接错误:MISCONF Redis is configured to save RDB snapshots, but it is currently not able to…今天重启游戏服务器在连接redis数据库时突然报错:MISCONFRedisisconfiguredtosaveRDBsnapshots,butitiscurrentlynotabletopersistondisk.Commandsthatmaymodifythedatasetaredisabled,becausethisinstance

    2022年10月25日
  • ExtJs自学教程(1):一切从API開始

    ExtJs自学教程(1):一切从API開始

  • 计算机等级二级java试题(计算机考试选择题知识点)

    第一章数据结构与算法【考点1】算法的基本概念1、算法:是指一组有穷的指令集,是解题方案的准确而完整的描述。算法不等于程序,也不等于计算方法。2、算法的基本特征:1)确定性,算法中每一步骤都必须有明确定义,不允许有多义性;2)有穷性,算法必须能在有限的时间内做完,即能在执行有限个步骤后终止;3)可行性,算法原则上能够精确地执行;4)拥有足够的情报。3、算法的组成…

  • 内存映射文件「建议收藏」

    内存映射文件「建议收藏」在做科研,实现一些大数据的算法的时候,经常要调用一些文件的I/O函数,在数据量很大的时候,除了设计的算法和数据结构的耗时以外,其实主要的耗时还是文件的I/O。因为一般常规的方法就是先读出磁盘文件的内容到内存中,然后修改,最后写回到磁盘上。读磁盘文件是要经过一次系统调用,先将文件的内容从磁盘拷贝到内核空间的一个缓冲区,然后再将这些数据拷贝到用户空间,实际上是两次数据拷贝。写回同样也需要经过两次数据拷

  • android系统的官网下载地址,Android安卓10.0系统官方正式版

    android系统的官网下载地址,Android安卓10.0系统官方正式版Android安卓10.0系统官方正式版:这是一款关于安卓的系统,没错就在今天,谷歌更新了关于安卓10.0的系统更新,相信很多的小伙伴都应该是不清楚的,应为感觉还是有很多的用户在等着系统自己的更新,没有操心这一方面的事情。Android安卓10.0系统官方正式版更新了什么功能?1、目前来看的话,更新功能还是蛮多的,但是用户能够看的上的就不言而喻;2、毕竟以前放出来的消息就是这一次更新将会有可能安卓…

  • c++ findwindow函数_matlab中怎么查找函数的用法

    c++ findwindow函数_matlab中怎么查找函数的用法FindWindow用来根据类名和窗口名来得到窗口句柄的。但是这个函数不能查找子窗口,也不区分大小写。如果要从一个窗口的子窗口中查找需要使用FindWindowEX。 函数功能:该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。   函数原型:HWNDFindWindowEx

发表回复

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

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