MM32SPIN422C

今天我们来聊聊这个芯片:
本产品使用高性能的 ARM ® Cortex TM -M0 为内核的 32 位微控制器,内嵌三相半桥栅极驱

动器与 MOSFET。最高工作频率可达 96MHz,内置高速存储器,丰富的增强型 I/O 端口
和外设连接到外部总线。本产品包含 2 个 12 位的 ADC、2 个比较器、2 个运算放大器、1
个 16 位通用定时器、1 个 32 位通用定时器、3 个 16 位基本定时器、2 个 16 位高级定时
器。还包含标准的通信接口:1 个 I2C 接口、1 个 SPI 接口和 2 个 UART 接口。
本产品产品系列工作电压为 2.0V ∼ 5.5V,工作温度范围包含-40 ◦ C ∼ +85 ◦ C 常规型和-40 ◦ C
∼ +105 ◦ C 扩展型。多种省电工作模式保证低功耗应用的要求。
本产品提供 QFN32 共 1 种封装形式;根据不同的封装形式,器件中的外设配置不尽相同。
这些丰富的外设配置,使得本产品微控制器适合于多种应用场合:
• 电机驱动和应用控制
• 医疗和手持设备
• PC 游戏外设和 GPS 平台
• 工业应用:可编程控制器(PLC)、变频器、打印机和扫描仪
• 警报系统、视频对讲、和暖气通风空调系统等
内嵌三相半桥栅极驱动器与MOSFET,显而易见。MCU与电机驱动集成一体。
使用此芯片可以直接驱动无刷电机。
官方手册驱动电流:1.5A Continuous(2A Peak);所以设计的时候就需要考虑好电流的问题了

MM32SPIN422C PWM配置,驱动无刷电机

这个芯片的驱动控制有一个使能脚,驱动无刷电机的时候需要打开这个引脚:
PB12使能驱动口

/*******************************************************************************
* @name   : initGPIO_Timer1
* @brief  : Init GPIO Timer1
* @param  : void
* @retval : void
*******************************************************************************/
void initPWM_EN(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);  //开启GPIOA、GPIOB时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIOB->BSRR = GPIO_Pin_12;  //使能栅极驱动器
}

然后正常配置互补PWM
GPIO口配置和互补PWM配置

