我用mikroc编写了一个应用于电机的pwm信号的代码。现在,由于传递给PWM内置函数的任务周期需要很短的数据类型,而且我的pid输出是浮子类型的,所以问题是,对于小于或等于100次浇铸的值,正确地进行了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();
}
}UART函数
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中的值,请帮助我。
发布于 2015-08-19 10:42:54
我发现解决方案类型的转换需要以下列方式进行
unsigned short duty=(unsigned short)out;-直流电动机
https://stackoverflow.com/questions/28645770
复制相似问题