CMS32系列芯片:
Cortex®-M0 处理器是一个可配置,具有多级流水线的 32 位 RISC 处理器。它拥有一个 AMBA AHB-Lite 接口并包含 NVIC 组件,同时有可选的硬件调试功能。该处理器可以执行 Thumb 指令,并与其他 Cortex®-M 系列处理器兼容。该处理器支持两种工作模式——Thread 模式和 Handler 模式。 异常时系统进入 Handler 模式, 异常返回只能在 Handler
模式下执行。系统复位及异常返回后均可进入 Thread 模式。
1.2 特性
◆ 低门数处理器:
- ARMv6-M Thumb®指令集。
- Thumb-2 技术。
- ARMv6-M 兼容 24 位系统定时器。
- 一个 32 位硬件乘法器。
- 系统接口支持小端数据访问。
- 准确而及时的中断处理能力。
- 加载/存储多个数据和多周期乘法指令可被终止,然后重新开始,从而实现快速中断处理。
- C 应用程序二进制接口的异常兼容模式。
- ARMv6-M 的 C 应用程序二进制接口(C-ABI)异常兼容模式允许用户使用纯 C 函数实现中断处理。
◆ NVIC:
- 32 个外部中断,每个中断有 4 级优先级。
- 专用的不可屏蔽中断(NMI)。
- 同时支持电平和脉冲触发中断。
- 支持中断唤醒控制器(WIC),提供极低功耗空闲模式。
◆ 调试支持:
- 四个硬件断点。
- 两个观察点。
- 用于非侵入式代码分析的程序计数采样寄存器(PCSR)。
- 单步和向量捕捉能力。
◆ 总线接口:
- 为所有的系统接口及存储器提供简单集成的单一的 32 位 AMBA-3 AHB-Lite 系统接口。
- 支持 DAP(调试使用端口)单一的 32 位从机端口。

4.jpg
3.jpg


  主控ARM Cortex M0内核,主频最高64MHz,工作电压:2.1V-5.5V,工作温度:-40℃ - 105℃,32KB Flash,8KB SRAM,1KB Data Flash、


DEMO程序运行:需要注意是JLINK烧录需要版本9.0以上才可以


2.jpg


核心代码
  1. void MC_Control(void)
  2. {
  3.         switch(SYSTEM_STATE)
  4.         {
  5.                 /* 系统初始化 */
  6.                 case SYS_INIT:
  7.                 {
  8.                         Mot_Parameter_Init();
  9.                         BasePara_Init();
  10.                         SYSTEM_STATE = SYS_RUN;                        
  11.                         break;
  12.                 }
  13.                 /* 系统正常工作状态 */
  14.                 case SYS_RUN:
  15.                 {       
  16.                         /* 系统处于界面调试模式 */
  17.                         #if (Config_Comm_Mode == Comm_UI)       
  18.                         {
  19.                                 if(Flag.MC_RunStop == 0)        {BasePara_Init();}
  20.                                 if(Fault_OverVoltage || Fault_UnderVoltage)        {u_Motor_Off();}       
  21.                         }
  22.                         #else
  23.                         /* 电机运行以及调速控制 */
  24.                         if(Time.Motor_Restart == 0)
  25.                         {
  26.                                 /* 故障刹车保护重启 */
  27.                                 if(Fault_ShortCircuit)
  28.                                 {
  29.                                         Fault_ShortCircuit=0;
  30.                                         EPWM_ResetFaultBrake();
  31.                                 }               
  32.                                
  33.                                 /* 电压保护关机 */
  34.                                 if(Fault_OverVoltage || Fault_UnderVoltage)       
  35.                                 {                                       
  36.                                         u_Motor_Off();
  37.                                 }else if(Fault_Block){
  38.                                                 Fault_Block=0;
  39.                                                 u_Motor_On();
  40.                                 }                                       
  41.                                 else
  42.                                 {
  43.                                         /*用户控制代码:由客户按照实际应用自行处理,包括以下几点 */
  44.                                         /* 1、电机运行使能:u_Motor_On(); */
  45.                                         /* 2、电机停止:u_Motor_Off(); */
  46.                                         /* 3、调速信号给定:u_Motor_Speed_Set(Basic.VCtr); */
  47.                                         #if (0)
  48.                                         if(Basic.VCtr < VCTRL_REF_L)
  49.                                         {
  50.                                                 u_Motor_Off();
  51.                                         }
  52.                                         else if(Basic.VCtr > VCTRL_REF_H)
  53.                                         {
  54.                                                 u_Motor_Speed_Set((Basic.VCtr>>2));
  55.                                                 u_Motor_On();
  56.                                         }
  57.                                         #endif
  58.                                 }
  59.                         }       
  60.                         #endif                       
  61.                         break;
  62.                 }       
  63.                 /* 电机重启 */
  64.                 case SYS_RESTART:
  65.                 {       
  66.                         u_Motor_Off();       
  67.                         /* 重启间隔时间 */
  68.                         Time.Motor_Restart = Motor_Restart_InvalTime*1000;
  69.                         /* 故障次数超过限定次数不再重启 */
  70.                         if(++Count.Motor_Restart >= Motor_Restart_Times)
  71.                         {
  72.                                 Count.Motor_Restart = Motor_Restart_Times;
  73.                                 SYSTEM_STATE = SYS_WAIT;
  74.                         }                                       
  75.                         SYSTEM_STATE = SYS_RUN;        
  76.                         MOTOR_STATE = MC_INIT;
  77.                         break;
  78.                 }       
  79.                 /* 异常停机 */
  80.                 case SYS_FAULT:
  81.                 {
  82.                         System_Modules_off();
  83.                         break;
  84.                 }
  85.                 /* 等待上电重启 */
  86.                 case SYS_WAIT:
  87.                 {
  88.                         System_Modules_off();               
  89.                         Clear_Fault_Message();
  90.                         Count.Motor_Restart = 0;
  91.                         SYSTEM_STATE = SYS_RUN;
  92.                         break;
  93.                 }       
  94.                 default:
  95.                         break;               
  96.         }
  97. }

1.jpg


33.jpg


接入电机测试OK!