
关于单片机浮点的运算的程序问题
具体如下,比如说在16位DA给定最大值时(0XFFFF)对应电源输出是20000mA,那么在上位机给定任一电流输出时,DA的程序是怎么样的?以下是我的程序,求高人指点程序...
具体如下,比如说在16位DA给定最大值时(0XFFFF)对应电源输出是20000mA,那么在上位机给定任一电流输出时,DA的程序是怎么样的? 以下是我的程序,求高人指点程序是否可行
上位机给定的要求输出电流为val..比如说val=10000mA,
则DA相应输出Vout=ivb*val 其中ivb=0XFFFF/20000=3.27675
void main()
{
uint val,Vout;
float ivb=3.27675;
Vout*=ivb ;
write_data(Vout);//DA输出子程序
} 展开
上位机给定的要求输出电流为val..比如说val=10000mA,
则DA相应输出Vout=ivb*val 其中ivb=0XFFFF/20000=3.27675
void main()
{
uint val,Vout;
float ivb=3.27675;
Vout*=ivb ;
write_data(Vout);//DA输出子程序
} 展开
4个回答
展开全部
计算DA值,是个比例关系:val:20000 = Vout:0XFFFF
求解Vout=val * 0xFFFF / 20000
直接将上式写进程序就得到Vout,用整型运算,不要做浮点,因为单片机做浮点运算很慢且容易异常延迟;
而且,要先做乘法、再做除法;因为整型除法默认取整,对精确度有影响
另,LZ些的“Vout*=ivb “是Vou=Vout*ivb=Vout*(0XFFFF/20000),右值的Vout是不是应该“val”??
求解Vout=val * 0xFFFF / 20000
直接将上式写进程序就得到Vout,用整型运算,不要做浮点,因为单片机做浮点运算很慢且容易异常延迟;
而且,要先做乘法、再做除法;因为整型除法默认取整,对精确度有影响
另,LZ些的“Vout*=ivb “是Vou=Vout*ivb=Vout*(0XFFFF/20000),右值的Vout是不是应该“val”??
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用不着浮点数。
上位机给定的要求输出电流为val..比如说val=10000mA,
那么就把 FFFFH 的 (1/2) ,即 8000H 送到 DA 即可。
上位机给定的要求输出电流为val..比如说val=10000mA,
那么就把 FFFFH 的 (1/2) ,即 8000H 送到 DA 即可。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我觉得应该是Vout=(uint)(val*ivb),val是你要的输出电流
还有,ivb可以用宏,不要用变量,占内存
还有,ivb可以用宏,不要用变量,占内存
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
单片机不懂。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询