完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
1个回答
|
|
上封帖子介绍了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; |
|
|
|
只有小组成员才能发言,加入小组>>
3314 浏览 9 评论
2995 浏览 16 评论
3494 浏览 1 评论
9059 浏览 16 评论
4088 浏览 18 评论
1178浏览 3评论
605浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
599浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2335浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1896浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 09:19 , Processed in 1.207290 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号