0

我在 mikroc 中编写了一个代码,将 pwm 信号应用于电机。现在,由于传递给 PWM 内置函数的占空比需要是短数据类型,并且我的 pid 输出是浮点类型,所以我将浮点型转换为短型。但问题是,对于小于或等于 100 的值,转换正确完成,而对于超过 100 的值,它给出诸如 65535 之类的值。 例如:如果浮点值为 255,则短等于 65535,如果浮点值为 100,则短等于 100 我无法弄清楚错误是什么?

下面是我的代码只有 main 和 UART 功能

主功能

  void main() {
  UART1_Init(9600);
  pro=5,i=0,der=0;
  setPoint=100,sel=1;
  actualOut=80;
  pOut=0,iOut=0,dOut=0;
  out=16;
  error=0,lastError=0;
  OPTION_REG=0;
  T1CON=0;
  INTCON=0;
  ADCON0=0;
  CMCON = 0x07;
  TRISC.RC0=1;
  TRISC.RC2=0;
  TRISC.RC6=0;
  PORTC=0;
  while(1){
  out = pid(actualOut);
  duty=(short)out;              out is float type and duty is short
  Uart1_Intout_ReturnInt(duty);
  UART1_Write(13); // newline
  pwm(duty);
  actualOut = feedback();

  }
  }

串口功能

 Uart1_Intout_ReturnInt(unsigned i) {
 char puf[6]; //for max 5 digits and the end-sign
 WordToStr(i, puf); // in "Conversions" library
 UART1_Write_Text(puf);
 return i;
  }

使用虚拟终端和 uart 在 proteus 中显示值请帮助我

4

1 回答 1

0

我发现解决方案类型转换需要通过以下方式完成

unsigned short duty=(unsigned short)out;

– 直流电动机

于 2015-08-19T10:42:54.543 回答