//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM1_PWM_Init(u16 arr,u16 psc)
{  GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_OCInitTypeDef  TIM_OCInitStructure;TIM_BDTRInitTypeDef TIM_BDTRInitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA|RCC_AHBPeriph_GPIOB, ENABLE);  //开启GPIOA、GPIOB时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10; //TIM1_CH1,TIM1_CH2GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_PinAFConfig(GPIOA, GPIO_PinSource8,GPIO_AF_2);GPIO_PinAFConfig(GPIOA, GPIO_PinSource9,GPIO_AF_2);GPIO_PinAFConfig(GPIOA, GPIO_PinSource10,GPIO_AF_2);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; //TIM1_CH1N,TIM1_CH2NGPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_PinAFConfig(GPIOB, GPIO_PinSource13,GPIO_AF_2);GPIO_PinAFConfig(GPIOB, GPIO_PinSource14,GPIO_AF_2);GPIO_PinAFConfig(GPIOB, GPIO_PinSource15,GPIO_AF_2);TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值  80KTIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  不分频TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_RepetitionCounter =0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位/* Set the default configuration */TIM_BDTRInitStruct.TIM_OSSRState = TIM_OSSRState_Enable;//运行模式下关闭状态选择TIM_BDTRInitStruct.TIM_OSSIState = TIM_OSSIState_Enable;//空闲模式下关闭状态选择TIM_BDTRInitStruct.TIM_LOCKLevel = TIM_LOCKLevel_OFF;//软件错误锁定配置:锁定关闭无保护TIM_BDTRInitStruct.TIM_DeadTime = 0x5;//DTG[7:0]死区发生器配置:(死区时间DT)  ,注意死区时间要设成100ns左右,否则过大会导致MOS栅极PWM波形异常,太小导致上下臂短路//TDTS = 125nS(8MHz)//DTG[7: 5] = 0xx => DT = DTG[7: 0] * Tdtg, Tdtg = TDTS;//DTG[7: 5] = 10x => DT =(64+DTG[5: 0]) * Tdtg, Tdtg = 2 * TDTS;//DTG[7: 5] = 110 => DT =(32+DTG[4: 0]) * Tdtg, Tdtg = 8 * TDTS; //DTG[7: 5] = 111=> DT =(32 + DTG[4: 0]) *  Tdtg, Tdtg = 16 * TDTS;TIM_BDTRInitStruct.TIM_Break = TIM_Break_Disable;  //刹车配置:使能刹车TIM_BDTRInitStruct.TIM_BreakPolarity = TIM_BreakPolarity_High;//刹车输入极性选择:高电平有效TIM_BDTRInitStruct.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;//自动输出使能配置:MOE只能软件置1TIM_BDTRConfig( TIM1, &TIM_BDTRInitStruct); //配置互补输出死区时间    TIM_OCStructInit(&TIM_OCInitStructure);TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式1TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;TIM_OCInitStructure.TIM_Pulse = 500; //设置待装入捕获比较寄存器的脉冲值TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High; TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset;TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset;TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMxTIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式1TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High; TIM_OC2Init(TIM1, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMxTIM_OC3Init(TIM1, &TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH1预装载使能TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH2预装载使能TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH2预装载使能TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的预装载寄存器TIM_CCMR1_IC1F_1TIM_ITConfig(TIM1, TIM_IT_CC1, ENABLE);TIM_CtrlPWMOutputs(TIM1,ENABLE);TIM_Cmd(TIM1, ENABLE);  //使能TIM1
}/*******************************************************************************
* @name   : initNVIC_TIM1
* @brief  : PWM中断配置
* @param  : void
* @retval : void
*******************************************************************************/
void initNVIC_TIM1(void)
{NVIC_InitTypeDef NVIC_InitStructure;// Config TIM1_CC_IRQn NVIC configNVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn;NVIC_InitStructure.NVIC_IRQChannelPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}
/*******************************************************************************
* @name   : OnTIM1
* @brief  : Enable TIM1 使能定时器
* @param  : void
* @retval : void
*******************************************************************************/
void OnTIM1(void)
{TIM_Cmd(TIM1, ENABLE);
}
/*******************************************************************************
* @name   : TIM1_CC_IRQHandler
* @brief  : TIM1 Compare/Capture IRQHandler 定时器中断处理函数
* @param  : void
* @retval : void
*******************************************************************************/
volatile uint32_t TIMER0_Count = 0;
void TIM1_CC_IRQHandler()  //43us
{if (TIM_GetITStatus(TIM1, TIM_IT_CC1) != RESET){// Clear the CC1 flagTIM_ClearITPendingBit(TIM1, TIM_IT_CC1);TIMER0_Count ++;}
}
//PWM初始化配置
void PWM_INIT_ALL(void)
{initPWM_EN();//config TIM to PWM outputTIM1_PWM_Init(1999,0);initNVIC_TIM1();OnTIM1();
}
//占空比配置
TIM1->CCR1 = w_time_ph_a;
TIM1->CCR2 = w_time_ph_b;
TIM1->CCR3 = w_time_ph_c;

灵动微单片机MM32的PWM配置相关推荐

  1. 灵动微单片机MM32F0140的Mini-LED应用

    与传统LED相比,Mini-LED具有更精确的亮度调节.更高的亮度和对比度.更为强大的HDR效果以及更丰富的色彩.随着Mini-LED显示技术的迅速发展,Mini-LED显示产品已开始应用于超大屏高清 ...

  2. MB级存储的灵动微单片机MM32F5280

    星辰处理器能带给灵动微F5系列高性能.而且有可扩展性,后续可根据客户的需求扩展应用指令.然后还支持L1 I/D Cache,独立的TCM接口.另外其生态已经完备,目前主流的编译工具都已经支持,例如常规 ...

  3. 灵动微 MM32 多路ADC-DMA配置

    一.问题 最近在使用灵动微的MM32,当用多路ADC-DMA时,出现了一些问题,所以在此记录一下 总结下来,处理了下面几个问题(这里的问题是拿到最新的SDK包,参考example没办法解决的) 多路通 ...

  4. 灵动微MM32产品特色及应用市场

    MM32系列是灵动微电子于2020年推出的新一代通用MCU平台,旨在为客户提供更高性能.更低功耗.更高可靠性.稳定性和健壮性的微控制器.全新MM32硬件上与经典MM32全兼容,保留了2.0-5.5V宽 ...

  5. STM32国产替代者灵动微

    自秋季以来,8英寸晶圆代工产能紧缺,报价调涨,MCU.MOS,TDDI,闪存,面板等电子元器件进入了愈演愈烈的涨价模式.目前台系台积电.联电.世界先进.力积电等晶圆代工厂第四季订单已经全满,明年上半年 ...

  6. 灵动微32位单片机LQFP64引脚MM32F3273G7P

    灵动微MM32F3273G7P采用ARM®Cortex®-M3内核的高性能32位单片机,工作频率高达120兆赫兹,内置512KB Flash和128KB RAM的高速存储器,具有丰富的I/O端口和外设 ...

  7. 灵动微新品封装SOP8单片机32位MM32F0010A6T

    灵动微MM32F0010A6T采用内核M3的高性能32位单片机,工作频率最高可达48兆赫兹,内置高速存储器(闪存16KB,SRAM为2KB),具备丰富的I/O端口和外设连接到外部总线.包含1个12位的 ...

  8. FMD辉芒微FT61F133A-RB SOP16 ADC/PWM型单片机MCU

    FMD辉芒微FT61F133A-RB SOP16 ADC/PWM型单片机MCU 产品简介 : FT61F13X是一款精简指令集的A/D型8位单片机,其内部集成了一个RAM数据存储器和一个非易失型数据E ...

  9. 适用于温控器应用的灵动微32位单片机MM32L0130

    温控器的工作原理是通过温度传感器对环境温度自动进行采样.即时监控,当环境温度高于控制设定值时控制电路启动,可以设置控制回差.如温度还在升,当升到设定的超限报警温度点时,启动超限报警功能.当被控制的温度 ...

最新文章

  1. php 扫码识别页面跳转_PHP 扫码识别信息方法
  2. Spartan-6的I/O时钟缓冲器
  3. opencv滤波美颜
  4. 学python看谁的视频比较好-Python入门视频看哪个好?适合初学者的教学视频推荐...
  5. 将spfile从ASM里迁移到文件系统
  6. Python学习笔记(十三)
  7. java createjpeg4_在linux下用java的JPEGCodec.createJPEGEncoder(bos)生成jpg图片问题
  8. LINUX下SYN***战
  9. 应急照明市电检测_应急照明如何供电? 如何接线? 图文分析!
  10. mysql 存储过程 生成数据_mysql使用存储过程,批量生成测试数据
  11. C++基础教程之函数重载,什么是C++函数重载?
  12. 批处理 批量s扫1433_批处理批量字符替换
  13. datatable自定义表单或者导出excel按钮,搜索
  14. verilog实现格雷码与二进制码的互换
  15. WEB安全之:密码穷举破解
  16. 兴业研发晨会纪要2008年 10月 30日
  17. SpringCloud集成分布式事务LCN
  18. 【codeforces 527A】Playing with Paper
  19. code block怎样导入整个文件夹_PR怎样大批量添加字幕? 协同AE。
  20. TCP和UDP的区别有哪些

热门文章

  1. iOS动效-利用CATransform3D实现翻页动画效果
  2. 手把手使用esp8266一起来做智能插排-硬件篇
  3. 《音视频开发进阶指南:基于Android与iOS平台的实践》源码下载地址
  4. fasterq-dump 报443的那些事
  5. 安全 · 事大——从软件供应链攻击看SCA
  6. WeUI 为微信 Web打造权限UI框架
  7. kaggle比赛--Quora Question Pairs
  8. Flask学习(二)——Jinja2模板引擎
  9. 国内ARM核心板有哪些型号和作用
  10. 现场抽奖小程序_小程序直播怎么引爆现场,小程序直播中 4大互动促转玩法