我自己VB编写的上位机用于IPS 的启动 停机 给定转速 转速显示的设置 顺便重新了解下 数据在内存中的存
Machine_speed 定义为全局变量
已经定义的是有符号数
实际上 负数0 还是一个整数0
规定负数0 就是 负数最大是 -32768
最高位是符号位置
负数0
就是 1000 0000 0000 0000 0X8000
运行一下 就是
那么紧接着 有一个问题 就是
1 111 1111 1111 1111 最高位是符号位
规定 16位有符号数 负数0 就是 -32768
提问:-32767 在内存中的存放形式?
注意数据在内存中是以为补码的形式进行存放的
32767 对应的16进制 7 FFF
0111 1111 1111 1111 正数32767 的补码
符号位 不变 其余各位求反以后 加1 得到补码
1 000 0000 0000 0000 加1 变为
1 000 0000 0000 0 u001
所以写入 0X8001
显示-32767
再验证一下 如果要显示 负100 转/分
应该写多少 ?
正数100 对应16进制 0X64
0000 0000 0110 0100
符号位是1
1000 0000 0110 0100
符号位以外 各位求反以后
1111 1111 1001 1011
求反以后加1
1 111 1111 1001 1100
F F9 C
好了 现在开始用上位机 显示转速
更改之前
更改以后
注意 必须选择 CAN2 进行接收
电机启动命令
电机停机命令
设定转速的指令
在启动的状态下 改变转速是可以的, 如果是停机的状态下,改变转速无效 。
需要有一个 全局变量的标志位。
现在 发现转速的设定没有激活 ,我现在需要看一下 是为什么 ?
我发现设定的40000 已经下发下去了
发现CANsETSPEED 设定的是4000
但是Motor_Spd obj 却一直是 34000 ?
为什么是这样 ?
因为易控的上位机的Motor_rspdobjBypassF_C 变量是存在EEPROM 里面的,
用易控的上位机 可以在程序运行的时候, 实时的更改这个变量 。更方便调试
如果参数调整好以后,就可以把这些参数下载进入EEPROM 里面去了 。
现在将这个上位机的工作过程拍摄成视频
如果需要用我自己编写的上位机 进行转速的设定
我需要 把 标定区的变量不再使用
然后用我编写的CAN 结构体 用CAN结构体的成员 进行赋值 临时变量 temp
然后把 temp 的值 赋给 Motor_spdObj
Motor_spdobj 就是最终的给定速度
Motor_spdObj 是全局变量
PID 函数的调用形式
PID 函数的定义
Void Motor_PID (float32 spdobj ) spdobj 是形式参数
{
…..
Motor_spd.deltaF=spdobj – Motor_spdESTF
……
}
PiD函数的调用形式
Motor_PID(Motor_spdobj)
直接将全局变量赋值给 函数中的局部变量 然后使用
这样的好处 是 不占用内存。