芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

飞芯科技-芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

STC15W408AS电调程序芯片解密

  1. 芯片解密本程序试验使用STC15W408AS来驱动航模用的无感无刷三相直流马达.

  2. 芯片解密

  3. 芯片解密电路图见文件 "BLDC-V10-实验电路.pdf".

  4. 芯片解密控制信号由P3.2输入正脉冲信号, 间隔5~20ms, 脉冲宽度1.000~1.610ms.

  5. 芯片解密1.160ms开始启动, 1.610ms为最高速度, 分辨率为2us.

  6. 芯片解密本程序仅仅是简单控制, 软件没有处理过0延时30度切换和过流检测.

  7. 由于过0检测部分有RC滤波, 所以改变电容值可以大约的对应在最高速时延时30度的时间.

  8. 有意者可自行完善电路和程序.

  9. *********************************************************************************/

  10. #define MAIN_Fosc                24000000L        //定义主时钟

  11. #include "STC15Fxxxx.H"

  12. //CMPCR1(比较器控制寄存器 1)
  13. #define        CMPEN        0x80        //1: 允许比较器, 0: 禁止,关闭比较器电源
  14. #define        CMPIF        0x40        //比较器中断标志, 包括上升沿或下降沿中断, 软件清0
  15. #define        PIE                0x20        //1: 比较结果由0变1, 产生上升沿中断
  16. #define        NIE                0x10        //1: 比较结果由1变0, 产生下降沿中断
  17. #define        PIS                0x08        //输入正极性选择, 0: 选择外部P5.5做正输入,           1: 由ADCIS[2:0]所选择的ADC输入端做正输入.
  18. #define        NIS                0x04        //输入负极性选择, 0: 选择内部BandGap电压BGv做负输入, 1: 选择外部P5.4做输入.
  19. #define        CMPOE        0x02        //1: 允许比较结果输出到P1.2, 0: 禁止.
  20. #define        CMPRES        0x01        //比较结果, 1: CMP+电平高于CMP-,  0: CMP+电平低于CMP-,  只读

  21. //CMPCR2(比较器控制寄存器 2)
  22. #define        INVCMPO        0x80        //1: 比较器输出取反,  0: 不取反
  23. #define        DISFLT        0x40        //1: 关闭0.1us滤波,   0: 允许
  24. #define        LCDTY        0x00        //关闭数字滤波功能. 数字滤波功能即为数字信号去抖动功能.

  25. sbit PWM0_L = P3^4;
  26. sbit PWM1_L = P3^5;
  27. sbit PWM2_L = P3^6;

  28. u8        Step;
  29. u8        PWM_Value; // 决定PWM占空比的值
  30. u16        RxPulseWide;
  31. bit        B_RxOk;    //定义一个bool量.
  32. bit        B_RUN;
  33. u8        PWW_Set;
  34. u8        cnt10ms;
  35. u8        Rx_cnt;
  36. u8        TimeOut;        //堵转超时

  37. #define DISABLE_CMP_INT CMPCR1 &= ~0X40                // 比较器中断标志位清0.
  38. #define ENABLE_CMP_INT  CMPCR1 |= 0X40                // 比较器中断标志位置1.

  39. /*********************************************************************/

  40. void Delay_n_ms(u8 dly)
  41. {
  42.         u16        j;
  43.         do
  44.         {
  45.                 j = MAIN_Fosc / 13000;        //延时1ms, 主程序在此节拍下运行
  46.                 while(--j)        ;
  47.         }
  48.         while(--dly);
  49. }


  50. void delay_us(u8 us)
  51. {
  52.         do
  53.         {
  54.                 NOP(20);        //@24MHz
  55.         }
  56.         while(--us);
  57. }

  58. void StepXL(void) // 换相序列函数
  59. {
  60. switch(Step)
  61.           {
  62.            case 0:  // AB
  63.                                 PWM0_L=0;  PWM1_L = 1;  PWM2_L=0;           // Q4常开.
  64.                                 CCAP0H = PWM_Value;        CCAP1H=0;        CCAP2H=0;        // A相由占空比控制.
  65.                                 ADC_CONTR = 0XCD;        // ADC电源开,ADC转换开,选择P1.5作为ADC输入口
  66.                                 CMPCR1 = 0x9C;                // 比较器使能, 下降沿中断允许,通过ADC的P1.5口作为比较器的正极输入端,
  67.                                                                                                                                  //选择外部端口P5.4作为比较器负极输入端.
  68.                  break;
  69.            case 1:  // AC
  70.                                 PWM0_L=0;        PWM1_L=0;  PWM2_L = 1;                        // Q4常开
  71.                                 CCAP0H = PWM_Value;        CCAP1H=0;        CCAP2H=0;        // A相由占空比控制.
  72.                                 ADC_CONTR = 0XCC;        // ADC电源开,ADC转换开,选择P1.4作为ADC输入端
  73.                                 CMPCR1 = 0xAC;                // 比较器使能, 上升沿中断允许,通过ADC的P1.4口作为比较器的正极输入端
  74.                                                                                                                                  //选择外部端口P5.4作为比较器负极输入端.   
  75.                   break;
  76.            case 2:  // BC
  77.                                 PWM0_L=0;        PWM1_L=0;  PWM2_L = 1;                        // Q2常开
  78.                                 CCAP0H=0;        CCAP2H=0;        CCAP1H = PWM_Value; //  B相由占空比控制.                       
  79.                                 ADC_CONTR = 0XCB;   // ADC电源开,ADC转换开,选择P1.3作为ADC输入口测量A点电压   
  80.                                 CMPCR1 = 0x9C;                // 比较器使能, 下降沿中断允许,通过ADC的P1.3口作为比较器的正极输入端
  81.                                                                                                                                  //选择外部端口P5.4作为比较器负极输入端.
  82.                   break;
  83.            case 3:  // BA
  84.                                 PWM0_L = 1;  PWM1_L=0;        PWM2_L=0;                        // Q6常开
  85.                                 CCAP0H=0;        CCAP2H=0;        CCAP1H = PWM_Value; // B相由占空比控制.
  86.                                 ADC_CONTR = 0XCD;        // ADC电源开,ADC转换开,选择P1.5作为ADC输入口测量C点电压  
  87.                                 CMPCR1 = 0xAC;                // 比较器使能, 上升沿中断允许,通过ADC的P1.5口作为比较器的正极输入端
  88.                                                                                                                                  //选择外部端口P5.4作为比较器负极输入端.                       
  89.                   break;
  90.            case 4:  // CA
  91.                                 PWM0_L = 1;        PWM1_L=0;        PWM2_L=0;                    // Q6常开
  92.                                 CCAP0H=0;        CCAP1H=0;        CCAP2H = PWM_Value; // C相由占空比控制.
  93.                                 ADC_CONTR = 0XCC;        // ADC电源开,ADC转换开,选择P1.4作为ADC输入口测量B点电压
  94.                                 CMPCR1 = 0x9C;                // 比较器使能, 下降沿中断允许,通过ADC的P1.4口作为比较器的正极输入端
  95.                                                                                                                                  //选择外部端口P5.4作为比较器负极输入端.
  96.                   break;
  97.            case 5: // CB
  98.                                 PWM0_L=0;        PWM2_L=0;  PWM1_L = 1;                        // Q4常开
  99.                                 CCAP0H=0;        CCAP1H=0;        CCAP2H = PWM_Value; // C相由占空比控制.                     
  100.                                 ADC_CONTR = 0XCB;        // ADC电源开,ADC转换开,选择P1.3作为ADC输入口测量A点电压  
  101.                                 CMPCR1 = 0xAC;                // 比较器使能, 上升沿中断允许,通过ADC的P1.3口作为比较器的正极输入端
  102.                                                                                                                                  //选择外部端口P5.4作为比较器负极输入端.       
  103.                   break;
  104.            default:
  105.                   break;
  106.           }       
  107. }



联系方式

地址:石家庄市新华区民族路77号华强广场D座2009
电话:0311-88816616/87087811
手机:13315190088
传真:0311-67901001
联系人:张工
网址:www.feixindz.com
邮箱:feixindz@163.com
微信:xinpianjiemi
QQ:527263666/568069805

在线客服
热线电话

企业微信