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

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

芯片解密DSP的PID控制算法的实现

  1. 芯片解密/*****************************************************************
  2. 芯片解密PID Function
  3. The PID (比例、积分、微分) function is used in mainly
  4. control applications. PIDCalc performs one iteration of the PID
  5. algorithm.
  6. While the PID function works, main is just a dummy program showing
  7. a typical usage.
  8. ****************************************************************/
  9. /****************************头文件******************************/
  10. #include "DSP28_Device.h"
  11. #include "System.h"
  12. #include "DSP28_Adc.h"

  13. typedef struct PID {
  14. double SetPoint;                        // 设定目标Desired value
  15. double Proportion;                      // 比例常数Proportional Const
  16. double Integral;                        // 积分常数Integral Const
  17. double Derivative;                      // 微分常数Derivative Const
  18. double LastError;                       // Error[-1]
  19. double PrevError;                       // Error[-2]
  20. double SumError;                       // Sums of Errors
  21. } PID;
  22. /*********************PID计算部分*********************************/
  23. double PIDCalc( PID *pp, double NextPoint )
  24. {
  25. double dError,
  26. Error;
  27. Error = pp->SetPoint - NextPoint;                          // 偏差
  28. pp->SumError += Error;                                  // 积分
  29. dError = pp->LastError - pp->PrevError;                    // 当前微分
  30. pp->PrevError = pp->LastError;
  31. pp->LastError = Error;
  32. return (pp->Proportion * Error                             // 比例项
  33. + pp->Integral * pp->SumError                            // 积分项
  34. + pp->Derivative * dError );                               // 微分项
  35. }

  36. /**********************Initialize PID Structure************************/
  37. void PIDInit (PID *pp)
  38. {
  39. memset ( pp,0,sizeof(PID));
  40. }

  41. /********************Main Program*********************************/
  42. double sensor (void)                                     // Dummy Sensor Function
  43. {
  44. return 100.0;
  45. }
  46. void actuator(double rDelta)                             // Dummy Actuator Function
  47. {}

  48. void InitAdc(void)
  49. {
  50. unsigned int i;
  51. AdcRegs.ADCTRL1.bit.RESET=1;
  52. NOP;
  53. AdcRegs.ADCTRL1.bit.RESET=0;                      //重新设置
  54. AdcRegs.ADCTRL1.bit.SUSMOD=3;              //设置仿真挂起模式 3,
  55. AdcRegs.ADCTRL1.bit.ACQ_PS=0;
  56. AdcRegs.ADCTRL1.bit.CPS=0;
  57. //对高速时钟 HSPCLK 分频,=0 时,不分频,=1 时,二分频
  58. AdcRegs.ADCTRL1.bit.CONT_RUN=0;             //开始-----停止模式
  59. AdcRegs.ADCTRL1.bit.SEQ_CASC=1;
  60. //级联模式,SEQ1 和 SEQ2 作为一个 16 状态排序器工作。
  61. AdcRegs.ADCTRL3.bit.ADCBGRFDN=3;           //带隙和参考电路上电for(i=0;i<10000;i++) NOP;
  62. AdcRegs.ADCTRL3.bit.ADCPWDN=1;
  63. //除带隙和参考电路外的 ADC 其它模拟电路上电
  64. for(i=0;i<5000;i++)  NOP;
  65. AdcRegs.ADCTRL3.bit.ADCCLKPS=15;
  66.                                             //时钟分频 ADCCLKPS=HSPCLKPS/[2*15*(ADCTRL1[7]+1)]
  67. AdcRegs.ADCTRL3.bit.SMODE_SEL=1;           //选择同步采样模式

  68. AdcRegs.MAX_CONV.bit.MAX_CONV=0;           //设置转换通道0
  69. AdcRegs.CHSELSEQ1.bit.CONV00=0;
  70. AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1;   //清除 SEQ1 的中断标志位
  71. AdcRegs.ADC_ST_FLAG.bit.INT_SEQ2_CLR=1;   //清除 SEQ2 的中断标志位
  72. AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ=0;      //无作用
  73. AdcRegs.ADCTRL2.bit.RST_SEQ1=0;      
  74. //将排序器立即复位到 CONV00 状态
  75. AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;  //使能 INT_SEQ1 的中断请求
  76. AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1=0;
  77.                                           //每个 SEQ1 序列结束时,INT_SEQ1 置位
  78. AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=0;    //EVA 的触发信号不启动 SEQ1
  79. AdcRegs.ADCTRL2.bit.EXT_SOC_SEQ1=0;    //无操作
  80. AdcRegs.ADCTRL2.bit.RST_SEQ2=0;        //无操作
  81. AdcRegs.ADCTRL2.bit.SOC_SEQ2=0;         //清除一个挂起的 SOC 触法
  82. AdcRegs.ADCTRL2.bit.INT_ENA_SEQ2=0;     //禁止 INT_SEQ2 产生的中断请求
  83. AdcRegs.ADCTRL2.bit.INT_MOD_SEQ2=0;
  84. //每个 SEQ2 结束时,INT_SEQ2 置位
  85. AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ2=0;   
  86. //EVB 的触发信号不启动 SEQ2
  87. AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;



联系方式

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

在线客服
热线电话

企业微信