程序中宏定义一下常量: #define BASE_FREQ 400 #define P 16 根据以上宏定义,计算以下公式:BASE_SPEED=120*BASE_FREQ /P,然后将BASE_SPEED带入速度计算公式,在电机不转动的情况下,上位机反馈转速在0与10000多之间来回跳动,检查代码发现,120*BASE_FREQ =120*400=48000>32767,int为16为带符号整形数,范围为-32768~32767,因为在计算120*BASE_FREQ 会将这个中间结果存入int类型的内存区域,这时候4800会溢出内存,所以会导致上述现象。将上式改为BASE_SPEED=120*(BASE_FREQ /P)即可避免上述问题。 |