我在 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 中显示值请帮助我